如何定义一个可以反省的新d-bus接口?

时间:2015-08-04 16:56:52

标签: c++ linux dbus

我已经创建了一个自定义的d-bus服务,它似乎已经注册,可以通过dbus调用激活,但它没有接口定义,也不能像d-feet这样的工具进行内省。

我正在试图弄清楚如何做到这一点,我创建了以下界面文件:

<!DOCTYPE node PUBLIC
    "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
    "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd" >
<node xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
  <interface name="com.me.test.Manager">
    <method name="Start">
      <arg name="name" direction="in" type="s">
        <doc:doc><doc:summary>Name of new contact</doc:summary></doc:doc>
      </arg>
      <arg name="email" direction="in" type="s">
        <doc:doc><doc:summary>E-mail address of new contact</doc:summary></doc:doc>
      </arg>
      <arg name="id" direction="out" type="u">
        <doc:doc><doc:summary>ID of newly added contact</doc:summary></doc:doc>
      </arg>
      <doc:doc>
        <doc:description>
          <doc:para>
            Adds a new contact to the address book with their name and
            e-mail address.
          </doc:para>
        </doc:description>
      </doc:doc>
    </method>
  </interface>
</node>

我已将此文件命名为:

/usr/share/dbus-1/interfaces/com.me.test.Manager.xml

但是当我使用d-feet浏览器搜索“com.me.test”时,我仍然没有在会话总线上看到任何对象。如何通过dbus实际注册此接口,dbus是否监控此目录?我试过重启dbus但是没有帮助

1 个答案:

答案 0 :(得分:1)

您的服务需要致电org.freedesktop.DBus.RequestName以在名称下显示,然后回复org.freedesktop.DBus.Introspectable.Introspect次请求

以下是我在dbus库中实现它的示例 - https://github.com/sidorares/node-dbus/blob/master/lib/stdifaces.js#L24-L92