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

DBus introspection object tree using dbus-send

是否可以使用 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 会非常方便。

不,这是不可能的。你可以要求总线列出所有的服务名称,但是没有办法要求所有的接口,所以通常有两种情况:1)你知道接口名称并使用它们 2)你从 / 开始并根据递归处理在 Introspect() 个回复中。 D 英尺 (2)

busctl 是与 DBus

交互的便捷工具

试一试:

busctl tree