跳至內容
出自 Arch Linux 中文维基

從第一台 IBM PC 開始,大多數電腦都配備了內置揚聲器(或是蜂鳴器),其可以發出蜂鳴聲。該揚聲器並不具備高保真回放功能,僅能以蜂鳴形式發出音頻反饋信息。某些軟體(如瀏覽器,編輯器或終端)也可能會產生蜂鳴聲,該特徵不一定符合用戶需要。本文提供了配置或完全禁用蜂鳴器的一系列指南。

對於沒有音效卡或揚聲器,但需要簡單音頻提示的情況,請參考 #Beep

機制

電腦揚聲器通常是連接在主板前面板接頭上的一個物理裝置。有些廠商的主板根本不帶揚聲器,而有些主板可能會直接將揚聲器焊在主板上。筆記本電腦通常沒有物理 PC 揚聲器,但會將蜂鳴器連接到筆記本電腦的內部揚聲器。在某些情況下,蜂鳴器會通過音效卡的常規輸出(如揚聲器、耳機)發出聲音,其音量往往會出乎意料地大。

傳統上,開機時 BIOS 會在加電自檢過程中發出蜂鳴聲。較新的主板型號省略了開機自檢蜂鳴,轉而立即啟動到作業系統。通常 BIOS 允許切換開機自檢蜂鳴,但無法配置完全關閉電腦揚聲器。

一旦系統啟動進入 Linux 並加載了 pcspkr 內核模塊後,就可以在環境中使用電腦揚聲器,由用戶手動調用並在一定程度上進行配置。由於 PC 揚聲器由 CPU 直接控制,而且只能發出嘟嘟聲,因此 PC 揚聲器不能被用於播放音頻文件。如果確實需要,卸載 pcspkr安裝 snd-pcsp-dkmsAUR 可提供基本的音頻輸出。

禁用 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

相關閱讀