일반 사용자로 실행되는 systemd 시스템 서비스에서 ALSA에 액세스합니다.

일반 사용자로 실행되는 systemd 시스템 서비스에서 ALSA에 액세스합니다.

네트워킹과 사운드(ALSA)를 모두 사용하는 서비스가 있고 이를 사용하여 시스템 시스템 서비스를 만들려고 합니다. 사용자 서비스로 작동하지만 시스템 서비스로 작동하도록 할 수는 없습니다.

dbus-run-session[16623]: ALSA lib pulse.c:242:(pulse_connect) PulseAudio: Unable to connect:
dbus-run-session[16623]: Alsa error PCM open ALSA function 'snd_pcm_open' failed with error 'ECONNREFUSED: Connection refused'
dbus-run-session[16623]: Could not start audio: Alsa error: PCM open failed

이것이 내가 지금까지 가지고 있는 것입니다. 이것은 템플릿 셀이고 매개변수는 내 사용자 이름입니다. 샌드박스 설정을 주석 처리합니다.

# /etc/systemd/system/[email protected]
[Unit]
Description=A spotify playing daemon
Documentation=https://github.com/Spotifyd/spotifyd
Wants=sound.target
After=sound.target
Wants=network-online.target
After=network-online.target

[Service]
User=%i

Type=exec
ExecStart=/usr/bin/dbus-run-session /usr/local/bin/spotifyd --no-daemon

Restart=always
RestartSec=12

ProtectSystem=full
#ProtectSystem=strict

#ProtectHome=tmpfs
#TemporaryFileSystem=/home/%i
#BindPaths=/home/%i/.config/pulse
#BindReadOnlyPaths=/home/%i/.local/share/

#ProtectHome=read-only
#ReadWritePaths=/home/%i/.config/pulse
#ReadOnlyPaths=/home/%i/.local/share/

#PrivateTmp=true
#NoNewPrivileges=true

[Install]
WantedBy=default.target

논평:

  • 이 데몬은 펄스 오디오를 지원하도록 컴파일되지 않았으며 ALSA만 지원합니다. 이것이 중요한지 확실하지 않습니다.
  • dbus-run-session그렇지 않으면 d-bus 이름을 등록하기 때문에 시작 시 실패합니다.
  • 온라인인 네트워크에 의존할 수 있기 때문에 사용자 서비스보다는 시스템 서비스를 선호합니다.
  • 내 사용자와 함께 서비스를 실행하고 있지만 d-bus/MPRIS가 작동하는 한 새 사용자가 될 수도 있습니다.
  • PulseAudio/ALSA를 시스템 서비스로 실행하고 싶지 않습니다.
  • 그룹=오디오가 작동하지 않습니다

그럼 오디오 설정에 무슨 문제가 있는 걸까요? 시스템 서비스를 일반 계정으로 전환하면 사용자 서비스와 동일한 결과가 나오길 바랍니다.

답변1

시스템 서비스를 일반 계정으로 전환하면 사용자 서비스와 동일한 결과가 나오길 바랍니다.

공유되지 않는 한 가지가 있지만 환경은 그렇습니다.

이는 ALSA에 성공적으로 액세스하는 데 필요합니다. (원천:https://askubuntu.com/questions/70560/why-am-i-getting-this-connection-to-pulseaudio-failed-error)

Environment=XDG_RUNTIME_DIR=/run/user/1000

이를 통해 사용자 서비스로 실행해야 한다는 사실을 깨달았습니다. 시스템 서비스와 사용자 세션의 수명주기가 일치하지 않습니다.

관련 정보