私はRaspberry PIのGPIOを利用するPythonスクリプトを作成しているので、/dev/memと/dev/gpiomemに対する正しい権限を取得し、GPIOにアクセスするにはsudoに昇格したスクリプトを実行する必要があります。
しかし、このスクリプトでサウンドも再生したいので、os.system(cmd)
Pythonがシェルコマンドを実行できるようにする方法を使用しています。
私はこの方法を使用してwavファイルをaplayにロードします。
Pythonの部分:
defaultUser = 'pi' #the user to run the command as
cmd = 'sudo -H -u %s bash -c \'aplay sounds/%s &\'' % (defaultUser, filename)
os.system(cmd) #now run the command as if it were typed into the shell
上記のコマンドはデフォルトユーザーとしてコマンドを実行しようとしましたが、これは私が直接alsaを使用したときにうまくいきました。しかし、電源を入れた後、DACで私はパン/クラック音のためにパルスオーディオに切り替え、アイドル状態のモジュールを無効にする必要がありました。
これにより上記の問題が発生し、root ユーザーから音を鳴らすことができなくなります。
デフォルトのユーザーとしてaplayを起動しようとして、シェルで次のコマンドを実行してみました(しかし実際には音はまったく再生されませんでした)。
$ sudo -H -u pi bash -c 'aplay sounds/beep.wav &'
$ Playing WAVE 'sounds/3tone.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono
そして
$ sudo -u pi aplay sounds/beep.wav
$ Playing WAVE 'sounds/beep.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono
どちらも優れた詳細な出力を生成しますが、オーディオはありません。
root以外のユーザー(piとも呼ばれます)で実行すると、音声が聞こえます。
root以外のユーザーにはpulseaudioまたはaplayが機能しますが、root startコマンドがデフォルトのユーザーとして実行されたときに機能しないのはなぜですか?
これはsudoを必要としますが、sudoによって問題が発生します。
ご案内いただきありがとうございます!
答え1
Pulseaudioは、ログインしているユーザーにのみ機能するように設計されています。
あなたも必要ですシステム全体にわたる Pulseaudioまたは、デフォルト以外のオプションのいずれかを有効にする必要があります。通信モジュールルートのため。