如何找到在 D-Bus 接口中公开的方法
Posted
技术标签:
【中文标题】如何找到在 D-Bus 接口中公开的方法【英文标题】:How to find methods exposed in a D-Bus interface 【发布时间】:2013-11-26 04:03:46 【问题描述】:问题:有什么方法可以找出 D-Bus 接口中公开的方法(及其签名)?
问题描述:在我的手机中,我使用 D-Bus 到适配器接口调用 BlueZ 方法,当在手机 2 上检查时,这些方法不可用。
目的是检查方法名称/签名是否在其他设备中被修改,我无权访问代码,因此希望在接口中找到方法
【问题讨论】:
【参考方案1】:使用 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
【讨论】:
现在有什么方法可以用对象管理器做到这一点...?我通常会以不同的方式看待它【参考方案2】:你也可以看看D-Feet。
【讨论】:
【参考方案3】:通过额外的 google 搜索和 dbus 理解,使用 D-Bus Introspection 有助于在该特定接口上公开方法(带有签名)。更多信息请访问link。
【讨论】:
以上是关于如何找到在 D-Bus 接口中公开的方法的主要内容,如果未能解决你的问题,请参考以下文章