Как я могу временно отфильтровать определенные уведомления-пузыри, поступающие из определенных источников?
Моя система настроена таким образом, что при получении новой почты на экране появляется всплывающее уведомление. Это удобно время от времени и отвлекает время от времени. Без необходимости удалять интеграцию с 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. Надеюсь, это поможет, то, что вы ищете, должно быть проще для начала.