dbus 和 systemd/user 的问题

9 users arch-linux d-bus systemd

我已经设置了 systemd 以便使用systemctl 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}]
Run Code Online (Sandbox Code Playgroud)

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

??bash???pstree
?      ??systemd???2*[dbus-daemon]
?                ??dbus-launch <<< X only
?                ??gconfd-2    <<< X only
?                ??mpd???5*[{mpd}]
?                ??pulseaudio???gconf-helper
?                             ??2*[{pulseaudio}]
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

相关链接:

  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 中的示例用户服务。

Dwi*_*cer 4

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

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

export DBUS_SESSION_BUS_ADDRESS=""
Run Code Online (Sandbox Code Playgroud)

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