Visible bell mini-Howto
This document explains how to use termcap to configure a visual bell
on one's system and describes how to disable audible bells on demand.
This document is Copyright (c) 1997, Alessandro Rubini.
This document is distributed under the terms of the GNU Free Documentation License.
You should have received a copy along with it. If not, it is available from
The Linux console driver beeps the audible bell whenever a BEL char is
output (ASCII code 7). Though this is a right choice for the default
behaviour, many users don't like their computer to beep. This
mini-Howto is meant to explain how to tell applications not to output
the BEL code. It also explain how to instruct the kernel and the X
Window System to avoid beeping when a BEL is output. Note that most of
this document refers to the text console, as configuring the X server
is an easy catch-all for any user who works in a graphic environment.
In my opinion the best way to face a fussy computer is fixing the
hardware, and my own computer doesn't even carry a loudspeaker.
Speakerectomy is by far the most brilliant solution to the audible bell
problem. As its name implies, it consists in removing the beeps by removing
the beeper. The operation is straightforward and you don't
even need any anesthetic, but if you want there's room for refinement.
PC's are usually equipped with a silly switch to lower CPU clock. The
switch is never used when you work in a multitasking environment, as
you don't even need to slow the computer down to run games based on
software loops. Unfortunately we can't use the switch to increase
processor speed, but we can use it to enable/disable the
loudspeaker. Sometimes the speaker is useful even if you enjoy a
silent number cruncher, for example to signal the end of a lenghty
compilation. To modify the switch functionality, just detatch it from
the main board and connect its wires in series with the
Owners of laptop boxes, unfortunately, don't have easy access to the
loudspeaker, and neither they have a spare switch to turn to a
different task. The preferred solution for such users is configuring
their software to avoid beeping, as described below.
As of Linux 1.3.43, Martin Mares added the ability to configure the
pitch and duration of the beep, by modifying
console can be configured to feature a different duration and/or pitch
of the bell sound; the task is accomplished by using escape sequences
to the console device. You can configure your own
~/.login file to select a different beep sound associated
to each console (or no beep at all, if needed).
The escape sequences work as follow:
] selects the bell frequency in Hertz. The value
should be in the range 21-32766, otherwise the result is undefined.
If the `xx' argument is missing, the default value (750Hz) will apply,
as in `ESC-
] selects the bell duration, in milli-seconds.
If you specify more than 2 seconds, the default applies (125ms). Once
again, if the `xx' argument is missing (ESC-
) the default value
will be used.
To select, for example, a 50Hz pitch for one-second duration, you can
echo -e "\\33[10;50]\\33[11;1000]"" with
bash (where "-e"
means `understand Escape sequences'. If you use
tcsh the same
command spells "
Although I don't know of any version of the
setterm command that
supports such configuration, a future version of the command might
well support a command-line option to configure the bell sound.
If you run Linux-1.3.43 or newer, you may be satisfied with the escape
sequences and avoid reading further. If you run an older kernel, or if
you want the visual bell, you'll enjoy the rest of this document.
/etc/termcap is a text file that lists the
capabilities. Several applications use the
termcap information to move the cursor around the screen and do
other screen-oriented tasks.
vi and all
curses-based applications use the
The database describes several terminal types. The
TERM environment variable selects the right behaviour
at run-time, by naming a
termcap entry to be used by
Within the database, each capability of the terminal appears as a
two-letter code and a representation of the actual escape sequence
used to get the desired effect. The separator character between
different capabilities is the colon (":"). As an example, the audible
bell, with code "bl", usually appears as "
bl=^G". This sequence
tells that the bell sound is obtained by printing the control-G
character, the ASCII BEL.
In addition to the
bl capability, the
vb capability is
recognized. It is used to represent the "visible bell".
usually missing in the
linux entry of the
Most modern applications and libraries use the
termcap. This database uses one file per terminal-type
and lives in
/usr/lib/terminfo; to avoid using huge
directories, the description of each terminal type is stored in a
directory named after its first letter; the
/usr/lib/terminfo/l/linux. To build a
terminfo entry you'll ``compile'' the
refer to the
tic program and its manual page.
You can add the entry for the
vb capability in your own termcap
file, if it doesn't already define one. Dennis Henriksen
(email@example.com) suggested to insert the following line in the
termcap entry for
linux (note that the entry is called
console in old distributions):
The trailing backslash is used to escape the newline in the database.
Dennis' code does the following (his own words):
- Save the cursor position (uust a safety precaution).
- Change the background color several times between normal and reverse.
- Restore the cursor position.
If you want to force the visible bell on your console you can use the
bl" entry in
termcap and define it with the same string
suggested for "
vb" above. This approach is handy if you don't
want to customize each application (which is described below, anyway).
I use this option on all the machines where I can run Linux and I
can't detach the speaker.
This is an incomplete list of applications that can be instrued
to use the
vb entry for the current terminal type (using either
termcap information or the
- The X server: use the "
xset b" command to select
the bell's behaviour. The command takes three numeric
arguments: volume, pitch and duration. "
xset -b" disables
the bell altogether. Configuring the X server affects all
the applications running on the display.
xterm: xterm can convert each bell to either a visible or
audible signal. If you use the audible bell, the settings of
xset" will apply. The bell in
xterm defualts to be
audible, but you can use the "
-vb" command line option
and the "
xterm*visualBell: true" resource to turn it to a
visible flash. You can toggle visible/audible signaling at
run-time by using the menu invoked by
control--left-mouse-button. If you run X you most likely
won't need the following information.
tcsh (6.04 and later): "
set visiblebell". The
instruction can be placed in
.cshrc or can be issued
interactively. To reset the audible bell just "
visiblebell". To disable any notification issue use "
bash (any bash, as fas as I know): put "
visible" in your
~/.bashrc. Possible bell-style's
are also "none" or "audible".
readline, as well as other
based applications): put "
set prefer-visible-bell" in
elvis: put "
set flash" in
~/.exrc or tell "
:set flash" interactively (note
the colon). To disable the visible bell use
emacs: put "
(setq visible-bell t)" in your
~/.emacs. It is disabled by "
less: use "
-q" on command line to use the visual bell,
-Q" to disable any reporting. Default options can be
put in your environment variable "
screen: issue the CtrlA-CtrlG command. It changes the
behaviour of all the virtual screens. Refer to the man page
under "CUSTOMIZATION" for setting the default.
The bad news is that not every application uses
terminfo. Most small programs feature 'backslash-a' (alarm)
characters in the C source code. The "alarm" code becomes a literal
ASCII BEL in the strings as stored in the executable binary. Real
application don't usually fall in this category, but be careful of C
newcomers who give you their own programs. Students of computer science
are the worst of all, granted.
The only way to make these programs silent applications is
spekearectomy, or using the escape sequences by Martin Mares.