我已经设置了 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
相关链接:
- https://superuser.com/questions/476379/how-do-i-setup-a-systemd-service-to-be-started-by-a-non-root-user-as-a-user-daem
- https://github.com/sofar/user-session-units
- 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
。它不适用于多个显示器,但对我来说在一台显示器上工作得很好。