systemctl start user@me
를 사용하면 예상대로 사용자 서비스가 시작되지만 dbus 서비스는 시작되지 않도록 systemd를 설정했습니다 (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/
.
$DISPLAY가 다른 서버를 사용하는 것과 같은 방식으로 dbus가 Xorg와 함께 사용되지 않는 경우 이 환경 변수를 설정하여 사용할 버스 세션을 dbus에 알릴 수 있습니다.
export DBUS_SESSION_BUS_ADDRESS=""
더 많은 정보를 원하시면 읽어주세요http://dbus.freedesktop.org/doc/dbus-launch.1.html
답변2
dbus와 함께 X를 사용하지 않는 경우,
이 환경 변수를 설정하여 dbus에 사용할 버스 세션을 알릴 수 있습니다.
export DBUS_SESSION_BUS_ADDRESS=
답변3
[email protected]
대신 사용해 보셨나요 [email protected]
? 처음에는 문제가 있었고 [email protected]
(정확히 어떤 문제인지 더 이상 알 수 없음) 전환한 후에는 문제가 해결되었습니다.
연결한 두 번째 저장소에 있습니다. 본 기기는 DISPLAY
변수를 로 설정합니다 :0
. 여러 모니터에서는 작동하지 않지만 하나의 모니터에서는 잘 작동합니다.