基本上,在 sudo 会话中,即使模拟另一个非 root 用户(sudo -u 用户名命令)也没有声音。
在 sudo 会话内部,声音似乎被禁用。
我需要声音,如何解决?
答案1
我之前已经通过在“系统模式”下运行 pulseaudio 解决了这个问题,在这种情况下,所有用户都可以使用它,而不仅仅是运行桌面的用户。您可以在此处阅读更多相关信息:
http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/SystemWide
请注意,有一些不这样做的充分理由:
http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/WhatIsWrongWithSystemWide
不幸的是,我不知道还有其他方法可以解决运行 pulseaudio 的系统上的问题。
答案2
尝试:
sudo usermod -G audio -a username
然后执行sudo login username
并检查运行时是否列出了音频groups
。这应该可以解决问题。
答案3
我通过在 pulseaudio 偏好设置中启用“网络服务器”解决了这个问题。
要获取 pulseaudio 首选项管理器,请打开终端并输入
sudo apt-get install paprefs
然后以通常的登录方式运行它(即不要使用来运行它sudo -u
),输入
paprefs
在网络服务器选项卡上,单击“启用对本地声音设备的网络访问”,保留其他所有设置不变。
图像:https://i.stack.imgur.com/Ua0qg.png
关闭 PulseAudio 偏好设置窗口,您就大功告成了。您只需执行一次此操作。
据我了解,这种方法避免了在“系统模式”下运行 pulseaudio 的一些安全问题,但是,例如,您运行的程序sudo -u
仍将共享您的音量级别。
由于我们没有勾选“允许局域网上的其他机器发现本地声音设备”或“不需要身份验证”,因此您的声音设备实际上不可供网络上的其他计算机使用。此设置仅允许您的计算机连接到自身,您根本不需要连接到网络。
注意:如果您正在运行透明代理(如果您不知道,您可能没有),您必须确保环回 TCP 连接未在 NAT 级别重定向。要直接向 iptables 类型添加例外
sudo iptables -t nat -I OUTPUT -p tcp -o lo -j RETURN
如果您的代理在预路由链中重定向,则替换OUTPUT
为。PREROUTING
答案4
如果您使用“sux”而不是“sudo”,一切都应该可以正常工作。