Je joue avec dbus-monitor pour essayer de comprendre comment dbus fonctionne dans l'environnement Ubuntu. J'ai plusieurs questions à ce sujet:
Pourriez-vous me faire savoir comment lire correctement ce qui suit? Je comprends la grande idée, mais pas les détails.
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
Je comprends que le premier est un signal tandis que le second est une méthode. La destination signifie- t-elle qu'il peut y avoir un récepteur / emplacement spécifique pour un signal? Qu'est-ce qu'un membre ? Et les éléments de la liste suivant le signal sont-ils les arguments passés dans le signal? Que sont l' expéditeur et les publications en série ?
J'ai remarqué quelque chose sur la relation entre le contrôle du volume et les notifications. D'après ce que j'ai lu sur la sortie du moniteur dbus
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
Il semble que la notification soit déclenchée par sa méthode. Je ne comprends tout simplement pas pourquoi cela fonctionne de cette façon. À mon avis, il serait plus logique s'il y avait un signal émis "notification-audio-volume-medium" alors que la notification écouterait ce signal et réagirait en conséquence. Si l'envoi / la réception serait public plutôt que privé, ne permettrait-il pas plus de flexibilité et d'efficacité? Par exemple, s'il y avait un signal public pour "notification-audio-volume-medium" alors plusieurs applications pourraient écouter ce signal (ce qui permettrait à des applications de notification concurrentes de voir le jour) et les développeurs n'auraient qu'à se préoccuper de l'envoi de signaux, tandis que la collecte et la gestion d'un signal seraient l'affaire de l'application notifiante (ou de toute autre programme qui a besoin de ces signaux).
Je suis juste nouveau sur Dbus et je veux en savoir plus car je travaille avec Dbus sur Python, principalement pour développer des applets. J'ai vu le tutoriel dbus-python et il enseigne comment écouter tous les signaux (en ne spécifiant ni interface ni chemin, etc.) Mais comment suivre les méthodes lorsqu'elles sont appelées, comme le fait dbus-monitor?
Si vous avez la patience d'enseigner comment cela fonctionne, vous êtes les bienvenus.
org.freedesktop.Notifications
service. De cette façon, tous les appels de méthode à ce service seront traités par votre code.Je cherchais également une solution pour collecter les notifications de bureau via dbus avec un script python. Cette question était la plus proche que j'ai eue avec Google, mais écrire un remplacement pour notify-osd semblait être une exagération :)
En regardant les sources d'applet de notifications récentes , j'ai eu quelques astuces pour surveiller les messages dbus et voici l'implémentation de python que j'ai trouvée:
J'espère que cela aide quelqu'un, car il semble qu'il n'y ait pas beaucoup d'exemples simples de python liés à la surveillance des messages dbus.
la source
NameAquired
message)