TL;DR:root 无权访问Master
ALSA 上的控件
我的问题
我无法使用键盘控制音量
我所做的诊断
journalctl -f
揭示错误amixer: Unable to find simple control 'Master', 0
amixer
如果我从终端运行它,效果很好
这让我相信这是一个权限问题
我的环境
- 我的 acpid 音量调低配置文件如下所示:
events=button/volumedown
action=amixer set Master
我双启动 Arch Linux 和 Windows。
我曾经使用 xfce,但根据我的心情卸载了它,转而使用 dwm/lxde。
我使用 PulseAudio 来支持蓝牙。
到目前为止我已经尝试过的
使用 doas(如 sudo)
- 完全相同的错误
journalctl -f
,除了前面有一行说root ran command amixer set Master 5- as vince from /
(我的用户名是 vince)
- 完全相同的错误
使用
pactl
- 同样的问题
我希望从解决方案中得到什么
它提供了对
Master
控件的root 访问权限我宁愿不依赖
sudo
ordoas
因为这并不能真正扩展到多个用户(不过我愿意将其用作临时解决方法)适用于控制台和
X
它不必适用于所有用户,但如果适用的话我更喜欢
(如果答案不能满足所有这些也没关系,我只想使用音量键)
答案1
我使用 PulseAudio 来支持蓝牙。
如果您运行 Pulseaudio,请使用 Pulseaudio API 进行音量设置(或通过pacmd
或编写脚本pactl
)。
Pulseaudio 为 ALSA 提供了一个兼容层,其中包括此“主”控件,但会映射到 Pulseaudio 音量设置。
另请阅读全系统Pulseaudio 与每用户 Pulseaudio。后者是默认设置,意味着与启动 Pulseaudio 的登录用户不同的任何用户都无法访问 Pulseaudio,其中包括 root。
所以你的问题不是 ALSA 问题:在 ALSA 下,只有你不会有通用的“主”控制(尽管大多数声卡确实有一个),并且仅在 ALSA 下,root 访问它是没有问题的。
答案2
我成功地解决了这个问题。正如我怀疑的那样,root
由于pulseaudio而无法访问我的用户的接收器。 @dirkt 的答案促使我寻找pulseaudio 的解决方案,这里突出显示了该解决方案:pactl 在用户空间中工作,而不是在 i3 上以 root 身份工作。
由于我正在使用doas
,所以我必须添加setenv {XDG_RUNTIME_DIR=/run/user/1000}
到doas.conf
.然后我编辑了 acpid 配置文件,如下所示:
event=button/volumedown
action=doas -u vince pactl set-sink-volume @DEFAULT_SINK@ -5%%
更好的解决方案可能是使用系统范围的pulseaudio,正如@dikrt的答案所建议的,但这是我迄今为止的解决方案