特定のソースからの特定の通知バブルを一時的に除外するにはどうすればよいですか?


12

新しいメールを受信すると、画面に通知バルーンが表示されるようにシステムを構成しています。これは便利な場合もあれば、気を散らすものもあります。私が使用しているGmail統合をアンインストールすることなく、特定の種類の通知を表示するかどうかを中央で切り替える方法はありますか?

つまり、通知サービスを使用する「登録済み」アプリのリストを表示し、有効/無効を切り替えることができるアプリケーション(またはAPI)を探しています。または、source-application-nameまたはnotification-bubble-contentを照合するために使用できる1つ以上の正規表現を作成し、一致した場合に通知をブロックできるようにするもの。


1
Gnome-Shell通知とは異なり、On Ubuntuアプリケーションは通知サービスに登録されません。アプリケーションでハードコーディングされた通知にlibnotifyを使用します。通知設定(gwibber、evolution、Thunderbirdなど)がある場合は、アプリケーション設定からの通知をオフにすることができます。
ルシッドアラム


@orschiroこれは、あなたが言及した(最近投稿された)質問の複製ではありません。この質問は、特定の種類の通知のみをプログラムでフィルタリングし、他の通知は許可することです。もう1つの質問は、すべての通知をミュートすることです。
マーク

ああ、あなたは正しい。私はこれを一見して見逃しました。ありがとうございました!
-orschiro

回答:


2

d-busレベルでこれをフィルタリングできるかもしれませんが、多くの作業のように見えます。osdがどのように動作するかについての洞察を得るには、まずこの投稿を参照してください

別のコンソールで実行 'notify-send'を送信する前に、dbus-monitorを起動します。

メソッド呼び出しsender =:1.2450-> dest = org.freedesktop.DBus serial = 5 path = / org / freedesktop / DBus; interface = org.freedesktop.DBus; member = GetNameOwner
   文字列「org.freedesktop.Notifications」
メソッド呼び出しsender =:1.2450-> dest =:1.41 serial = 6 path = / org / freedesktop / Notifications; interface = org.freedesktop.Notifications; member = GetServerInformation
メソッドreturn sender =:1.41-> dest =:1.2450 reply_serial = 6
   文字列「notify-osd」
   文字列「Canonical Ltd」
   文字列「1.0」
   文字列「1.1」
メソッド呼び出しsender =:1.2450-> dest =:1.41 serial = 7 path = / org / freedesktop / Notifications; interface = org.freedesktop.Notifications; member =通知
   文字列「notify-send」
   uint32 0
   文字列「/usr/share/pixmaps/debian-logo.png」
   文字列「My Title」
   文字列「一部のテキスト本文」
   配列[
   ]
   配列[
      dict entry(
         文字列「緊急度」
         バリアントバイト1
      )
   ]
   int32 -1

notify-osdはdbusで動作します

dpkg -L notify-osd
/usr/share/dbus-1/services/org.freedesktop.Notifications.service

ただし、/ etc / dbus-1 / system.dにはこのサービスに関する追加の制約はありません

そのため、ソースに基づいて通知イベントを除外し、目的の制御を実現できる構成ファイルを作成できる場合があります。これは、問題とdbusの仕様を掘り下げることなくできる最善の方法です。これが助けになることを願っています。あなたが望んでいることは、最初から簡単に設定できるはずです。


2

...しかし、それは多くの作業のように見えます...

少なくとも粗雑なジェネリックソリューションとしては、それほど悪くはありません。

これは、昨年(2012年9月)の投稿に対する私の回答からの詳細のコピーです。

network-managerからの通知を無効にする方法

dbus-monitor "interface='org.freedesktop.Notifications'"                \
| grep --line-buffered  'string "NetworkManager"'                       \
| sed -u -e  's/.*/killall notify-osd/g'                                \
| bash

string "NetworkManager"目的のREに置き換えて、ブロックを決定します。

実行を探すためにどのREパターンが一致するかを把握
dbus-monitor "interface='org.freedesktop.Notifications'"
するには、通知がポップアップしている間に出力を確認します。

すなわち。notify-sendメッセージも削除するには、grep代わりに次の行を使用します。

| grep --line-buffered  'string "NetworkManager"\|string "notify-send"'  \

警告は
killall notify-osd非識別と完全に保留中のメッセージの通知スタックは、かどうかに関わらずワイプされるNetworkManagerか、notify-send通知エージェントです。

「誠実な」ソリューションは、通知パージを決定してから実行するまでの間に起こり得る競合状態を考慮する必要があります。

また、ブロックされる問題のある通知が入ったときに通知が保留されている場合、それらはすべてパージされます。この状況は、少なくともdbus保留中の通知のコピーを作成しnotify-send、パージ後に目的の通知を再発行することで解決できます。

これは、手作業での集中的な作業です。

理想的には、直接dbusを使用する

method void org.freedesktop.Notifications.CloseNotification(uint id)     [1]

希望する通知のみを具体的にターゲットにすることは、残念ながら明らかではありません...しかし...

別の回答
org.freedesktop.Notifications.CloseNotification(uint id)をDBus経由でトリガーおよび呼び出すことができますか?少なくともで
を使用する方法を示しますが、残念ながら任意の通知aps には使用できません。いくつかのapsが。ポップアップ通知を制御するカスタムインターフェイスがあります。[1]notify-send

クロスリファレンス:

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.