PC 扬声器
从第一台 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 扬声器移除后,系统就无法发出蜂鸣声了。可能的话,将蜂鸣器物理上从主板移除可以达成该目的。有些厂商会提供跳线来禁用蜂鸣器。
全局设置[编辑 | 编辑源代码]
可以通过移除 pcspkr
和 snd_pcsp
内核模块来完全禁用 PC 喇叭:
# rmmod pcspkr # rmmod snd_pcsp
将 pcspkr
和 snd_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 Speaker、PC Beep 或 Beep。使用 alsamixer
或 amixer
即可将喇叭静音,例如:
$ amixer set 'PC Speaker' 0% mute
要想取消静音,参见 ALSA#解除各声道的静音。
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。首先,安装 libisoburn包 和 mtools包。
从 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
Beep[编辑 | 编辑源代码]
用户可以在登录到虚拟控制台时发出短促的声音。详见 Wikipedia:bell character#usage。
Beep 是一个高级 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
相关阅读[编辑 | 编辑源代码]
- xset(1),setterm(1),bash(1)
- https://github.com/NaWer/beep 和 https://github.com/ShaneMcC/beeps - 使用 beep 播放各种音乐的 bash 脚本代码库