root无权访问Master控制

root无权访问Master控制

TL;DR:root 无权访问MasterALSA 上的控件

我的问题

我无法使用键盘控制音量

我所做的诊断

  • 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 访问权限

  • 我宁愿不依赖sudoordoas因为这并不能真正扩展到多个用户(不过我愿意将其用作临时解决方法)

  • 适用于控制台和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的答案所建议的,但这是我迄今为止的解决方案

相关内容