PC 揚聲器

出自 Arch Linux 中文维基

從第一台 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

相關閱讀[編輯 | 編輯原始碼]