问题:有什么方法可以找出 D-Bus 接口中公开的方法(及其签名)?
问题描述:在我的手机中,我正在使用 D-Bus 到适配器接口调用 BlueZ 方法,当在手机 2 上检查时,这些方法中的一个不可用。
目的是检查方法名称/签名是否在其他设备中被修改,我无权访问代码,因此希望在接口中找到方法
使用 dbus-send,您可以列出系统上的可用服务:
会议:
dbus-send --session \
--dest=org.freedesktop.DBus \
--type=method_call \
--print-reply \
/org/freedesktop/DBus \
org.freedesktop.DBus.ListNames
系统:
dbus-send --system \
--dest=org.freedesktop.DBus \
--type=method_call \
--print-reply \
/org/freedesktop/DBus \
org.freedesktop.DBus.ListNames
你会得到这样的答案:
array [
string "org.freedesktop.DBus"
string ":1.1"
string ":1.26"
string "org.asamk.Signal"
]
如果你想列出 dbus 服务背后的所有可用方法,你仍然可以使用 dbus-send 来内省 dbus 服务。
例如org.asamk.Signal
:
dbus-send --system --type=method_call --print-reply \
--dest=org.asamk.Signal \
/org/asamk/Signal \
org.freedesktop.DBus.Introspectable.Introspect
你会得到这种结果(截断)
<node name="/org/asamk/Signal">
<interface name="org.asamk.Signal">
<method name="sendMessage" >
...parameters
</method>
<method name="sendGroupMessage" >
...parameters
</method>
</interface>
</node>
这里有2种方法,sendMessage
和sendGroupMessage
你也可以看看D-Feet。
With an extra google search and dbus understanding, using D-Bus Introspection helps to get the methods (with signatures) exposed on that particular interface. More information available at link.