Gibt es eine Möglichkeit, Ubuntu Benachrichtigungen auslesen zu lassen?

8

Ubuntu hat ein sehr cooles Benachrichtigungssystem. Gibt es eine Möglichkeit, dass Ubuntu Benachrichtigungen ausgibt, wenn sie erscheinen?

Oder ist es möglich, den Text in Benachrichtigungen mit espeak zu verknüpfen?

    
Meow 30.10.2013, 18:34

2 Antworten

16

Diese Frage ist wirklich so interessant wie die Antwort.

dbus-monitor wartet auf das Signal und wenn es ankommt, fängt es an und gibt die entsprechende Information darüber. Ähnlich kann es ausgeführt werden, um Informationen über Benachrichtigungen zu erhalten. Wenn ausgeführt:

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

Es wird auf die Benachrichtigungen warten und wenn eine Benachrichtigung eintrifft, gibt es die Informationen der Benachrichtigungen.

Wenn zum Beispiel der Ton erhöht / verringert wird oder ein Song-Track geändert wird oder ein anderer Song, gibt er die Nachricht. Ich erstelle manuell eine Desktopbenachrichtigung mit dem notify-send -Befehl an einem anderen Terminal:

notify-send "Hello How are you?"

Dann gibt das erste Terminal, in dem dbus-monitor ausgeführt wird, eine Nachricht wie:

[email protected]:~$ 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"

Die obige Ausgabe kann einfach an espeak übergeben werden, um die Nachricht zu lesen. Zum Beispiel

Wenn Sie den obigen Befehl dbus-monitor durch den folgenden Befehl ersetzen, wird die Benachrichtigung angezeigt:

Überprüfen Sie, wie es funktioniert:

  • Führen Sie diesen Befehl in einem Terminal aus und lassen Sie ihn laufen:

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

    Ich weiß, dass es sehr lang geworden ist, aber es gibt keinen anderen Weg, es klein zu halten, weil das Filtern der tatsächlichen Benachrichtigung es langwierig machte.

  • Dann führe eine Desktop-Benachrichtigung aus, wie oben beschrieben, indem du notify-send oder irgend etwas anderes verwendest. Ich verwende notify-send . Also folgenden Befehl in anderem Terminal ausführen:

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

    Sobald Sie den Befehl ausführen, wird die Benachrichtigung angezeigt (gelesen).

Obwohl es meine 4-5 Stunden gegessen hat, bin ich jetzt froh, dass es funktioniert.

Sie können auch einen eigenen Befehl wie saynoti erstellen und jedes Mal ausführen, wenn Sie eine Lesebenachrichtigung wünschen. Indem Sie diese Schritte ausführen, können Sie Folgendes tun:

  • Speichern Sie zuerst den eigentlichen Befehl in einer Datei mit dem Namen saynoti . Sie können einen beliebigen Dateinamen verwenden, der zu Ihrem eigentlichen Befehlsnamen wird.

  • Dann mach die Datei ausführbar und verschiebe oder kopiere sie in /bin :

    chmod +x saynoti
    sudo cp saynoti /bin
    
  • Jetzt können Sie einfach Ihren neuen Befehl ausführen, um sprechende Benachrichtigung zu starten:

    saynoti
    
  • Um den laufenden Prozess zu beenden, können Sie diesen Befehl ausführen:

    pkill dbus-monitor
    

    oder drücken Sie einfach Strg + C auf dem Terminal, wo saynoti läuft.

  • Sie können saynoti auch jedes Mal starten, wenn Ihr System startet, indem Sie es automatisch zu Startanwendung .

Ich möchte mich für diese Frage bedanken. Aufgrund dieser Frage habe ich viele Dinge gelernt. :)

Antworten Sie, wenn Sie ein Problem haben oder weitere Änderungen / Modifikationen benötigen. Ich bin mir sicher, dass Sie glücklich sein werden, die letzte funktionierende Version zu bekommen.

    
Saurav Kumar 31.10.2013, 06:25
0

Ich hatte mit extra "in meinen E-Mail-Adressen trödeln daher habe ich das hinzugefügt zu der obigen Codezeile, da espeak gar nicht "auslesen" muss;)

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

= & gt;

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

COOL Arbeit. Besser bei der Optimierung als notify-send lib selbst. 4 "Hallo! Ich bin Saurav Kumar."

update: funktioniert nicht stabil. Ich werde | tee -a $ Datei |

    
Jimmy 06.11.2015 15:16

Tags und Links