web-dev-qa-db-fra.com

Exécuter un script chaque fois qu'une application particulière fait une notification

J'ai cherché un peu tranquillement mais tous les articles et réponses vous disent seulement comment créer votre propre notification. Ce que je veux faire est de garder une trace de toutes les notifications effectuées par toutes les applications et d'exécuter un script particulier chaque fois qu'une notification particulière est effectuée.

Je vais écrire mon programme pour ce faire. Tout ce dont j'ai besoin, c'est comment "intercepter" les notifications.

4
piyushrungta25

Utilisez (et identifiez) les notifications pour déclencher des actions ultérieures

Si nous modifions l'extrait proposé dans cette très belle réponse un peu, nous pouvons écrire la notification appelée dans un fichier:

dbus-monitor "interface='org.freedesktop.Notifications'" | grep --line-buffered "string" | grep --line-buffered -e method -e ":" -e '""' -e urgency -e notify -v | grep --line-buffered '.*(?=string)|(?<=string).*' -oPi | grep --line-buffered -v '^\s*$' | xargs -I '{}' echo {} > file.txt

ou sinon l'utiliser pour déclencher des actions ultérieures.

Un exemple

Si nous modifions l'extrait pour exécuter un script lorsqu'une notification apparaît:

dbus-monitor "interface='org.freedesktop.Notifications'" | grep --line-buffered "string" | grep --line-buffered -e method -e ":" -e '""' -e urgency -e notify -v | grep --line-buffered '.*(?=string)|(?<=string).*' -oPi | grep --line-buffered -v '^\s*$' | xargs -I '{}' /bin/bash /path/to/script.sh {}

et script.sh est:

#!/bin/bash
string=$1
match="een aap op een fiets"
if [[ $string == $match ]]
  then
    gedit
fi

Ensuite, à chaque fois, si la notification correspond à "een aap op een fiets":

enter image description here

gedit s'ouvrira :)

enter image description here

Remarque

Bien que le code fonctionne parfaitement pour intercepter la notification afin de déclencher tout type d'action, je n'ai trouvé aucun moyen d'identifier le pid qui a appelé la notification.

3
Jacob Vlijm