D-Bus

来自 ArchWiki

此文章或章节需要扩充。

原因: 提及通过使用 systemctl mask 禁用 dbus 服务以及在 /etc/dbus-1/services 中覆盖(在 Talk:D-Bus 中讨论)

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,或者显式地 安装 它。

注意: dbus-broker 目前不支持 AppArmor。但是,官方支持的内核 也不支持 D-Bus 的 AppArmor 调解

参考实现

参考实现 仍然受到 Arch 的官方支持。

当询问 dbus-units 提供程序时,选择 dbus-daemon-units,或者显式地 安装 它。

提示与技巧

覆盖 dbus 服务

当在提供相同知名总线名称的其他服务中指定特定服务时,这非常有用。例如,请参阅 KeePass#AutostartKDE 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 活动的序列图。它显示信号发射、方法调用及其相应的返回,以及每个单独事件的时间戳和每次方法调用的持续时间。
https://gitlab.gnome.org/World/bustle || bustle
  • D-Feet — 易于使用的 D-Bus 调试器 GUI 工具。已停止维护。
https://wiki.gnome.org/Apps/DFeet || d-feetAUR
  • D-Spy — 易于使用的 D-Bus 调试器 GUI 工具。D-Spy 可用于检查正在运行的程序的 D-Bus 接口,并调用这些接口上的方法。
https://apps.gnome.org/Dspy/ || d-spy
  • Qt D-Bus Viewer — GUI D-Bus 调试器。可用于检查 D-Bus 服务并调用其上的方法。
https://doc.qt.ac.cn/qt-6/qdbusviewer.html || qt6-tools

您还可以使用来自 systemdbusctl(1)

参见