Ich spiele mit dbus-monitor herum, um zu verstehen, wie dbus in der Ubuntu-Umgebung funktioniert. Ich habe diesbezüglich mehrere Fragen:
Können Sie mir bitte mitteilen, wie ich Folgendes richtig lesen soll? Ich verstehe die große Idee, aber nicht die Details.
signal sender=:1.1948 -> dest=(null destination) serial=1829990 path=/org/ayatana/menu/DA00003; interface=org.ayatana.dbusmenu; member=ItemPropertyUpdated int32 23 string "enabled" variant boolean true method call sender=:1.6 -> dest=org.freedesktop.Notifications serial=1399 path=/org/freedesktop/Notifications; interface=org.freedesktop.Notifications; member=GetCapabilities
Ich verstehe, dass der erste ein Signal ist, während der zweite eine Methode ist. Bedeutet das Ziel , dass es einen bestimmten Empfänger / Steckplatz für ein Signal geben kann? Was ist ein Mitglied ? Und folgen die Elemente der Liste nach dem Signal den im Signal übergebenen Argumenten? Was sind Absender und Serien ?
Mir ist etwas über die Beziehung zwischen Lautstärkeregelung und Benachrichtigungen aufgefallen. Nach dem, was ich vom dbus-monitor-Ausgang gelesen habe
method call sender=:1.6 -> dest=org.freedesktop.Notifications serial=1400 path=/org/freedesktop/Notifications; interface=org.freedesktop.Notifications; member=Notify string "gnome-settings-daemon" uint32 0 string "notification-audio-volume-medium" string " " string "" array [ ] array [ dict entry( string "value" variant int32 38 ) dict entry( string "x-canonical-private-synchronous" variant string "volume" ) ] int32 -1
Es scheint, dass die Benachrichtigung durch seine Methode ausgelöst wird. Ich verstehe nur nicht wirklich, warum es so funktioniert. Meiner Meinung nach wäre es sinnvoller, wenn ein Signal "Benachrichtigung-Audio-Lautstärke-Medium" gesendet würde, während die Benachrichtigung auf dieses Signal warten und entsprechend reagieren würde. Wenn das Senden / Empfangen eher öffentlich als privat wäre, würde es dann nicht mehr Flexibilität und Effizienz ermöglichen? Zum Beispiel, wenn es ein öffentliches Signal für "Benachrichtigung-Audio-Lautstärke-Medium" gab Dann könnten mehrere Anwendungen auf dieses Signal warten (wodurch konkurrierende Benachrichtigungsanwendungen entstehen könnten), und Entwickler müssten sich nur mit dem Senden von Signalen befassen, während das Aufnehmen und Verarbeiten eines Signals das Geschäft der benachrichtigenden Anwendung (oder eines anderen) sein würde Programm, das diese Signale benötigt).
Ich bin gerade neu in Dbus und möchte mehr erfahren, während ich mit Dbus an Python arbeite, hauptsächlich, um einige Applets zu entwickeln. Ich habe das dbus-python-Tutorial gesehen und es zeigt, wie man alle Signale abhört (indem man weder Schnittstelle noch Pfad usw. angibt). Aber wie man Methoden verfolgt, wenn sie aufgerufen werden, wie es dbus-monitor tut?
Wenn Sie die Geduld haben, zu lehren, wie das funktioniert, sind Sie herzlich willkommen.
quelle
org.freedesktop.Notifications
. Auf diese Weise werden alle Methodenaufrufe für diesen Dienst von Ihrem Code verarbeitet.Ich suchte auch nach einer Lösung, um die Desktop-Benachrichtigungen über dbus mit einem Python-Skript zu sammeln. Diese Frage kam mir beim Googeln am nächsten, aber ein Ersatz für notify-osd zu schreiben schien mir ein Overkill zu sein :)
Wenn ich mir die Applet-Quellen für die letzten Benachrichtigungen anschaue, bekomme ich einige Hinweise zum Überwachen der dbus-Nachrichten und hier ist die Python-Implementierung, die ich mir ausgedacht habe:
Ich hoffe, dies hilft jemandem, da es anscheinend nicht viele einfache Python-Beispiele für die Überwachung der dbus-Nachrichten gibt.
quelle
NameAquired
Nachricht nicht vermeiden )