Як я можу тимчасово відфільтрувати певні бульбашки сповіщень, що надходять із конкретних джерел?


12

У мене система налаштована так, що коли я отримую нову пошту, на моєму екрані з’являється кулька сповіщень. Це зручно часом, а в інший час відволікає. Без необхідності видаляти інтеграцію gmail, яку я використовую, чи існує спосіб централізованого перемикання, чи відображатимуться певні види сповіщень?

Іншими словами, я шукаю додаток (або API), який дозволяє мені бачити список "зареєстрованих" додатків, які використовують службу сповіщення, і перемикати їх як включені / відключені. Або щось, що дозволяє мені створити один або декілька регулярних виразів, які можна використовувати для узгодження імені джерела-програми чи повідомлення-міхура, а якщо відбувається збіг, блокувати сповіщення.


1
На відміну від сповіщення Gnome-Shell, програма Ubuntu не зареєстрована в службі оповіщення. Він використовує libnotify для повідомлення, яке жорстко кодується в додатках. Ви можете спробувати вимкнути сповіщення з налаштування програми, якщо воно має налаштування сповіщень (наприклад, gwibber, evolution, thunderbird тощо).
Хуршид Алам


@orschiro Це не дублікат (недавно опублікованого) питання, на який ви згадали - це питання про можливість програмного фільтрування лише певних видів сповіщень, дозволяючи іншим. Інше питання стосується виключення виключення всіх сповіщень.
Марк

О, ти маєш рацію. Я пропустив це з першого погляду. Дякую!
orschiro

Відповіді:


2

Ви можете відфільтрувати це на рівні d-шини, але це виглядає як багато роботи. Спочатку перегляньте цю публікацію, щоб ознайомитись з тим, як працює OSD

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

метод виклику відправника =: 1.2450 -> dest = org.freedesktop.DBus serial = 5 шлях = / org / freedesktop / DBus; інтерфейс = org.freedesktop.DBus; member = GetNameOwner
   рядок "org.freedesktop.Otitifications"
метод виклику відправника =: 1.2450 -> dest =: 1.41 serial = 6 шлях = / org / freedesktop / Повідомлення; інтерфейс = org.freedesktop.Оповіщення; member = GetServerInformation
метод повернення відправника =: 1.41 -> dest =: 1.2450 reply_serial = 6
   рядок "notify-osd"
   рядок "Canonical Ltd"
   рядок "1.0"
   рядок "1.1"
метод виклику відправника =: 1.2450 -> dest =: 1.41 serial = 7 шлях = / org / freedesktop / Повідомлення; інтерфейс = org.freedesktop.Оповіщення; член = Повідомляти
   рядок "сповістити-надіслати"
   uint32 0
   рядок "/usr/share/pixmaps/debian-logo.png"
   рядок "Моя назва"
   рядок "Деяке текстове"
   масив [
   ]
   масив [
      dict запис (
         рядок "терміновість"
         варіант байт 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 року) публікацію в

Як відключити сповіщення від мережевого менеджера .

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"'  \

Caveat :
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, але, на жаль, не для довільних повідомлень апс. хоча деякі апси. мати спеціальний інтерфейс для контролю спливаючих повідомлень.

перехресні посилання:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.