使用 dbus-send 的 DBus 自省对象树

Posted

技术标签:

【中文标题】使用 dbus-send 的 DBus 自省对象树【英文标题】:DBus introspection object tree using dbus-send 【发布时间】:2015-02-28 21:07:25 【问题描述】:

是否可以使用 dbus-send 收集 DBus 连接名称的完整对象树?

目前,我能够执行对所需目的地的多次调用,指定方法“org.freedesktop.DBus.Introspectable.Introspect”并第一次使用“/”作为路径,而不是检索内部节点并执行新的呼吁。

例如:

$ dbus-send --session --print-reply --reply-timeout=2000 --type=method_call --dest=org.gnome.Bluetooth.applet / org.freedesktop.DBus.Introspectable.Introspect

gives nodes Factory and org. So I proceed with the calls:

$ dbus-send --session --print-reply --reply-timeout=2000 --type=method_call --dest=org.gnome.Bluetooth.applet /Factory org.freedesktop.DBus.Introspectable.Introspect

$ dbus-send --session --print-reply --reply-timeout=2000 --type=method_call --dest=org.gnome.Bluetooth.applet /org org.freedesktop.DBus.Introspectable.Introspect

and so on...

我想立即检索完整的树。

我知道像 d-feet 这样的工具可以做到这一点,但我需要一个 cli 界面,dbus-send 会非常方便。

【问题讨论】:

我找到了一个可能的“一次性解决方案”,至少满足我的需要:gdbus introspect --session --dest org.gnome.Bluetooth.applet --object-path / --recurse - -xml 【参考方案1】:

不,这是不可能的。可以要求bus列出所有的服务名,但是没有办法要求所有的接口,所以通常有两种情况:1)知道接口名并使用2)从/开始,基于@递归处理987654322@ 回复。 D-foot (2)

【讨论】:

【参考方案2】:

busctl 是与 DBus 交互的便捷工具

试试这个:

busctl tree

【讨论】:

以上是关于使用 dbus-send 的 DBus 自省对象树的主要内容,如果未能解决你的问题,请参考以下文章

dbus-send

使用 dbus-send 关闭 Linux

使用 dbus-send 设置/获取属性

使用 dbus-send 调用 GetAll

dbus-send与QDBusAbstractInterface的对应关系

如何通过 dbus-send 发送方法调用?