我正在与dbus-monitor一起玩,以尝试了解dbus在Ubuntu环境中的工作方式。在这方面,我有几个问题:
您能否让我知道如何正确阅读以下内容?我了解大创意,但不了解细节。
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
我知道第一个是信号,而第二个是方法。目的地是否意味着信号可以有特定的接收器/插槽?什么是会员?信号之后的列表项是否在信号中传递了参数?什么是发件人和序列号?
我注意到了音量控制和通知之间的关系。从我从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时了解更多信息,主要是开发一些applet。我看过dbus-python教程,它教了如何监听所有信号(通过不指定接口或路径等)。但是如何像dbus-monitor一样跟踪调用方法时的方法?
如果您有耐心去教它是如何工作的,欢迎您。