如何找到在 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个方法,sendMessagesendGroupMessage

【讨论】:

现在有什么方法可以用对象管理器做到这一点...?我通常会以不同的方式看待它【参考方案2】:

你也可以看看D-Feet。

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于如何找到在 D-Bus 接口中公开的方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spark 框架中获取所有公开的路由

从 net.connman.Manager 的 GetService 方法中动态提取 D-Bus 参数和对象路径

如何通过 aws Java SDK 公开 S3 对象?

未找到工作职能。尝试公开您的工作类别和方法

如何使用 dbus 公开对象列表

如何使用objective-c向接口公开自定义初始化实现?