PC speaker (简体中文)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
翻译状态:本文是 PC_speaker翻译。上次翻译日期:2021-09-16。如果英文版本有所更改,则您可以帮助同步翻译。

无论用户是否想要,电脑似乎经常会不时发出蜂鸣声或其他声音。它们的来源多种多样,同样你也许可以设置它们是否以及何时发生。对于没有声卡或扬声器可用,同时希望有简单音频通知的情况,见#Beep

来自电脑的声音可以从机箱内置喇叭、扬声器或插入声卡的耳机(这种情况下噪音可能会出乎意料地大)听到。

注意: 这些声音是由BIOS、操作系统、桌面环境或各种软件程序导致。BIOS是一个特别烦人的问题,因为它内置于主板上的一个EPROM芯片中,用户对其仅有的直接控制就是通过开关电源。除非BIOS配置有你可以调整的设置,或者你打算尝试用适当的光源重新编程该芯片,你不太可能有办法对它作出改变。此处对由BIOS生成的蜂鸣声不作介绍,除了拔掉你电脑的机箱喇叭,这样任何这类声音就都听不见了。(风险自担)

禁用PC喇叭

当且仅当你能够识别出某个声音是由环境的哪一部分生成的,就有可能关掉特定的一类声音,而让其他声音继续动作。这样就可以自定义对声音的选择。欢迎将可能对其他用户有用的配置与设置加入此wiki页面。

全局设置

可以通过在内核模块移除 pcspkr 模块来完全禁用PC喇叭:

# rmmod pcspkr

pcspkr 模块加入黑名单的方法可以阻止 udev 在启动时加载它。创建文件:

/etc/modprobe.d/nobeep.conf
blacklist pcspkr

还有一种方法是将其加入内核命令行黑名单。只需把modprobe.blacklist=pcspkr加入引导加载器的内核行。

控制台

可将以下命令添加到 /etc/profile/etc/profile.d/disable-beep.sh 之类的单独文件:

setterm -blength 0

另一种方法是在 ~/.inputrc/etc/inputrc 中添加或取消注释以下命令:

set bell-style none

Less分页器

要想在 less 分页器中禁用PC喇叭,可以通过 less -q (在到达行尾时静音PC喇叭)或 less -Q (全部静音)启动它。对于手册页,运行 man -P "less -Q" 或设置 $MANPAGER$PAGER 环境变量

或者也可以将以下行加入你的 ~/.bashrc:

alias less='less -Q'
alias man='man -P "less -Q"'

Xorg

$ xset -b

将这条命令加入 ~/.xinitrc/etc/xprofile 等启动文件即可固化设置。更多信息见xprofile (简体中文)

ALSA

大部分声卡中PC喇叭都被列为一个ALSA通道,称为 PC SpeakerPC BeepBeep。使用 alsamixeramixer 即可对喇叭静音,例如:

$ amixer set 'PC Speaker' 0% mute

要想取消静音,见Advanced Linux Sound Architecture (简体中文)#解除各声道的静音

提示: 如果你在使用PulseAudio,而默认ALSA设备没有列出PC喇叭,请尝试选择声卡对应的设备——PulseAudio代理控制可能不会列出PC喇叭。

GNOME

使用GSettings:

$ gsettings set org.gnome.desktop.wm.preferences audible-bell false

KDE Plasma

响铃通知设置可在“系统设置”→“辅助功能”→“响铃”更改。

Cinnamon

Cinnamon 似乎会播放水滴声。要禁用它,设置 gsettings(1)

$ gsettings set org.cinnamon.desktop.wm.preferences audible-bell false

GTK

将以下行加入 .gtkrc-2.0,以及 $XDG_CONFIG_HOME/gtk-3.0/settings.ini 的[Settings]部分:

gtk-error-bell = 0

这在Gnome开发者手册中有记载。

PulseAudio

使用PulseAudio以播放声音取代PC喇叭蜂鸣。

Beep

用户可以在登录到虚拟控制台时发出短促的声音。详见Wikipedia:bell character#usage

Beep是一个高级PC喇叭蜂鸣程序。它可以用于没有声卡和/或扬声器可用,同时希望有简单音频通知的情况。

安装

安装 beep 软件包。

可能也需要在ALSA解除对PC喇叭的静音。

作为非root用户运行

beep 使用 /dev/input/by-path/platform-pcspkr-event-spkr 来控制PC喇叭。要作为非root用户访问它,必须设置适当的权限。创建 /etc/udev/rules.d/70-pcspkr-beep.rules 并添加以下规则:

ACTION=="add", SUBSYSTEM=="input", ATTRS{name}=="PC Speaker", ENV{DEVNAME}!="", TAG+="uaccess"

这会允许任何登录到当前活动虚拟控制台会话的用户使用PC喇叭。

或者可以设置一个新的用户组(如 beep)并设置相应规则,以对设备文件设置正确的权限:

ACTION=="add", SUBSYSTEM=="input", ATTRS{name}=="PC Speaker", ENV{DEVNAME}!="", GROUP="beep", MODE="0620"

使用这种方式, beep 组中的任何用户都能够控制喇叭。

执行以下命令强制重新载入规则与设备文件,从而无需重启即可应用新的用户权限:

$ udevadm control --reload && rmmod pcspkr && modprobe pcspkr

提示与技巧

很多人可能喜欢传统蜂鸣声,也有些人可能想要改变一下它的属性。下面的例子可以播放音调稍高,长度稍短的声音并重复两遍。

# beep -f 5000 -l 50 -r 2

相关阅读