我有一个在 Raspberry 3 上的 Raspbian OS 11 lite 上运行的服务,它应该为我播放音频。
[Unit]
Description=My script to monitor the shutdown button
After=multi-user.target
[Service]
ExecStart=/usr/bin/python /home/pi/Radio/Radio/main.py
User=root
Group=root
[Install]
WantedBy=multi-user.target
该服务正在运行并通过读取用户的输入与用户交互。但一旦它应该播放音乐,我总是收到以下错误:
Oct 10 18:22:57 raspberrypiradio python[4180]: [755aa250] main audio output error: Audio output failed
Oct 10 18:22:57 raspberrypiradio python[4180]: [755aa250] main audio output error: The audio device "default" could not be used:
Oct 10 18:22:57 raspberrypiradio python[4180]: Connection refused.
Oct 10 18:22:57 raspberrypiradio python[4180]: [755aa250] main audio output error: module not functional
Oct 10 18:22:57 raspberrypiradio python[4180]: [7312c1f0] main decoder error: failed to create audio output
Oct 10 18:24:00 raspberrypiradio python[4180]: [75591ca8] vlcpulse audio output error: PulseAudio server connection failure: Access denied
Oct 10 18:24:01 raspberrypiradio python[4180]: [75588cb0] vlcpulse audio output error: PulseAudio server connection failure: Access denied
Oct 10 18:24:01 raspberrypiradio python[4180]: [73d01830] http stream error: cannot resolve stream.rockantenne.de: System error
Oct 10 18:24:01 raspberrypiradio python[4180]: [73d01830] access stream error: HTTP connection failure
Oct 10 18:24:01 raspberrypiradio python[4180]: [73d01830] http stream error: cannot connect to stream.rockantenne.de:80
当我直接通过终端播放main.py
文件时,一切正常。我正在通过 python 文件播放声音虚拟LC。
我正在使用一项服务,因为我希望它main.py
一直运行。特别是重新启动系统后。
答案1
尝试将其添加到服务文件的服务标签下。
Environment=XDG_RUNTIME_DIR=/run/user/1000
当然,您必须更改目录以匹配当前用户。你可以运行
printenv | grep -i 'xdg_runtime_dir'
以确定将哪些内容复制到服务文件中。
这应该可以修复 vlcpulse 服务器连接被拒绝的故障,但看起来您也有一个 DNS 错误,无法解析远程流。这是一个不同的问题,需要更多信息才能解决。
答案2
我发现问题是,服务在用户定义的服务(例如 alsa)之前开始运行。这意味着,我的服务尝试使用 alsa,但它还不可用。我用 /profiles.d/ 中的启动脚本解决了这个问题,如本文所述:如何编写登录时执行的 shell 脚本?