dbus 和 systemd/user 出现问题

dbus 和 systemd/user 出现问题

我已经设置了 systemd,以便 usingsystemctl start user@me将按照我的预期启动我的用户服务,但我的 dbus 服务不会启动(我需要 PulseAudio)。

有什么方法可以检查 dbus 或 systemd 以找出我做错了什么吗?

此时我已经没有尝试的想法了。如果我可以提供其他可能相关的信息,请告诉我。


附加信息/解决方案尝试

我正在使用 Arch Linux、systemd 204-1 和 dbus 1.6.10-1

通过启动用户 systemd# systemctl start user@me给了我这个:

├─systemd─┬─(sd-pam)
│         ├─mpd───5*[{mpd}]
│         └─pulseaudio─┬─gconf-helper
│                      └─2*[{pulseaudio}]

systemd --user &当我的用户生成时手动启动:

├─bash─┬─pstree
│      └─systemd─┬─2*[dbus-daemon]
│                ├─dbus-launch <<< X only
│                ├─gconfd-2    <<< X only
│                ├─mpd───5*[{mpd}]
│                └─pulseaudio─┬─gconf-helper
│                             └─2*[{pulseaudio}]

如果我不在 X 中,则会抛出以下错误,尽管我确实启用了我的用户 dbus.service:

Failed to open private bus connection: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
Failed to open private bus connection: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11

相关链接:

  1. https://superuser.com/questions/476379/how-do-i-setup-a-systemd-service-to-be-started-by-a-non-root-user-as-a-user-daem
  2. https://github.com/sofar/user-session-units
  3. https://github.com/grawity/systemd-user-units

前两个提到了 dbus 的问题,但在链接 2 中它说问题已在 dbus-1.6.9 中修复,所以我认为问题在于我的实现而不是这个错误。

我使用了链接 2 和 3 中的示例用户服务。

答案1

如果DBUS_SESSION_BUS_ADDRESS未为尝试使用 D-Bus 的进程设置该选项,则默认情况下该进程将尝试调用 dbus-launch,并选择--autolaunch启动新会话总线或在 X 显示器或文件中查找现有总线地址在~/.dbus/session-bus/

当 dbus 不与 Xorg 一起使用时,与 $DISPLAY 使用不同服务器的方式相同,您可以设置此环境变量以告诉 dbus 使用哪个总线会话:

export DBUS_SESSION_BUS_ADDRESS=""

欲了解更多信息,请阅读http://dbus.freedesktop.org/doc/dbus-launch.1.html

答案2

如果不将 X 与 dbus 一起使用,

您可以设置此环境变量来告诉 dbus 使用哪个总线会话:

export DBUS_SESSION_BUS_ADDRESS=

答案3

您是否尝试过使用[email protected]而不是[email protected].我一开始遇到了问题[email protected](不再知道到底是哪个),切换后它就工作了。

它位于您链接的第二个存储库中。该单元将DISPLAY变量设置为:0。它不适用于多个显示器,但对我来说在一台显示器上工作得很好。

相关内容