有没有办法通过DBus声明Python应用程序订阅了哪些信号?
换句话说,有没有办法通过“Introspectable”接口来宣传哪些信号被订阅。我使用“D-Feet D-Bus调试器”。
E.g。应用程序订阅信号X(在add_signal_receiver
对象上使用bus
方法)。
答案 0 :(得分:4)
D-Bus客户端在总线守护程序上调用AddMatch
以注册他们对匹配特定模式的消息的兴趣;在创建代理对象时,大多数绑定都会为特定服务和对象路径上的所有信号或该服务和对象路径上特定接口上的信号添加匹配规则。
使用dbus-monitor可以看到添加的匹配规则:尝试运行dbus-monitor member=AddMatch
,然后运行使用D-Bus的应用程序。同样,您可以窃听RemoveMatch
的来电。但是,目前无法向守护程序询问当前有效的匹配规则集。鉴于守护程序已经知道,添加一种方式来提问这个问题比为客户端重新宣传这个问题更有意义。
答案 1 :(得分:1)
这可能是不可能的,因为在总线上发出信号,应用程序只是挑选出有趣的信息。订阅不会发生在dbus内部。