Gibt es eine Möglichkeit, Ubuntu dazu zu bringen, Benachrichtigungen vorzulesen?


9

Ubuntu hat ein sehr cooles Benachrichtigungssystem. Gibt es eine Möglichkeit, Ubuntu dazu zu bringen, Benachrichtigungen vorzulesen, wenn sie angezeigt werden?

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


Diese bugs.launchpad.net/ubuntu/+source/notify-osd/+bug/345357 Staaten Orca nicht und jetzt wieder (?)
Rinzwind

1
Orca liest alles und ist sehr nervig. Was ich suche, ist eine Möglichkeit, sowieso nur die Benachrichtigungen zu lesen. Danke für die Unterstützung :)
Meow

Antworten:


17

Diese Frage ist wirklich interessant, so wie die Antwort.

dbus-monitorWenn es ausgeführt wird, wartet es auf das Signal und wenn es eintrifft, fängt es die entsprechenden Informationen ab und gibt sie aus. Ebenso kann es ausgeführt werden, um Informationen zu Benachrichtigungen abzurufen . Bei Ausführung:

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

Es wartet auf die Benachrichtigungen und gibt bei Eingang einer Benachrichtigung die Informationen zu den Benachrichtigungen aus.

Zum Beispiel, wenn der Ton erhöht / verringert oder eine Songspur geändert wird oder eine andere, gibt sie die Nachricht. Ich erstelle manuell eine Desktop-Benachrichtigung mit dem notify-send Befehl auf einem anderen Terminal:

notify-send "Hello How are you?"

Dann gibt das erste Terminal, in dem der dbus-monitorBefehl ausgeführt wird, eine Nachricht wie folgt aus:

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"

Jetzt kann die obige Ausgabe leicht an espeakdie gelesene Nachricht übergeben werden. Zum Beispiel,

Wenn Sie den obigen dbus-monitorBefehl durch den folgenden ersetzen, wird die Benachrichtigungsmeldung gelesen:

Ü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 keine andere Möglichkeit, es klein zu machen, weil das Filtern der tatsächlichen Benachrichtigung es langwierig gemacht hat.

  • Führen Sie dann eine Desktop-Benachrichtigung aus, entweder wie oben beschrieben notify-sendoder mit einer anderen Funktion. Ich benutze notify-send. Führen Sie also den folgenden Befehl in einem anderen Terminal aus:

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

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

Es hat zwar meine 4-5 Stunden aufgefressen, aber ich bin jetzt froh, dass es funktioniert.

Sie können auch Ihren eigenen Befehl erstellensaynoti und ihn jedes Mal ausführen, wenn Sie eine Lesemeldung wünschen. Mit den folgenden Schritten können Sie Folgendes tun:

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

  • Machen Sie die Datei dann ausführbar und verschieben oder kopieren Sie sie in /bin:

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

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

    pkill dbus-monitor
    

    oder drücken Sie einfach Ctrl+ Cauf dem Terminal, auf dem saynotigerade läuft.

  • Sie können es auch saynotijedes Mal ausführen, wenn Ihr System gestartet wird, indem Sie es zu einer Startanwendung machen .

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 sicher, Sie werden sich über die endgültige Arbeitsversion freuen.


@ Meow: Hört sich gut an, dass Sie mit dem Ergebnis zufrieden sind. Wenn Sie in Zukunft Änderungen benötigen, rufen Sie mich einfach hier an.
Saurav Kumar

@Meow: Überprüfen Sie die endgültige Arbeitsversion. Ich habe das ganze Problem gelöst und es funktioniert großartig. Sie werden sich über diese Version freuen.
Saurav Kumar

2
Alter, du bist großartig und kann nichts anderes fragen. Ich habe es in meine Startliste aufgenommen und es funktioniert einwandfrei merci beaucoup
Meow

Woher hast du gelernt? dbus-monitorIch möchte anfangen zu lernen
Edward Torvalds

@edwardtorvalds: Sie können es von seiner offiziellen Seite über Dbus und Dbus-Monitor erfahren. 1. freedesktop.org/wiki/Software/dbus 2. dbus.freedesktop.org/doc/dbus-monitor.1.html
Saurav Kumar

0

Ich hatte Probleme mit extra "in meinen E-Mail-Adressen, daher habe ich dies der obigen Codezeile hinzugefügt, da espeak kein" benötigt, um es vorzulesen;)

| sed 's / "// g" |

=>

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

COOL Arbeit. Bei weitem besser als notify-send lib selbst zu optimieren. 4 "Hallo! Ich bin Saurav Kumar."

Update: funktioniert nicht stabil. Ich werde | verwenden tee -a $ file |

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.