我已经创建了一个自定义的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但是没有帮助
答案 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