如何查找在 D-Bus 接口中公开的方法

ash*_*ish 6 dbus bluez

问题:有什么方法可以找出在 D-Bus 接口中公开的方法(及其签名)?

问题描述:在我的手机中,我使用 D-Bus 调用 BlueZ 方法到适配器接口,当在手机 2 上检查这些方法时,这些方法不可用。

目的是检查方法名称/签名是否在其他设备中被修改,我无权访问代码,因此希望在接口中找到方法

mic*_*ard 5

使用 dbus-send,您可以列出系统上的可用服务:

会议:

dbus-send --session           \
  --dest=org.freedesktop.DBus \
  --type=method_call          \
  --print-reply               \
  /org/freedesktop/DBus       \
  org.freedesktop.DBus.ListNames
Run Code Online (Sandbox Code Playgroud)

系统:

dbus-send --system            \
  --dest=org.freedesktop.DBus \
  --type=method_call          \
  --print-reply               \
  /org/freedesktop/DBus       \
  org.freedesktop.DBus.ListNames
Run Code Online (Sandbox Code Playgroud)

你会得到这样的答案:

   array [
      string "org.freedesktop.DBus"
      string ":1.1"
      string ":1.26"
      string "org.asamk.Signal"
   ]
Run Code Online (Sandbox Code Playgroud)

如果您想列出 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
Run Code Online (Sandbox Code Playgroud)

你会得到这种结果(截断)

<node name="/org/asamk/Signal">
 <interface name="org.asamk.Signal">
  <method name="sendMessage" >
   ...parameters
  </method>                      
  <method name="sendGroupMessage" >     
   ...parameters
  </method>
 </interface>
</node>
Run Code Online (Sandbox Code Playgroud)

这里有2种方法,sendMessagesendGroupMessage


ash*_*ish 0

通过额外的 google 搜索和 dbus 理解,使用 D-Bus 自省有助于获取在该特定接口上公开的方法(带有签名)。更多信息请访问链接