web-dev-qa-db-fra.com

Existe-t-il un moyen de faire en sorte que Ubuntu lise les notifications?

Ubuntu a un système de notification très cool. Existe-t-il un moyen de faire en sorte que Ubuntu lise les notifications lorsqu'elles apparaissent?

Ou est-il possible de lier le texte des notifications à espeak?

8
Meow

Cette question est vraiment intéressante, donc la réponse.

dbus-monitor lorsqu'il est exécuté attend le signal et, lorsqu'il arrive, il le détecte et lui fournit les informations appropriées. De même, il peut être exécuté pour obtenir les informations sur Notifications . Lorsque exécuté:

dbus-monitor "interface='org.freedesktop.Notifications'" | grep --line-buffered "member=Notify\|string"

Il attendra les notifications et, quand une notification arrivera, il donnera les informations sur les notifications.

Par exemple, lorsque le son est augmenté/diminué ou qu'une piste de chanson est modifiée ou toute autre, le message est transmis. Je crée manuellement une notification sur le bureau à l'aide de la commande notify-send sur un autre terminal:

notify-send "Hello How are you?"

Ensuite, le premier terminal dans lequel la commande dbus-monitor est en cours d'exécution donnera un message du type:

saurav@saurav-P4I45Gx-PE:~$ dbus-monitor "interface='org.freedesktop.Notifications'" | grep --line-buffered "member=Notify\|string"
   string ":1.473"
method call sender=:1.474 -> dest=:1.475 serial=7    path=/org/freedesktop/Notifications; interface=org.freedesktop.Notifications;  member=Notify
   string "notify-send"
   string ""
   string "Hello How Are You?"
   string ""
         string "urgency"

Maintenant la sortie ci-dessus peut être facilement passée à espeak pour lire le message. Par exemple,

Remplacez la commande _ ci-dessus par dbus-monitor pour lire le message de notification:

Vérifiez, comment ça marche:

  • Exécutez cette commande dans un terminal et laissez-la en marche:

    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 '{}' espeak {}
    

    Je sais que cela est devenu très long, mais il n'y a pas d'autre moyen de le réduire, car le filtrage de la notification actuelle l'a rendu long.

  • Exécutez ensuite une notification sur le bureau de la manière décrite ci-dessus en utilisant notify-send ou toute autre chose. J'utilise notify-send. Donc, en exécutant la commande suivante dans un autre terminal:

    notify-send "Hello! I am Saurav Kumar."
    

    Dès que vous exécutez la commande, la notification sera lue.

Bien qu'il ait mangé mes 4-5 heures, mais je suis heureux maintenant de le faire fonctionner.

Vous pouvez aussi créer votre propre commande comme saynoti et l'exécuter à chaque fois que vous souhaitez une notification de lecture. En suivant ces étapes, vous pouvez le faire:

  • Enregistrez d’abord la commande dans un fichier nommé saynoti. Vous pouvez utiliser n’importe quel nom de fichier qui deviendra votre nom de commande réel.

  • Ensuite, rendez le fichier exécutable et déplacez-le ou copiez-le dans /bin:

    chmod +x saynoti
    Sudo cp saynoti /bin
    
  • Maintenant, vous pouvez simplement exécuter votre nouvelle commande pour démarrer Speaking Notification :

    saynoti
    
  • Pour tuer le processus en cours, vous pouvez exécuter cette commande:

    pkill dbus-monitor
    

    ou appuyez simplement sur Ctrl + C sur le terminal où saynoti est en cours d'exécution.

  • Vous pouvez également exécuter saynoti chaque fois que votre système démarre en faisant un application de démarrage .

Je tiens à vous remercier pour cette question. A cause de cette question, j'ai appris beaucoup de choses. :)

Répondez si vous rencontrez un problème ou si vous avez besoin de modifications/changements supplémentaires. Je suis sûr que vous serez heureux d’obtenir la version de travail finale.

16
Saurav Kumar

J'ai eu des problèmes avec extra "dans mes adresses e-mail, c'est pourquoi j'ai ajouté ceci à la ligne de code ci-dessus, car espeak n'a pas besoin de" du tout à lire;)

| sed 's/\ "// g' |

=>

| grep --line-buffered -v '^\s * $' | sed 's/\ "// g' | xargs -I '{}' espeak {}

COOL travail. Mieux de loin que de peaufiner notify-send lib lui-même 4 "Bonjour! Je suis Saurav Kumar."

mise à jour: ne fonctionne pas stable. Je vais utiliser | tee -a $ fichier |

0
Jimmy