私はdbus-monitorをいじって、Ubuntu環境でdbusがどのように機能しているかを理解しようとしています。これに関していくつか質問があります。
以下を正しく読む方法を教えてください。大きなアイデアは理解していますが、詳細は理解していません。
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
最初のものはシグナルであり、2番目のものはメソッドであることがわかります。宛先は、信号の特定の受信機/スロットが存在できることを意味しますか?何メンバー?また、シグナルに続くリストの項目は、シグナルで渡される引数ですか?センダとシリアルとは何ですか?
ボリュームコントロールと通知の関係について何かに気付きました。dbus-monitor出力から読み取ったものから
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
通知はそのメソッドによってトリガーされるようです。私はそれがなぜこのように機能するのか本当に理解していません。私の見解では、通知がこの信号をリッスンし、それに応じて反応する一方で、「notification-audio-volume-medium」が発せられた信号がある場合、より意味があります。送信/受信がプライベートではなくパブリックである場合、柔軟性と効率が向上しませんか?たとえば、「notification-audio-volume-medium」のパブリックシグナルがあった場合 次に、いくつかのアプリケーションがこの信号をリッスンし(競合する通知アプリケーションが存在することを可能にします)、開発者は信号の送信に注意する必要がありますが、信号の取得と処理は通知アプリケーションのビジネス(またはその他のそれらの信号を必要とするプログラム)。
私はDbusの初心者であり、主にいくつかのアプレットを開発するためにPythonでDbusを使用しているので、もっと学びたいと思っています。私はdbus-pythonチュートリアルを見て、すべての信号をリッスンする方法を教えています(インターフェイスやパスなどを指定しないことによって)。しかし、dbus-monitorのように、メソッドが呼び出されたときにメソッドを追跡する方法は?
それがどのように機能するかを教える忍耐力があれば、大歓迎です。