D-Bus
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