オーディオを再生する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/の起動スクリプトを使用してこの問題を解決しました。ログイン時に実行されるシェルスクリプトはどのように作成しますか?