web-dev-qa-db-fra.com

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

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

En d'autres termes, je recherche une application (ou une API) qui me permet de voir la liste des applications "enregistrées" qui utilisent le service de notification et de les activer/désactiver. Ou quelque chose qui me permet de créer une ou plusieurs expressions régulières pouvant être utilisées pour faire correspondre le nom source-application-nom ou notification-bubble-content et, le cas échéant, pour bloquer la notification.

12
Mark

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

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

Voici une copie des détails de ma réponse au message de l'année dernière (septembre 2012) dans

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

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 du type de correspondance de motif RE à rechercher, exécutez:
dbus-monitor "interface='org.freedesktop.Notifications'"
et regardez la sortie pendant que les notifications apparaissent.

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

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

Mise en garde :
killall notify-osd ne fait aucune discrimination et efface complètement la pile de notifications de tous les messages en attente, que NetworkManager ou notify-send soit l'agent de notification.

Une solution "honnête" doit prendre en compte d'éventuelles conditions de concurrence lorsque, entre la détermination d'une purge de notification et son exécution, se produit une autre notification qui devrait apparaître et ne pas être purgée avec le reste.

De plus, si des notifications sont en attente lors de la réception de la demande à bloquer, elles seront toutes purgées. Cette situation peut au moins être résolue en faisant une copie des notifications dbus en attente, puis relancez les notifications souhaitées avec notify-send après la purge.

C'est un peu de travail manuel laborieux!

Idéalement, l’utilisation directe de

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

cibler spécifiquement les notifications souhaitées n’est malheureusement pas évident ... cependant ...

Une autre réponse
L'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 la notification arbitraire des fichiers APS. bien que certains aps. avoir des interfaces personnalisées pour contrôler les notifications contextuelles.

croix réf .:

2
troll la la la

Vous pourrez peut-être filtrer cela au niveau d-bus, mais cela demande beaucoup de travail. Commencez par consulter cet article pour en savoir plus sur le fonctionnement d'osd

Lancez dbus-monitor avant d’envoyer l’exécution "notify-send" sur une console séparée.

 appel de méthode sender =: 1.2450 -> dest = org.freedesktop.DBus serial = 5 chemin =/org/freedesktop/DBus; interface = org.freedesktop.DBus; member = GetNameOwner 
 chaîne "org.freedesktop.Notifications" 
 méthode appel sender =: 1.2450 -> dest =: 1.41 serial = 6 chemin =/org/freedesktop/Notifications; interface = org.freedesktop.Notifications; member = GetServerInformation 
 méthode return sender =: 1.41 -> dest =: 1.2450 reply_serial = 6 
 chaîne "notify-osd" 
 chaîne "Canonical Ltd" 
 chaîne "1.0" 
 Chaîne de caractères "1.1" 
 Méthode appel expéditeur =: 1.2450 -> dest =: 1.41 série = 7 chemin =/org/freedesktop/Notifications; interface = org.freedesktop.Notifications; membre = Notifier 
 chaîne "notify-send" 
 uint32 0 
 chaîne "/usr/share/pixmaps/debian-logo.png"
 chaîne" Mon titre "
 string" Un peu de texte "
 array 
 
 array 
 entrée dict (
 string" urgence "
 Variante octet 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 contrainte supplémentaire pour ce service dans /etc/dbus-1/system.d

Vous pourrez donc créer un fichier de configuration capable de filtrer les événements de notification en fonction de leur source et d’obtenir le contrôle souhaité. C’est le mieux que je puisse faire sans entrer dans les détails du problème et de la spécification dbus. J'espère que cela aide, ce que vous cherchez devrait être plus facile à configurer pour commencer.

2
ppetraki