存放在 /usr/share/dbus-1/services 下的 .service 文件并不会由所有用户自动运行。它们是 D-Bus 服务描述文件,用于定义在需要时如何启动相应的服务。至于区分哪些用户需要运行这些服务,D-Bus 的会话总线和系统总线有不同的处理机制。
会话总线服务查找和启动
存放在 /usr/share/dbus-1/services 和 ~/.local/share/dbus-1/services 下的 .service 文件用于定义会话总线服务。这些文件描述了当客户端请求某个服务时,如何启动该服务。
当客户端向会话总线发送消息并请求某个服务时,如果该服务尚未运行,会话总线守护进程会查找服务描述文件来启动该服务。
会话总线守护进程会检查服务描述文件中定义的启动命令,然后在当前用户的环境中启动该服务。
[D-BUS Service]
Name=com.example.MyService
Exec=/usr/bin/my-service --session
系统总线服务查找和启动
存放在 /usr/share/dbus-1/system-services 和 /etc/dbus-1/system.d 下的 .service 文件用于定义系统总线服务。
这些文件描述了当系统范围内的客户端请求某个服务时,如何启动该服务。
当系统范围内的客户端向系统总线发送消息并请求某个服务时,如果该服务尚未运行,系统总线守护进程会查找服务描述文件来启动该服务。
系统总线守护进程会以系统级别权限(通常是 root 权限)来启动这些服务。
[D-BUS Service]
Name=org.freedesktop.NetworkManager
Exec=/usr/sbin/NetworkManager --no-daemon
区分用户需求的机制
会话总线
每个用户都有自己的会话总线实例,会话总线守护进程运行在用户的权限下。会话总线服务仅在该用户的会话中按需启动。当某个用户的应用程序请求一个会话总线服务时,会话总线会根据服务描述文件启动该服务,但只在当前用户的会话中运行。
系统总线是全局的,仅有一个系统总线实例,运行在系统级别。系统总线服务由系统总线守护进程按需启动,服务在系统范围内运行。系统总线服务通常为所有用户提供系统范围的功能,比如网络管理器、Udev 设备管理器等。
结论
/usr/share/dbus-1/services 下的 .service 文件用于定义会话总线服务,仅在需要时由特定用户的会话总线守护进程启动,且仅在该用户的会话中运行。
系统总线服务定义在 /usr/share/dbus-1/system-services 和 /etc/dbus-1/system.d 下,由系统总线守护进程按需启动,服务于整个系统的所有用户。