Comment filtrer temporairement certaines bulles de notification provenant de sources spécifiques?

12

J'ai mon système configuré de telle sorte que lorsque je reçois de nouveaux messages, une bulle de notification apparaît sur mon écran. C'est parfois pratique et distrayant à d'autres moments. Sans avoir à désinstaller l'intégration gmail que j'utilise, existe-t-il un moyen de basculer de manière centralisée sur l' affichage de certains types de notifications?

En d'autres termes, je recherche une application (ou une API) qui me permet soit de voir une liste d'applications "enregistrées" qui utilisent le service de notification, et de les basculer comme activées / désactivées. Ou, quelque chose qui me permet de créer une ou plusieurs expressions régulières qui peuvent être utilisées pour faire correspondre le nom de l'application source ou le contenu de la bulle de notification, et si une correspondance se produit, pour bloquer la notification.

marque
la source
1
Contrairement à la notification Gnome-Shell, l'application On Ubuntu n'est pas enregistrée dans le service de notification. Il utilise libnotify pour la notification qui est codée en dur dans les applications. Vous pouvez essayer de désactiver la notification de la préférence d'application si elle a une préférence de notification (comme gwibber, evolution, thunderbird, etc.).
Khurshid Alam
1
Duplication possible de Y a
orschiro
@orschiro Ce n'est pas un doublon de la question (récemment publiée) à laquelle vous avez fait référence - cette question concerne la possibilité de filtrer par programme uniquement certains types de notifications, tout en permettant à d'autres de passer. L'autre question concerne spécifiquement la désactivation de toutes les notifications.
Mark
Oh, tu as raison. Je l'ai raté à première vue. Je vous remercie!
orschiro

Réponses:

2

Vous pouvez peut-être filtrer cela au niveau du bus D, mais cela ressemble à beaucoup de travail. Consultez d'abord ce post pour avoir un aperçu du fonctionnement de l'OSD

Démarrez dbus-monitor avant d'envoyer le run 'notify-send' sur une console séparée.

expéditeur d'appel de méthode =: 1.2450 -> dest = org.freedesktop.DBus serial = 5 path = / org / freedesktop / DBus; interface = org.freedesktop.DBus; membre = GetNameOwner
   chaîne "org.freedesktop.Notifications"
expéditeur d'appel de méthode =: 1.2450 -> dest =: 1.41 serial = 6 path = / org / freedesktop / Notifications; interface = org.freedesktop.Notifications; membre = GetServerInformation
expéditeur de retour de méthode =: 1.41 -> dest =: 1.2450 reply_serial = 6
   chaîne "notify-osd"
   chaîne "Canonical Ltd"
   chaîne "1.0"
   chaîne "1.1"
expéditeur d'appel de méthode =: 1.2450 -> dest =: 1.41 serial = 7 path = / org / freedesktop / Notifications; interface = org.freedesktop.Notifications; membre = Notifier
   chaîne "notifier-envoyer"
   uint32 0
   chaîne "/usr/share/pixmaps/debian-logo.png"
   chaîne "Mon titre"
   chaîne "Certains corps de texte"
   tableau [
   ]
   tableau [
      entrée dict (
         chaîne "urgence"
         octet de variante 1
      )
   ]
   int32 -1

notify-osd vit sur dbus

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

mais il n'y a pas de contraintes supplémentaires pour ce service dans /etc/dbus-1/system.d

Ainsi, vous pourriez être en mesure de créer un fichier de configuration qui peut filtrer les événements de notification en fonction de leur source et obtenir le contrôle que vous recherchez. C'est le mieux que je puisse faire sans creuser le problème et la spécification dbus. J'espère que cela aide, ce que vous recherchez devrait être plus facile à configurer pour commencer.

ppetraki
la source
2

... mais cela ressemble à beaucoup de travail ...

Ce n'est pas vraiment trop mal, du moins pour une solution générique brute.

Voici une copie des détails de ma réponse au poste de l'an dernier (septembre 2012) dans

Comment désactiver la notification du gestionnaire de réseau .

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

Remplacez string "NetworkManager"par le RE souhaité pour déterminer le blocage.

Pour avoir une idée de la correspondance du modèle RE à rechercher pour l'exécution:
dbus-monitor "interface='org.freedesktop.Notifications'"
et regardez la sortie pendant que les notifications apparaissent.

c'est à dire. pour supprimer notify-sendégalement les messages, utilisez grepplutôt cette ligne:

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

Avertissement :
killall notify-osdest non discriminatoire et efface complètement la pile de notification de tous les messages en attente, que l'agent notifiant soit NetworkManagerou notify-sendnon.

Une solution «honnête» doit tenir compte des conditions de concurrence possibles entre la détermination d'une purge de notification et sa réalisation, une autre notification doit apparaître et ne pas être purgée avec le reste.

De plus, si des notifications sont en attente lorsque la personne à bloquer bloquée arrive, elles seront toutes purgées. Cette situation peut au moins être résolue en effectuant une copie des dbusnotifications en attente, puis en réémettant celles souhaitées avec notify-sendaprès la purge.

C'est un peu de travail à forte intensité de main d'œuvre!

Idéalement, l'utilisation directe de dbus

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

cibler uniquement les notifications souhaitées, ce n'est malheureusement pas évident ... mais ...

Une autre réponse:
org.freedesktop.Notifications.CloseNotification (uint id) peut-il être déclenché et appelé via DBus?
montre comment utiliser [1], au moins avec notify-send, mais malheureusement pas pour notifier des aps arbitraires. bien que quelques aps. ont des interfaces personnalisées pour contrôler les notifications contextuelles.

références croisées:

troll la la la
la source