在 D-Bus 中,系统总线(system bus)和会话总线(session bus)的工作方式有所不同。会话总线主要依赖环境变量来找到总线地址,而系统总线则依赖于标准的系统路径和配置。
系统总线的服务查找机制
系统总线守护进程(dbus-daemon --system)由 systemd 或系统启动脚本启动。
系统总线的地址是固定的,通常不需要通过环境变量来查找。
系统总线的地址通常是固定的 UNIX 套接字路径,例如 /var/run/dbus/system_bus_socket。这个路径在 D-Bus 配置文件中定义。
系统总线守护进程使用 /etc/dbus-1/system.conf 配置文件。这个文件定义了系统总线的行为、权限、服务目录等。
在 /usr/share/dbus-1/system-services/ 和 /etc/dbus-1/system.d/ 目录中定义了系统总线的服务。
D-Bus 客户端应用程序不需要通过环境变量来查找系统总线。它们直接连接到标准的 UNIX 套接字路径。
在编程接口中,系统总线的地址通常通过 DBUS_BUS_SYSTEM 常量来引用,具体实现中会解析到 /var/run/dbus/system_bus_socket。
查找服务的过程
当一个 D-Bus 客户端想要与系统总线通信时,它会尝试连接到 /var/run/dbus/system_bus_socket。
当客户端发送消息到系统总线请求某个服务时,系统总线守护进程会检查当前已注册的服务。
如果服务未运行,系统总线守护进程会查找 /usr/share/dbus-1/system-services/ 目录中的服务描述文件,并尝试激活该服务。
服务描述文件是 .service 文件,定义了如何启动服务。例如,一个服务描述文件可能包含以下内容:
[D-BUS Service]
Name=org.freedesktop.NetworkManager
Exec=/usr/sbin/NetworkManager --no-daemon
总结
- 系统总线地址:系统总线使用固定的 UNIX 套接字路径(如 /var/run/dbus/system_bus_socket),客户端直接连接这个路径。
- 配置文件:系统总线的行为和服务目录通过配置文件(如 /etc/dbus-1/system.conf 和 /usr/share/dbus-1/system-services/)进行定义。
- 服务查找:系统总线守护进程根据服务描述文件来查找和激活服务,不依赖环境变量。
这种机制使得系统总线在启动和服务查找方面更加简单和可靠,因为它不依赖于动态环境变量,而是基于固定的路径和配置文件。
标签:服务,系统总线,Bus,dbus,system,查找,bus From: https://blog.csdn.net/qq_43287763/article/details/139638013