從第一台 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 腳本代碼庫