![以普通用户身份运行的 systemd 系统服务访问 ALSA](https://linux22.com/image/173383/%E4%BB%A5%E6%99%AE%E9%80%9A%E7%94%A8%E6%88%B7%E8%BA%AB%E4%BB%BD%E8%BF%90%E8%A1%8C%E7%9A%84%20systemd%20%E7%B3%BB%E7%BB%9F%E6%9C%8D%E5%8A%A1%E8%AE%BF%E9%97%AE%20ALSA.png)
我有一个同时使用网络和声音(ALSA)的服务,我正在尝试用它创建一个 systemd 系统服务。它作为用户服务工作,但我无法使其作为系统服务工作。
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
评论:
- 该守护进程未编译为支持pulseaudio,仅支持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
这让我意识到我应该作为用户服务运行。系统服务和用户会话的生命周期不匹配。