aplayをrootとして実行することはできません!

aplayをrootとして実行することはできません!

ルートになる必要はありませんが、aplayそれが私にぶつかり、なぜ動作しないのか疑問に思います。

# aplay /home/bibek/apert.wav
XDG_RUNTIME_DIR (/run/user/1000) is not owned by us (uid 0), but by
uid 1000! (This could e g happen if you try to connect to a non-root
PulseAudio as a root user, over the native protocol. Don't do that.) 
ALSA lib pcm_dmix.c:1024:(snd_pcm_dmix_open) unable to open slave
aplay: main:722: audio open error: No such file or directory

私はそれが私にかなり多くの詳細を与えることがわかりますが、まだ理解していません。

答え1

ルートシェルはどこから来たのですかsu?環境変数は$XDG_RUNTIME_DIRユーザーシェルから継承されます。export XDG_RUNTIME_DIR=""以前に実行してaplay消去するか、sudo -i代わりに使用してsuクリーンな環境を得ることができます。

答え2

エラーメッセージが示すように、元のユーザーが接続を要求しなかった場合、接続は拒否されます。 rootとしてsudoそのユーザーとしてコマンドを実行できますが、XDG_RUNTIME_DIRユーザーの1人である必要があります。

sudo -u '#1000' XDG_RUNTIME_DIR=/run/user/1000 aplay ...

元のユーザーIDを確認してくださいid -u。 1000ではないかもしれません。

答え3

技術的に可能ではないということではありませんが、通常は互いに通信し、root で実行しないアプリケーションで使用できる組み込みのセキュリティ対策です。

このアクションがなければ、「相手」に対する意図しない制御を得るために、いくつかの(まだ見つからない)バグが原因でプロトコルが乱用(またはハイジャック)されないようにする必要があります。相手のプログラムにroot権限がある場合は影響が大きくなる可能性があるため、最初から無効にする方が簡単です。

関連情報