Как я могу временно отфильтровать определенные уведомления-пузыри, поступающие из определенных источников?

Моя система настроена таким образом, что при получении новой почты на экране появляется всплывающее уведомление. Это удобно время от времени и отвлекает время от времени. Без необходимости удалять интеграцию с gmail, которую я использую, есть ли способ централизованно переключать, будут ли отображаться определенные виды уведомлений?

Другими словами, я ищу приложение (или API), которое позволяет мне видеть список "зарегистрированных" приложений, использующих службу уведомлений, и переключать их как включенные / отключенные. Или что-то, что позволяет мне создавать одно или несколько регулярных выражений, которые можно использовать для сопоставления имени-источника-источника или содержимого-уведомления-пузыря и, если совпадение происходит, для блокировки уведомления.

2 ответа

... но, похоже, много работы...

Это не так уж и плохо, по крайней мере, для грубого общего решения.

Вот копия деталей из моего ответа на прошлогодний пост (сентябрь 2012) в

Как отключить уведомление от сетевого менеджера.

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?
показывает, как использовать [1]по крайней мере с notify-send, но, к сожалению, не для произвольных уведомляющих апс. хотя некоторые апс. иметь пользовательские интерфейсы для управления всплывающими уведомлениями.

перекрестные ссылки:

Возможно, вы сможете отфильтровать это на уровне d-bus, но это выглядит как большая работа. Сначала посмотрите этот пост, чтобы понять, как работает OSD

Запустите dbus-monitor перед тем, как отправить команду "уведомить-отправить" на отдельной консоли.

отправитель вызова метода =:1.2450 -> dest=org.freedesktop.DBus serial=5 путь =/org/freedesktop/DBus; Интерфейс =org.freedesktop.DBus; Член =GetNameOwner
   строка "org.freedesktop.Notifications"
отправитель вызова метода =:1.2450 -> dest=:1.41 serial=6 path=/org/freedesktop/Notifications; интерфейс =org.freedesktop.Notifications; Член =GetServerInformation
метод return sender=:1.41 -> dest=:1.2450 reply_serial=6
   строка "notify-osd"
   строка "Canonical Ltd"
   строка "1.0"
   строка "1.1"
отправитель вызова метода =:1.2450 -> dest=:1.41 serial=7 path=/org/freedesktop/Notifications; интерфейс =org.freedesktop.Notifications; Член = Уведомить
   строка "уведомить-отправить"
   uint32 0
   строка "/usr/share/pixmaps/debian-logo.png"
   строка "Мой заголовок"
   строка "Некоторое текстовое тело"
   массив [
   ]
   массив [
      запись в поле (строка "срочность"
         вариант байт 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. Надеюсь, это поможет, то, что вы ищете, должно быть проще для начала.

Другие вопросы по тегам