Arch-Linux

dbus 和 systemd/user 出現問題

  • April 16, 2019

我已經設置了 systemd,這樣 usingsystemctl start user@me將按我的預期啟動我的使用者服務,但我的 dbus 一個不會去(我需要 PulseAudio)。

有什麼方法可以檢查 dbus 或 systemd 以找出我做錯了什麼?

在這一點上,我對嘗試的事情沒有想法。請讓我知道我是否可以提供其他任何可能相關的資訊。


附加資訊/解決方案嘗試

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

啟動使用者 systemd through# 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 的範例使用者服務。

如果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

引用自:https://unix.stackexchange.com/questions/75984