Ich versuche, jede Benachrichtigung durch espeak zu filtern. Ich kann jedoch anscheinend keine Möglichkeit finden, den Benachrichtigungstext aus einem Python-Skript abzurufen oder sogar zu erfahren, welchen Signalnamen ich abhören soll.
bus.add_signal_receiver(espeak,
dbus_interface="org.freedesktop.Notifications",
signal_name="??")
Der Versuch, dafür zu googeln, scheint nur zu Ergebnissen zu führen, bei denen neue Benachrichtigungen erstellt werden. Daher bin ich jetzt völlig verloren.
Kann mir jemand dabei helfen?
Kurz gesagt, ich möchte mit Python auf eingehende Benachrichtigungen warten und das Attribut "body" der Benachrichtigung erhalten.
dbus-monitor "type='signal',interface='org.freedesktop.Notifications'"
nichts anzeigt, aberdbus-monitor "interface='org.freedesktop.Notifications'"
Benachrichtigungen anzeigt (Typ ist 'method_call', nicht 'signal').Antworten:
Um dies auf dem neuesten Stand zu halten: Ab dbus 1.5 ist beim Hinzufügen einer Übereinstimmungszeichenfolge mit ein zusätzlicher Parameter erforderlich
bus.add_match_string_non_blocking
, um sicherzustellen, dass wir alles erhalten.Der resultierende Code wäre der folgende:
quelle
unable to connect to session bus: Operation was cancelled
. Wir gehenbus
zum Filter.from gi.repository import GLib as glib
dies funktionieren.Mit Benachrichtigungen meinen Sie die "OSD-Blasen", die einige Software sendet, wie z. B. Ändern der Lautstärke, IM-Chat usw.? Sie möchten ein Python-Programm erstellen, um diese zu erfassen?
Nun, Ask Ubuntu ist keine Qualitätssicherung für Programmierer, und die Softwareentwicklung geht etwas über den Rahmen hinaus, aber hier ist ein kleiner Code, mit dem ich Benachrichtigungsblasen erfasst habe:
Lassen Sie dies in einem Terminal laufen, öffnen Sie dann ein anderes Terminalfenster und testen Sie es:
Und das Programm gibt Folgendes aus:
Wie Sie vielleicht erraten haben,
message.get_args_list()[0]
ist der Absender [2] für das Symbol, [3] für die Zusammenfassung und [4] für den Textkörper.Informationen zur Bedeutung der anderen Felder finden Sie in den offiziellen Spezifikationsdokumenten
quelle
Ich hatte Probleme, eines der anderen Beispiele tatsächlich zum Laufen zu bringen, aber am Ende bin ich dort angekommen. Hier ist ein Arbeitsbeispiel:
Wenn Sie ein detaillierteres Arbeitsbeispiel sehen möchten, empfehlen wir Ihnen, sich Notifications.py im Projekt Recent_notifications anzusehen .
quelle