以普通用户身份运行的 systemd 系统服务访问 ALSA

以普通用户身份运行的 systemd 系统服务访问 ALSA

我有一个同时使用网络和声音(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

这让我意识到我应该作为用户服务运行。系统服务和用户会话的生命周期不匹配。

相关内容