D-Bus
(重定向自 Dbus-broker)
D-Bus 是一个消息总线系统,为进程间通信提供了一种简便的方法。 它由一个守护进程组成,该守护进程既可以在系统范围内运行,也可以为每个用户会话运行,并且包含一组库,允许应用程序使用 D-Bus。
dbus 被拉取并作为 systemd 的依赖项安装,用户会话总线会为每个用户自动启动。
实现
Arch 提供了两种 D-Bus 消息代理实现。 最初,在安装 systemd 软件包时,会要求用户选择所需的 dbus-units 提供程序。 一次只能安装一个实现。
dbus-broker
dbus-broker 目前是 Arch 的默认实现 [1] [2]。 它是参考实现的直接替代品,其目标是“在保持与 D-Bus 参考实现兼容性的同时,提供高性能和可靠性”。
当被询问 dbus-units 提供程序时,选择 dbus-broker-units,或者显式地安装它。
参考实现
参考实现 仍然受到 Arch 的官方支持。
当被询问 dbus-units 提供程序时,选择 dbus-daemon-units,或者显式地安装它。
提示与技巧
覆盖 dbus 服务
当需要在提供相同知名总线名称的其他服务中指定特定服务时,这会很有用。 例如,请参阅 KeePass#Autostart 和 KDE Wallet#Automatic D-Bus activation。
通过在 $XDG_DATA_HOME/dbus-1/services
的服务文件中设置 Exec=/bin/false
,可以屏蔽 D-Bus 服务。 例如,要屏蔽 gvfsd,
$ cp /usr/share/dbus-1/services/org.gtk.vfs.Daemon.service ~/.local/share/dbus-1/services $ sed 's|^Exec=.*|Exec=/bin/false|' ~/.local/share/dbus-1/services/org.gtk.vfs.Daemon.service
如果服务已启动,则覆盖将不起作用。 必须终止现有服务进程,或更早启动它。
调试
- Bustle — 绘制 D-Bus 活动的序列图。 它显示信号发射、方法调用及其相应的返回,以及每个单独事件的时间戳和每次方法调用的持续时间。
- D-Feet — 易于使用的 D-Bus 调试器 GUI 工具。 已经停产。
- D-Spy — 易于使用的 D-Bus 调试器 GUI 工具。 D-Spy 可以用来检查正在运行的程序的 D-Bus 接口,并在这些接口上调用方法。
- Qt D-Bus Viewer — GUI D-Bus 调试器。 它可以用来检查 D-Bus 服务并在其上调用方法。
参见
- https://freedesktop.org/wiki/Software/dbus/
- https://freedesktop.org/wiki/IntroductionToDBus/
- https://uyha.github.io/technical/dbus-systemd.html systemd 使用 DBus 作为与之交互的机制。 本文介绍了足够多的 DBus 概念以及使用
busctl
与 systemd 通信的方法。