DBus服务可以通过.service文件配置,当客户端请求某个服务名时,如果服务未运行,DBus会启动它。
按需启动:
如果系统/会话总线上某个客户端(如应用程序)尝试调用 com.example.MyService 接口的 方法(method) 或订阅其 信号(signal),而该服务尚未运行,D-Bus 会根据 /usr/share/dbus-1/services/com.example.MyService.service 文件中定义的 Exec 命令启动服务进程。
延迟启动(Activation):这是 D-Bus 的核心设计特性,可以避免不必要的资源占用,仅在实际需要时启动服务。
dbus服务端程序打包规则
基于Debian的系统,deb打包可能更合适。
可执行文件放到/usr/bin,
配置文件放到/etc/dbus-1/system.d/或类似位置,
服务文件放到/usr/share/dbus-1/services/
需要确认DBus的服务文件路径。对于会话总线,服务文件通常放在~/.local/share/dbus-1/services/(用户级别)或者/usr/share/dbus-1/services/(系统级别)。如果是系统级服务,可能需要放在系统目录,但自动启动可能更常用在会话总线的情况。所以可能应该使用会话总线,这样用户不需要root权限,更安全。
.service文件示例
[D-BUS Service]
Name=com.example.MyService
Exec=@bindir@/my-service
文件应命名为com.example.MyService.service,并安装到/usr/share/dbus-1/services/目录下。这样,当客户端请求com.example.MyService时,DBus会执行/usr/bin/my-service启动服务