PC 扬声器

来自 Arch Linux 中文维基
(重定向自PC speaker

从第一台 IBM PC 开始,大多数电脑都配备了内置扬声器(或是蜂鸣器),其可以发出蜂鸣声。该扬声器并不具备高保真回放功能,仅能以蜂鸣形式发出音频反馈信息。某些软件(如浏览器,编辑器或终端)也可能会产生蜂鸣声,该特征不一定符合用户需要。本文提供了配置或完全禁用蜂鸣器的一系列指南。

对于没有声卡或扬声器,但需要简单音频提示的情况,请参考 #Beep

机制[编辑 | 编辑源代码]

The PC speaker is typically a physical unit connected on the front connections header of the motherboard. Some motherboard manufacturers do not ship their motherboards with a PC speaker at all, whereas others may have the PC speaker soldered directly onto the surface. Laptops typically have no physical PC speaker but have the beeper routed to the laptop's internal speakers. In some cases, the beeper is heard on the regular output (i.e. speakers, headphones) of the soundcard, which tends to be unexpectedly loud.

Upon boot the BIOS will traditionally generate a beep during POST. More recent motherboard models omit the POST beep in favor of rapidly booting into the OS. The BIOS typically allows for toggling the POST beeps but it cannot configure the PC speaker to be turned off completely.

Once the system has booted into Linux and the pcspkr kernel module is loaded, the PC speaker can be used by the environment, be invoked manually by the user, and be configured to some extent. Because the PC speaker is controlled directly by the CPU, along with the fact that they are built for beeping only, PC speakers cannot be used for playing back audio files. If this is really desired, unloading pcspkr and installing snd-pcsp-dkmsAUR provides a rudimentary audio output.

禁用 PC 喇叭[编辑 | 编辑源代码]

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

物理禁用[编辑 | 编辑源代码]

将 PC 扬声器移除后,系统就无法发出蜂鸣声了。可能的话,将蜂鸣器物理上从主板移除可以达成该目的。有些厂商会提供跳线来禁用蜂鸣器。

警告: 不建议移除 PC 扬声器,它在系统启动异常时会发出特定规律的声音,在主板说明书上可查到相应故障并解决。建议方式为在 BIOS 中禁用上电蜂鸣,并按照下文操作将蜂鸣器加入黑名单。如果你确定要物理移除扬声器,强烈建议将其保留以防万一。

全局设置[编辑 | 编辑源代码]

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

注意: 该操作不会禁用整个音频系统,只会禁用 PC 扬声器
# rmmod pcspkr
# rmmod snd_pcsp

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

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

还有一种方法是将其加入内核命令行黑名单。只需把 module_blacklist=pcspkr,snd_pcsp 加入引导加载器的内核行即可。

控制台[编辑 | 编辑源代码]

可将以下命令添加到 /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

将这条命令加入 /etc/xprofile 等启动文件即可固化设置。更多信息参见 xprofile

ALSA[编辑 | 编辑源代码]

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

$ amixer set 'PC Speaker' 0% mute

要想取消静音,参见 ALSA#解除各声道的静音

提示:如果你在使用 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

gtk-error-bell = 0

以及 $XDG_CONFIG_HOME/gtk-3.0/settings.ini 的 [Settings] 部分:

[Settings]
gtk-error-bell = 0

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

PulseAudio[编辑 | 编辑源代码]

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

Arch Linux ISO[编辑 | 编辑源代码]

如果你想禁用 Arch Linux ISO 的初始化声音,需要重新打包 ISO。首先,安装 libisoburnmtools

从 ISO 中提取 El Torito 启动映像和 systemd-boot 配置文件(loader.conf):

$ osirrox -indev archlinux-YYYY.MM.DD-x86_64.iso -extract_boot_images ./ -extract /loader/loader.conf loader.conf

loader.conf 设为可读写,并移除 beep 选项:

$ chmod +w loader.conf
$ sed '/^beep on/d' -i loader.conf

将修改后的 loader.conf 添加到 El Torito UEFI 启动映像:

$ mcopy -D oO -i eltorito_img2_uefi.img loader.conf ::/loader/

最后,使用修改后的启动映像和 loader.conf 重新打包 ISO:

$ xorriso -indev archlinux-YYYY.MM.DD-x86_64.iso \
	-outdev archlinux-YYYY.MM.DD-x86_64-silent.iso \
	-map loader.conf /loader/loader.conf \
	-boot_image any replay \
	-append_partition 2 0xef eltorito_img2_uefi.img
注意: 该操作只会禁用初始化声音,启动后还是有可能会发出蜂鸣声。要在启动后禁用 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

相关阅读[编辑 | 编辑源代码]