我刚刚升级到 Ubuntu Server 20.04.1 LTS,到目前为止,只出现了一个问题:以用户身份运行时,命令beep
返回
哔声:错误:无法打开任何设备。
运行sudo beep
不起作用,正如预期的那样。经过一番研究,我发现beep
系统上不存在任何组,正如手册页所预期的那样。我尝试重新安装和重新配置,但没有成功。
更奇怪的是,beep
在通过 启动时可以正常工作rc.local
;然而,在某个时候,它会停止工作并返回错误,从而破坏我的rc.local
例程。此外,此命令可以正常工作:
sudo env -u SUDO_GID -u SUDO_COMMAND -u SUDO_USER -u SUDO_UID beep
澄清一下:我正在运行一个无头式家庭服务器,该服务器未连接任何扬声器;简单的发声扬声器用于在启动期间以及发生需要干预的错误时提供简单反馈。我的设置在 Ubuntu Server 18.04 LTS 下运行良好。
答案1
将我的用户添加到组input
对我有用,即:
sudo usermod -aG input $USER
直到您再次登录,更改才可见(在 Ubuntu 上,我必须重新启动,而不仅仅是注销并重新登录,然后新 shell 才会在输出中显示新组groups
。)要在一个 shell 中查看更改,请打开一个新的登录 shell:
su $USER -
答案2
文档中建议的一个解决方案权限.md是创建一个名为“beep”的系统组,然后使用 ACL 允许该组的成员对该设备进行写访问。
$ addgroup --system beep
然后为 udev 创建规则,例如
/lib/udev/rules.d/90-pcspkr-beep.rules:
# Add write access to the PC speaker for the "beep" group
ACTION=="add", SUBSYSTEM=="input", ATTRS{name}=="PC Speaker", ENV{DEVNAME}!="", RUN+="/usr/bin/setfacl -m g:beep:w '$env{DEVNAME}'"
然后您应该能够将用户添加到该组,并且他们可以写信给演讲者:
$ usermod user_name -a -G beep
当然,上述操作只有在您启用 ACL 的情况下才有效。如果您不能或不愿意这样做,他们对 udev 规则有不同的建议:
# Give write access to the PC speaker only to the "beep" group
ACTION=="add", SUBSYSTEM=="input", ATTRS{name}=="PC Speaker", ENV{DEVNAME}!="", GROUP="beep", MODE="0620"
但这会使扬声器不再被默认系统组“输入”写入 - 由于此方法是在文档中建议的,因此不利影响可能可以忽略不计。
答案3
糟糕的解决方案:
我很确定这是一个权限问题,但我不知道如何解决它。我尝试udev
根据ArchLinux 维基,但这样做没用。
然后,我更改了设备本身的权限:
sudo chmod 777 /dev/input/by-path/platform-pcspkr-event-spkr
虽然这确实有效,但让任何人都可以写入设备无疑是一个坏主意。
答案4
几年来,工作beep
一直很痛苦。我最终得到了这行代码,要么作为别名,~/.bash_aliases
要么在名为的脚本中……好吧beep
。
/usr/bin/aplay /usr/share/sounds/sound-icons/prompt.wav 2>/dev/null &
随意选择您的命令行播放器和声音。