PC 扬声器
从第一台 IBM PC 开始,大多数电脑都配备了内置扬声器(或是蜂鸣器),其可以发出蜂鸣声。该扬声器并不具备高保真回放功能,仅能以蜂鸣形式发出音频反馈信息。某些软件(如浏览器,编辑器或终端)也可能会产生蜂鸣声,该特征不一定符合用户需要。本文提供了配置或完全禁用蜂鸣器的一系列指南。
对于没有声卡或扬声器,但需要简单音频提示的情况,请参考 #Beep。
机制[编辑 | 编辑源代码]
电脑扬声器通常是连接在主板前面板接头上的一个物理装置。有些厂商的主板根本不带扬声器,而有些主板可能会直接将扬声器焊在主板上。笔记本电脑通常没有物理 PC 扬声器,但会将蜂鸣器连接到笔记本电脑的内部扬声器。在某些情况下,蜂鸣器会通过声卡的常规输出(如扬声器、耳机)发出声音,其音量往往会出乎意料地大。
传统上,开机时 BIOS 会在加电自检过程中发出蜂鸣声。较新的主板型号省略了开机自检蜂鸣,转而立即启动到操作系统。通常 BIOS 允许切换开机自检蜂鸣,但无法配置完全关闭电脑扬声器。
一旦系统启动进入 Linux 并加载了 pcspkr
内核模块后,就可以在环境中使用电脑扬声器,由用户手动调用并在一定程度上进行配置。由于 PC 扬声器由 CPU 直接控制,而且只能发出嘟嘟声,因此 PC 扬声器不能被用于播放音频文件。如果确实需要,卸载 pcspkr
并 安装 snd-pcsp-dkmsAUR 可提供基本的音频输出。
禁用 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 脚本代码库