<!doctype linuxdoc system>

<!-- Visual bell howto  -->

<article>

<!-- Title information -->

<title>Bip visuel mini-Howto (Visual bell mini-Howto)
<author>Alessandro Rubini, <tt/rubini@linux.it/ <newline>
Traduction Jean-Albert Ferrez, <tt/Jean-Albert.Ferrez@epfl.ch/
<date>v2.2, 11 Novembre 1997
<abstract>
Ce document explique comment utiliser termcap pour configurer un bip
visuel sur son système et comment désactiver à la demande le bip sonore.
</abstract>

<!-- Table of contents -->
<toc>

<!-- Begin the document -->

<sect>Introduction
<p>
La console Linux émet un bip sonore lorsqu'un caractère BEL (code ASCII 7)
est produit. Bien que ce soit un choix raisonnable dans la plupart des cas,
bien des utilisateurs n'aiment pas que leur ordinateur fasse du
bruit. Ce mini-howto est censé expliquer comment indiquer aux applications
de ne pas produire de caractère BEL. Il explique également comment faire en
sorte que le noyau et le serveur X Window ne sonnent pas en présence d'un
caractère BEL. Notez que la plupart de ce document concerne la console texte,
étant donné que la configuration du serveur X est triviale pour ceux qui
travaillent dans un environnement graphique.

A mon avis, la meilleure attitude à adopter face à un ordinateur bruyant
consiste à opérer au niveau du matériel, le mien n'a même pas de haut-parleur.

<sect>"Spekearectomy", ablation du haut-parleur
<p>
L'ablation du haut-parleur est de loin la
solution la plus brillante au problème du bip sonore. Comme son nom
l'indique, elle consiste à supprimer le bip à la source. L'opération est
simple, elle ne nécessite pas d'anesthésie.

Les PC sont habituellement équipés d'un bouton ridicule servant à réduire
la fréquence du CPU. Ce bouton n'est jamais utilisé dans un environnement
multitâche, puisque l'on n'a jamais besoin de ralentir la machine pour
utiliser des jeux basés sur des boucles de temporisation. Malheureusement,
on ne peut pas utiliser ce bouton pour augmenter la fréquence du CPU, mais
on peut l'utiliser pour activer/désactiver le haut-parleur. Parfois, ce
dernier est utile même si vous préférez un ordinateur silencieux, par exemple
pour signaler la fin d'une longue compilation. Pour modifier la fonction de
ce bouton, il suffit de le déconnecter de la carte-mère et de le brancher
en série avec le haut-parleur.

Cela dit, les possesseurs de portables n'ont pas accès au haut-parleur, pas
plus qu'ils ne disposent d'un bouton inutile à réassigner. La solution pour
ces utilisateurs réside dans la configuration de leurs logiciels, comme
indiqué ci-dessous.

<sect>Configuration du bip console par console
<p>
Depuis la version 1.3.43, Martin Mares a modifié <tt/console.c/, y ajoutant
la possibilité de configurer la hauteur et la durée du bip. Chaque console
peut être configurée pour avoir un bip de hauteur et/ou durée
différente. Ce but est atteint au moyen de séquences d'échappement
interprétées par le gestionnaire de la console. Vous pouvez configurer vos
fichiers <tt>&tilde;/.profile</tt> ou <tt>&tilde;/.login</tt> pour choisir un bip
particulier pour chaque console (ou, le cas échéant, pas de bip du tout).

Les séquences d'échappement fonctionnent comme suit&nbsp;:
<itemize>
<item>ESC-<tt/[10;/xx<tt/]/ sélectionne la hauteur du bip en Hertz. La
valeur doit être dans la plage 21-32766, sinon le résultat est indéterminé.
Si l'argument `xx' manque (ESC-<tt/[10]/), la valeur par défaut est 750 Hz.
<item>ESC-<tt/[11;/xx<tt/]/ sélectionne la durée du bip en millisecondes.
Au delà de 2 secondes, la valeur par défaut de 125 ms est appliquée. Cette
dernière est également utilisée si l'argument 'xx' manque.
</itemize>

