6

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

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

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

4

3 回答 3

9

使用 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种方法,sendMessagesendGroupMessage

于 2019-12-16T07:32:26.410 回答
2

你也可以看看D-Feet

于 2013-12-20T03:31:48.683 回答
1

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.

于 2013-11-14T06:36:28.510 回答