如何声明在DBus上订阅的信号?

3 投票
2 回答
827 浏览
提问于 2025-04-15 19:07

有没有办法在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内部进行的。

撰写回答