缺少DBus .service文件

8 投票
1 回答
22526 浏览
提问于 2025-04-17 12:34

我正在为自己的需求构建一个自定义的 dbus 服务,希望它在有人需要的时候能够自动启动。为此,我创建了一个 .service 文件,内容如下:

[D-Bus Service]
Name=com.mycompany.servicename
Exec=/home/myuser/Workspace/service-start
User=myuser

在这里,我只是更改了服务和可执行文件的实际名称,但这不是重点。我已经仔细检查过实际名称,完全一致。这个文件我放在了 /usr/share/dbus-1/services 文件夹下,命名为 com.mycompany.servicename.service(我使用的是 Ubuntu 11.10)。可执行文件对所有人都有 x 权限。

问题来了——当我尝试启动客户端执行以下操作时:

bus = dbus.SessionBus()
bus.get_object('com.mycompany.servicename','/path/to/object')

我收到的错误是 dbus.exceptions.DBusException: org.freedesktop.DBus.Error.ServiceUnknown: The name com.mycompany.servicename was not provided by any .service files

在服务启动后,路径为 '/path/to/object' 的对象已经注册。我就是搞不懂为什么 dbus 找不到我的 .service 文件。也许我漏掉了什么?有什么想法吗?

编辑
我已经成功让 D-BUS 自动启动我的脚本。.service 文件的部分应该命名为 [D-BUS Service],而不是 [D-Bus service]

1 个回答

4

这里是评论的简短总结……

在一个名为XDG基础目录规范的目录中,创建一个子目录dbus-1/services/。通常情况下,~/.local/share/dbus-1/services/就可以了。进入这个新创建的子目录,创建一个名为com.mycompany.servicename.service的文件,并添加以下内容:

[D-BUS Service]
Name=com.mycompany.servicename
Exec=/home/myuser/Workspace/service-start
User=myuser

请注意,D-BUS[D-BUS Service]中需要大写。

就这样!

撰写回答