【问题标题】:How to find methods exposed in a D-Bus interface如何找到在 D-Bus 接口中公开的方法
【发布时间】:2013-11-26 04:03:46
【问题描述】:

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

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

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

【问题讨论】:

    标签: dbus bluez


    【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-21
        • 2018-12-09
        • 1970-01-01
        • 2015-12-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多