这种行为至少在 Ubuntu 13.10 和 Ubuntu 14.04 中有所体现。
我正在通过命令行中play
的软件包命令播放声音sox
。对于我这个登录 X 的用户来说,它运行良好。但是,当我以 root 身份执行 su 时,它就不再起作用了:
% play /usr/share/sounds/alsa/Front_Center.wav
play FAIL sox: Sorry, there is no default audio device configured
在我运行这个命令时,它运行正常。这是应该的吗?
这是我安装的 sox 包(即,我已经安装了 libsox-fmt-pulse):
ii libsox-fmt-base:amd64 amd64 Minimal set of SoX format libraries
ii libsox-fmt-mp3:amd64 amd64 SoX MP2 and MP3 format library
ii libsox-fmt-pulse:amd64 amd64 SoX PulseAudio format I/O library
ii libsox2:amd64 amd64 SoX library of audio effects and processing
ii sox amd64 Swiss army knife of sound processing
答案1
Ubuntu 中的 Pulseaudio 配置为使用每个用户会话。这意味着,虽然普通用户帐户可以轻松访问它,但正如您所体验到的,它并未配置为同时由其他用户(例如 root)使用。
这不是一个错误;根据 Ubuntu 附带的配置,这是正常行为。
“我花了很多时间在网上研究、测试各种设置并与 Pulseaudio 开发人员交流。最重要的是,在正常用户模式下运行 pulseaudio 将只允许 ConsoleKit 标记的活动会话访问音频硬件。”
来源:https://help.ubuntu.com/community/MultiseatX
其中有一些关于如何配置 Pulseaudio 作为系统范围实例运行而不是使用每个用户配置的信息,但这并非没有缺点。
来自 pulseaudio 手册页:
--system
[=BOOL] 作为系统范围实例运行,而不是每个用户运行。请注意,这会禁用 PulseAudio 的某些功能,除非系统不知道本地用户(例如是瘦客户端),否则通常不建议这样做。此功能需要特殊配置和专用 UNIX 用户设置。强烈建议将其与 --disallow-module-loading 结合使用(见下文)。
您最好首先考虑一下为什么要让 root 播放音频,并确定没有更好的方法来完成您要做的事情。如果您必须允许多个用户同时访问 pulseaudio,那么这就是您要考虑的路线。