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

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

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

12
задан 25 July 2016 в 22:04

2 ответа

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

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

method call sender=:1.2450 -> dest=org.freedesktop.DBus serial=5 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=GetNameOwner
   string "org.freedesktop.Notifications"
method call sender=:1.2450 -> dest=:1.41 serial=6 path=/org/freedesktop/Notifications; interface=org.freedesktop.Notifications; member=GetServerInformation
method return sender=:1.41 -> dest=:1.2450 reply_serial=6
   string "notify-osd"
   string "Canonical Ltd"
   string "1.0"
   string "1.1"
method call sender=:1.2450 -> dest=:1.41 serial=7 path=/org/freedesktop/Notifications; interface=org.freedesktop.Notifications; member=Notify
   string "notify-send"
   uint32 0
   string "/usr/share/pixmaps/debian-logo.png"
   string "My Title"
   string "Some text body"
   array [
   ]
   array [
      dict entry(
         string "urgency"
         variant             byte 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. Надеюсь, это поможет, то, что вы ищете, должно быть проще для настройки.

0
ответ дан 25 July 2016 в 22:04

... но это похоже на большую работу...

Это не действительно слишком плохо, по крайней мере, для сырого универсального решения.

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

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

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

Замена string "NetworkManager" с желаемым РЕ для определения блокирования.

Понять какой соответствие шаблона РЕ искать выполненный:
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. Уведомления. CloseNotification (uint идентификатор) быть инициированным и вызванным через DBus?
шоу, как использовать [1], по крайней мере, с notify-send, но к сожалению не для произвольного уведомления aps., хотя некоторые aps. имеют пользовательские интерфейсы для управления раскрывающимися уведомлениями.

перекрестные судьи.:

2
ответ дан 25 July 2016 в 22:04

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

Похожие вопросы: