PC speaker
PC speaker (beeper) is a built-in loudspeaker in most personal computers since the first IBM PC. This speaker is not capable of high quality playback and merely serves as a simple means of auditory feedback in the form of beeps. Some software, e.g. web browsers, editors and terminals, may produce beeps which may or may not be desired by the user. This article serves as a guide for configuring and/or disabling the speaker entirely. For situations where no sound card or speakers are available and a simple audio notification is desired, see #Beep.
Mechanism
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 power-on self-test (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.
Disabling the PC speaker
Turning off a particular instance of a sound, while leaving the others operational, is possible if and only if one can identify which portion of the environment generates the particular sound. This allows customizing the selection of sounds. Please feel free to add any configurations and settings to this wiki page that may be useful for other users.
Physically
By removing the PC speaker the system will not be able to produce beeps. This can be achieved by physically removing the unit from the motherboard (if possible). Some manufacturers may provide a jumper header to switch it off.
Globally
The PC speaker can be disabled by unloading the pcspkr
and snd_pcsp
kernel modules:
snd_pcsp
module is a Linux kernel driver for the PC speaker which allows it to act like a primitive sound card to produce full PCM sound. It appears as an ALSA device, and also replaces the pcspkr
driver for beeps. This module does not exist in the official Arch Linux kernels (unless you explicitly choose to install it, see snd-pcsp-dkmsAUR), but certain custom kernels include it by default.# rmmod pcspkr # rmmod snd_pcsp
Blacklisting the pcspkr
and snd_pcsp
modules will prevent udev from loading them at boot. Create the file:
/etc/modprobe.d/nobeep.conf
blacklist pcspkr blacklist snd_pcsp
Blacklisting it on the kernel command line is yet another way. Simply add module_blacklist=pcspkr,snd_pcsp
to your boot loader kernel line.
Console
You can add this command in /etc/profile
or a dedicated file like /etc/profile.d/disable-beep.sh
, see setterm(1) for more information:
setterm -blength 0
Another way is to uncomment or add this line in /etc/inputrc
or ~/.inputrc
:
set bell-style none
Less pager
To disable PC speaker in less pager, you can launch it with less -q
to mute PC speaker for end of line events or less -Q
to mute it altogether. For man pages, launch man -P "less -Q"
or set the $MANPAGER
or $PAGER
environment variables.
Alternatively, you can add these lines to your shell configuration file:
alias less='less -Q' alias man='man -P "less -Q"'
Arch Linux ISO
If you want to disable the init tune on the Arch Linux ISO, you will need to repack the ISO. To do so, first install the libisoburn and mtools packages.
Extract the El Torito boot images and systemd-boot configuration (loader.conf
) from the ISO:
$ osirrox -indev archlinux-YYYY.MM.DD-x86_64.iso -extract_boot_images ./ -extract /loader/loader.conf loader.conf
Make loader.conf
writable and remove the beep
option from it:
$ chmod +w loader.conf $ sed '/^beep on/d' -i loader.conf
Add the modified loader.conf
to the El Torito UEFI boot image:
$ mcopy -D oO -i eltorito_img2_uefi.img loader.conf ::/loader/
Finally, repack the ISO using the modified boot image and loader.conf
:
$ 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
ALSA
For most sound cards the PC speaker is listed as an ALSA channel, named either PC Speaker, PC Beep, or Beep. To mute the speaker, either use alsamixer
or amixer
, for example:
$ amixer set 'PC Speaker' 0% mute
To unmute the channel, see Advanced Linux Sound Architecture#Unmuting the channels.
Cinnamon
Cinnamon seems to play a "water drop" sound. To disable it, set in gsettings(1):
$ gsettings set org.cinnamon.desktop.wm.preferences audible-bell false
GNOME
Using GSettings:
$ gsettings set org.gnome.desktop.wm.preferences audible-bell false
GTK
Append this line to ~/.gtkrc-2.0
:
gtk-error-bell = 0
Add the same line to the [Settings] section of $XDG_CONFIG_HOME/gtk-3.0/settings.ini
:
[Settings] gtk-error-bell = 0
This is documented in the Gnome Developer Handbook.
Plasma
Bell notification settings can be modified in System Settings > Accessibility Options > Bell.
PulseAudio
Play a sound instead of a PC speaker beep using PulseAudio.
Xorg
$ xset -b
You can add this command to a startup file such as /etc/xprofile
to make it permanent. See xprofile and xset(1) for more information.
Beep
Beep is an advanced PC speaker beeping program. It is useful for situations where no sound card and/or speakers are available, and simple audio notification is desired.
Installation
You may also need to unmute the PC speaker in ALSA.
Run as non-root user
beep
uses /dev/input/by-path/platform-pcspkr-event-spkr
to control the PC speaker. To access it as a non-root user, one has to set the proper permissions. Create /etc/udev/rules.d/70-pcspkr-beep.rules
and add the following rule:
ACTION=="add", SUBSYSTEM=="input", ATTRS{name}=="PC Speaker", ENV{DEVNAME}!="", TAG+="uaccess"
That will allow any user, who is logged into the currently active virtual console session, to use the PC speaker.
Alternatively, a new user group may be created (e.g. beep
) with the corresponding rule to set the right permissions on the device file:
ACTION=="add", SUBSYSTEM=="input", ATTRS{name}=="PC Speaker", ENV{DEVNAME}!="", GROUP="beep", MODE="0620"
With that solution any user in the beep
group will be able to control the speaker.
To force reloading rules and device file to apply new user permission without a reboot, execute:
# udevadm control --reload && rmmod pcspkr && modprobe pcspkr
Tips and tricks
While many people are happy with the traditional beep sound, some may like to change its properties a bit. The following example plays slightly higher and shorter sound and repeats it two times.
# beep -f 5000 -l 50 -r 2
See also
- https://github.com/NaWer/beep and https://github.com/ShaneMcC/beeps — repositories collecting Bash scripts playing various music using #Beep