PC 揚聲器 - Arch Linux 中文维基

跳至內容

# PC 揚聲器

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 PC speaker，最近一次同步於 2024-09-28，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

相關文章

- 內核模塊
- ALSA

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

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

## 機制

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

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

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

## 禁用 PC 喇叭

若且唯若你能夠識別出某個聲音是由環境的哪一部分生成的，就有可能關掉特定的一類聲音，而讓其他聲音繼續動作。這樣就可以自定義對聲音的選擇。歡迎將可能對其他用戶有用的配置與設置加入此wiki頁面。

### 物理禁用

將 PC 揚聲器移除後，系統就無法發出蜂鳴聲了。可能的話，將蜂鳴器物理上從主板移除可以達成該目的。有些廠商會提供跳線來禁用蜂鳴器。

警告：不建議移除 PC 揚聲器，它在系統啟動異常時會發出特定規律的聲音，在主板說明書上可查到相應故障並解決。建議方式為在 BIOS 中禁用上電蜂鳴，並按照下文操作將蜂鳴器加入黑名單。如果你確定要物理移除揚聲器，強烈建議將其保留以防萬一。

### 全局設置

可以通過移除 `pcspkr` 和 `snd_pcsp` 內核模塊來完全禁用 PC 喇叭：

注意：該操作不會禁用整個音頻系統，只會禁用 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#解除各聲道的靜音。

提示：如果你在使用 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。首先，安裝 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

注意：該操作只會禁用初始化聲音，啟動後還是有可能會發出蜂鳴聲。要在啟動後禁用 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

## 相關閱讀

- xset(1)，setterm(1)，bash(1)
- https://github.com/NaWer/beep 和 https://github.com/ShaneMcC/beeps - 使用 beep 播放各種音樂的 bash 腳本代碼庫

分類：​

- 聲音

PC 揚聲器
新增話題