Pour avoir par exemple un bip à 50Hz durant une seconde, faites
"<tt/echo -e "&bsol;&bsol;33[10;50]&bsol;&bsol;33[11;1000]"/" avec <tt/bash/ (le "-e"
signifie `digère les séquences d'échappement'. Avec <tt/tcsh/ la commande
devient "<tt/echo "&bsol;&bsol;033[10;50]&bsol;&bsol;033[11;1000]"/".

Bien que je ne connaisse aucune version de la commande <tt/setterm/ qui
supporte une telle configuration, il est possible qu'une version future
offre une option permettant de configurer le bip.

Si vous utilisez Linux-1.3.43 ou plus récent, vous pouvez vous contenter
des séquences d'échappement et interrompre votre lecture ici. Si votre noyau
est plus vieux, ou si vous désirez un bip visuel, vous aller aimer le reste
de ce document.

<sect>Concepts de base au sujet de Termcap et Terminfo
<p>
Le fichier <tt>/etc/termcap</tt> est un fichier texte contenant les
"<tt/term/inal <tt/cap/abilities" (capacités des terminaux,
N.d.T.). Plusieurs applications utilisent les informations de 
<tt/termcap/ pour déplacer le curseur sur l'écran ou d'autres actions en
relation avec ce dernier. <tt/tcsh/, <tt/bash/, <tt/vi/ et toutes les
applications basées sur <tt/curses/ utilisent la base de données
<tt/termcap/.

La base de données décrit plusieurs types de terminaux. La variable
d'environnement <tt/TERM/ sélectionne le comportement correct lors de
l'exécution en indiquant aux applications quelle entrée de <tt/termcap/
utiliser.

Dans la base de données, chaque capacité d'un terminal est représentée par
un code de deux lettres et une représentation de la séquence d'échappement
permettant d'obtenir l'effet désiré. Les deux-points ":" servent de
séparateur entre les différentes capacités. Par exemple, le bip sonore dont
le code est "bl" apparaît généralement sous la forme "<tt/bl=&circ;G/", ce
qui signifie que le bip est obtenu en "affichant" le caractère control-G,
correspondant au code ASCII BEL.

En plus de <tt/bl/, la capacité <tt/vb/ est reconnue. Elle est utilisée
pour représenter le "bip visible". <tt/vb/ est généralement absent de
l'entrée <tt/linux/ du fichier <tt>termcap</tt>.

La plupart des applications et librairies modernes utilisent la base de
données <tt/terminfo/ au lieu de <tt/termcap/. Cette base de données
utilise un fichier par type de terminal et est située dans
<tt>/usr/lib/terminfo</tt>; pour éviter de trop grands répertoires, les
descriptions de chaque type de terminal sont stockées dans un répertoire
nommé d'après la première lettre&nbsp;: ainsi, l'entrée <tt/linux/ se situe
dans <tt>/usr/lib/terminfo/l/linux</tt>. Pour construire une entrée
<tt/terminfo/ il faut "compiler" une description <tt/termcap/, voir le
programme <tt/tic/ et sa page de manuel.

<sect>Mise sur pied d'un bip visible
<p>
Vous pouvez ajouter une entrée pour la capacité <tt/vb/ dans votre fichier
<tt/termcap/, si ce n'est pas déjà fait. Dennis Henriksen
(duke@diku.dk) a suggéré la ligne suivante dans l'entrée <tt/linux/
(appelée <tt/console/ dans les anciennes distributions) du fichier
<tt/termcap/&nbsp;:

<tscreen><verb>
:vb=\E7\E[?5h\E[?5l\E[?5h\E[?5l\E[?5h\E[?5l\E[?5h\E[?5l\E8:\
</verb></tscreen>

Le backslash final sert à cacher le retour à la ligne dans la base.
Le code de Dennis fonctionne comme suit (selon ses propres mots)&nbsp;:
<itemize>
<item>Sauvegarde de la position du curseur (par précaution).
<item>Bascule du fond d'écran plusieurs fois entre normal et inversé.
<item>Restauration de la position du curseur.
</itemize>

<sect>Désactivation du bip sonore dans la console texte
<p>
Si vous désirez imposer le bip visuel dans la console, vous pouvez utiliser
l'entrée "<tt/bl/" dans la <tt/termcap/ et lui donner la même valeur que
pour "<tt/vb/" ci-dessus. Cette aproche est pratique si vous ne voulez pas
configurer chaque application (cela est de toutes façons décrit
ci-dessous). J'utilise cette solution sur toutes les machines sur
lesquelles j'utilise Linux sans pouvoir déconnecter le haut-parleur.

<sect>Empêcher les applications d'émettre des bips
<p>
Ceci est une liste incomplète d'applications qui peuvent être configurées
pour utiliser l'entrée <tt/vb/ pour le type de terminal utilisé (utilisant
soit <tt/termcap/ soit <tt/terminfo/)&nbsp;:

<itemize>

<item>Le serveur X&nbsp;: utilisez la commande "<tt/xset b/" pour
	sélectionner le comportement du bip. Elle prend trois arguments
	numériques&nbsp;: volume, hauteur et durée. "<tt/xset -b/"
	désactive complètement le bip. La configuration du serveur affecte
	toutes les applications tournant dessus.

<item><tt/xterm/&nbsp;: xterm peut convertir chaque bip soit en un signal
	visuel soit en un signal sonore. Si vous utilisez un bip sonore, il
	obéit à la configuration issue de "<tt/xset/". Par défaut
	<tt/xterm/ utilise un bip sonore, mais l'option "<tt/-vb/" sur la
	ligne de commande ainsi que la ressource "<tt/xterm*visualBell:
	true/" le remplace par un flash visuel. Vous pouvez passer de l'un
	à l'autre en cours d'exécution au moyen du menu obtenu par
	control-clic-bouton-gauche. Si vous travaillez sous X vous n'avez
	probablement pas besoin des informations qui suivent.

<item><tt/tcsh/ (6.04 et ultérieurs)&nbsp;: "<tt/set visiblebell/".  Cette
	instruction peut être placée dans <tt/.cshrc/ ou exécutée
	directement. Pour rétablir le bip sonore, "<tt/unset
	visiblebell/". Pour n'avoir ni l'un ni l'autre, utilisez "<tt/set
	nobeep/".

<item><tt/bash/ (n'importe quel bash, pour autant que je sache)&nbsp;:
	Mettez "<tt/set bell-style visible/" dans votre
	<tt>&tilde;/.bashrc</tt>. Les autre valeurs possibles sont "none" et
	"audible".

<item><tt/bash/ (avec <tt/readline/, ainsi que d'autres applications basées
	sur <tt/readline/)&nbsp;: Mettez "<tt/set prefer-visible-bell/"
	dans <tt>&tilde;/.inputrc</tt>.

<item><tt/nvi/ et <tt/elvis/&nbsp;: Mettez "<tt/set flash/" dans
	<tt>&tilde;/.exrc</tt> ou faites "<tt/:set flash/" directement. (notez
	les deux points). Pour désactiver le bip visuel, utilisez
	<tt/noflash/ au lieu de <tt/flash/.

<item><tt/emacs/&nbsp;: Mettez "<tt/(setq visible-bell t)/" dans votre
	<tt>&tilde;/.emacs</tt>. Pour la désactiver&nbsp;: "<tt/(setq
	visible-bell nil)/".

<item><tt/less/&nbsp;: Utilisez l'option "<tt/-q/" sur la ligne de commande
	pour avoir un bip visuel, utilisez "<tt/-Q/" pour n'avoir aucun
	bip. Pour avoir l'une ou l'autre de ces options par défaut,
	mettez-les dans la variable d'environnement "<tt/LESS/".

<item><tt/screen/&nbsp;: Faites "Ctrl-A - Ctrl-G". Cela change le
	comportement de tous les écrans virtuels. Voyez la page du manuel
	sous "CUSTOMIZATION" pour fixer le comportement par défaut.

</itemize>

<sect>La face cachée du problème
<p>
La mauvaise nouvelle est que toutes les applications n'utilisent pas
<tt/termcap/ ou <tt/terminfo/. La plupart des petits programmes ont le
caractère 'backslash-a' (l'alarme) dans le code source C. Le code "alarme"
devient un caractère ASCII BEL dans les chaînes de caractère du code
binaire. Les vraies applications ne sont en principe pas de ce type,
mais méfiez-vous des débutants en C qui vous donnent leurs programmes. Les
pires, je vous assure, sont les étudiants en informatique.

La seule manière de réduire ces applications au silence est de procéder à
une "spekearectomy", ou d'utiliser les séquences d'échappement dues à
Martin Mares.

</article>
