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 腳本代碼庫