我正在玩弄dbus-monitor,试图了解在Ubuntu环境中dbus的工作原理。关于这一点,我有几个问题:
1. 请问你能告诉我如何正确阅读以下内容吗?我理解大概的意思,但细节还不太清楚。
信号发送者=:1.1948 -> 目标=(空目标) 序列号=1829990 路径=/org/ayatana/menu/DA00003; 接口=org.ayatana.dbusmenu; 成员=ItemPropertyUpdated 整数32位 23 字符串 "enabled" 变量 布尔值 true 方法调用发送者=:1.6 -> 目标=org.freedesktop.Notifications 序列号=1399 路径=/org/freedesktop/Notifications; 接口=org.freedesktop.Notifications; 成员=GetCapabilities
我知道第一个是一个信号,而第二个是一个方法。"目标"是否意味着信号可以有一个特定的接收者/插槽?"成员"是什么意思?列表中跟随信号的项目是传递给信号的参数吗?"发送者"和"序列号"又是什么?
2. 我注意到音量控制和通知之间的关系。从我从dbus-monitor输出中读到的内容来看,
方法调用发送者=:1.6 -> 目标=org.freedesktop.Notifications 序列号=1400 路径=/org/freedesktop/Notifications; 接口=org.freedesktop.Notifications; 成员=Notify 字符串 "gnome-settings-daemon" 无符号整数32位 0 字符串 "notification-audio-volume-medium" 字符串 " " 字符串 "" 数组 [ ] 数组 [ 字典项( 字符串 "value" 变量 整数32位 38 ) 字典项( 字符串 "x-canonical-private-synchronous" 变量 字符串 "volume" ) ] 整数32位 -1
似乎通知是由它的方法触发的。我只是不太明白为什么会这样工作。在我看来,如果有一个信号被发出"notification-audio-volume-medium",而通知监听该信号并相应地做出反应,那将更有意义。如果发送/接收是公开的而不是私有的,是否会提供更多的灵活性和效率?例如,如果有一个公共信号"notification-audio-volume-medium",那么几个应用程序可以监听该信号(这将允许竞争的通知应用程序出现),而开发人员只需关注发送信号,而接收和处理信号将成为通知应用程序(或任何其他需要这些信号的程序)的责任。
3. 我刚接触DBus,并希望学到更多,因为我正在使用Python上的DBus,主要是为了开发一些小部件。我看过dbus-python教程,它教如何监听所有信号(不指定接口或路径等)。但是如何像dbus-monitor一样跟踪方法调用呢?
如果你有耐心教我怎么做,那就欢迎。
1. 请问你能告诉我如何正确阅读以下内容吗?我理解大概的意思,但细节还不太清楚。
信号发送者=:1.1948 -> 目标=(空目标) 序列号=1829990 路径=/org/ayatana/menu/DA00003; 接口=org.ayatana.dbusmenu; 成员=ItemPropertyUpdated 整数32位 23 字符串 "enabled" 变量 布尔值 true 方法调用发送者=:1.6 -> 目标=org.freedesktop.Notifications 序列号=1399 路径=/org/freedesktop/Notifications; 接口=org.freedesktop.Notifications; 成员=GetCapabilities
我知道第一个是一个信号,而第二个是一个方法。"目标"是否意味着信号可以有一个特定的接收者/插槽?"成员"是什么意思?列表中跟随信号的项目是传递给信号的参数吗?"发送者"和"序列号"又是什么?
2. 我注意到音量控制和通知之间的关系。从我从dbus-monitor输出中读到的内容来看,
方法调用发送者=:1.6 -> 目标=org.freedesktop.Notifications 序列号=1400 路径=/org/freedesktop/Notifications; 接口=org.freedesktop.Notifications; 成员=Notify 字符串 "gnome-settings-daemon" 无符号整数32位 0 字符串 "notification-audio-volume-medium" 字符串 " " 字符串 "" 数组 [ ] 数组 [ 字典项( 字符串 "value" 变量 整数32位 38 ) 字典项( 字符串 "x-canonical-private-synchronous" 变量 字符串 "volume" ) ] 整数32位 -1
似乎通知是由它的方法触发的。我只是不太明白为什么会这样工作。在我看来,如果有一个信号被发出"notification-audio-volume-medium",而通知监听该信号并相应地做出反应,那将更有意义。如果发送/接收是公开的而不是私有的,是否会提供更多的灵活性和效率?例如,如果有一个公共信号"notification-audio-volume-medium",那么几个应用程序可以监听该信号(这将允许竞争的通知应用程序出现),而开发人员只需关注发送信号,而接收和处理信号将成为通知应用程序(或任何其他需要这些信号的程序)的责任。
3. 我刚接触DBus,并希望学到更多,因为我正在使用Python上的DBus,主要是为了开发一些小部件。我看过dbus-python教程,它教如何监听所有信号(不指定接口或路径等)。但是如何像dbus-monitor一样跟踪方法调用呢?
如果你有耐心教我怎么做,那就欢迎。
org.freedesktop.Notifications
服务。这样,所有对该服务的方法调用都将由你的代码处理。 - ulidtkoself
-命名参数的约定,但我不明白你问题的背景。 - ulidtko...,"self"对象是/org/ayatana/menu/DA00003
。我想知道那行中的self对象是什么意思。 - kawing-chiu/org/ayatana/menu/DA00003
对象 是“发射器”或“发送者”,因为发送者是 服务,即:1.1948
。所以,如果我们要遵循传统的面向对象命名法,我们可能希望将那个/org...
对象 称为self
。如果你知道JavaScript中的this
是如何工作的,这非常类似(基本上是同样的情况)。 - ulidtko