无法以 root 身份运行 aplay!

无法以 root 身份运行 aplay!

并不是说我需要aplay以root身份,但它遇到了我,我想知道为什么它不应该工作。

# 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

你的 root shell 是从哪里来su的?环境变量$XDG_RUNTIME_DIR是从您的用户 shell 继承的。您可以export XDG_RUNTIME_DIR=""在之前运行aplay以清除它,也可以使用sudo -i而不是su获得一个干净的环境。

答案2

如错误消息所示,如果不是原始用户请求连接,则连接将被拒绝。作为 root,您可以以sudo该用户身份发出命令,但XDG_RUNTIME_DIR也需要是该用户之一,

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

检查原始用户ID id -u,可能不是1000。

答案3

这并不是说技术上不可行,而是一种内置的安全措施,通常在相互通信的应用程序中可用,并且不应以 root 身份运行。

如果没有这样的措施,您将必须确保协议不会由于某些(尚未发现的)错误而被滥用(或劫持)以获得对“另一方”的非预期控制。由于如果另一方的程序具有 root 权限,其影响可能会更加严重,因此从一开始就禁止这种情况会更容易。

相关内容