如何声明在DBus上订阅的信号?
有没有办法在Python应用程序中声明通过DBus订阅了哪些信号?
换句话说,有没有办法通过“可 introspectable 接口”来显示哪些信号是被订阅的。我使用的是“D-Feet D-Bus调试工具”。
比如说,应用程序订阅了信号X(使用add_signal_receiver
方法在bus
对象上)。
2 个回答
4
D-Bus 客户端会在总线守护进程上调用 AddMatch
,来注册它们对特定模式消息的兴趣。大多数绑定会添加一个匹配规则,要么是针对某个服务和对象路径上的所有信号,要么是针对该服务和对象路径上某个接口的信号,这通常是在你创建一个代理对象的时候进行的。
使用 dbus-monitor,你可以看到匹配规则是如何被添加的:试着运行 dbus-monitor member=AddMatch
,然后再运行一个使用 D-Bus 的应用程序。同样,你也可以监听对 RemoveMatch
的调用。不过,目前没有办法询问守护进程当前生效的匹配规则是什么。考虑到守护进程已经知道这些信息,增加一个询问这些规则的方式,比让客户端重新发布这些规则要更合理。
1
这可能不太可能,因为信号是在总线上发出的,而应用程序只是挑选出它感兴趣的部分。订阅并不是在dbus内部进行的。