D-Bus

出自 阿尔派 Linux

D-Bus 是一个消息总线系统,为进程间通信提供机制。

一些服务依赖于 D-Bus 会话实例或默认期望它(包括 Pipewire)。如果 d-bus 正在运行,其他进程才能与这些服务通信。

安装

安装 dbus 软件包

# apk add dbus

如果您正在使用 x11,您可能还需要安装 X11 附加组件,这些组件提供 dbus-launch 命令

# apk add dbus-x11

如果您希望 dbus 在系统启动时启动,请启用该服务

# rc-update add dbus

要在不重启的情况下使用该服务,您需要手动启动它

# rc-service dbus start

注意: 这仅启动系统 dbus。dbus 会话是为每个用户单独启动的。

D-Bus 会话

您可以像这样启动一个 dbus 会话:dbus-run-session -- sh(将 sh 替换为您的 shell 或窗口管理器),或者 export $(dbus-launch)

D-Bus 将环境变量 $DBUS_SESSION_BUS_ADDRESS 传递给其子进程。在终端中运行 dbus-launch 意味着其他正在运行的进程将无法找到此 D-Bus 的套接字。

如果 $DBUS_SESSION_BUS_ADDRESS 未定义,许多应用程序将尝试使用标准路径

$XDG_RUNTIME_DIR/bus

像这样运行 D-Bus 应该适用于许多应用程序

dbus-daemon --nofork --address unix:path=$XDG_RUNTIME_DIR/bus --session


对于那些在没有 $DBUS_SESSION_BUS_ADDRESS 的情况下无法工作的应用程序,您可以将以下变通脚本添加到您的程序前面,以避免启动多个用户 dbus 会话

#!/bin/sh
if [ ! -e "/tmp/dbus-$USER-env" ]; then
       echo "Creating new dbus session on /tmp/dbus-$USER-env"
       export $(dbus-launch)
       echo "${DBUS_SESSION_BUS_ADDRESS}" > /tmp/dbus-$USER-env
       echo "Dbus session address is: ${DBUS_SESSION_BUS_ADDRESS}"
else
       echo "Using dbus session address from /tmp/dbus-$USER-env"
       export DBUS_SESSION_BUS_ADDRESS="$(cat /tmp/dbus-$USER-env)"
       echo "Dbus session address is: ${DBUS_SESSION_BUS_ADDRESS}"
fi
if [ -n "$1" ]; then
       $@
fi

参见