Bip visuel mini-Howto (Visual bell mini-Howto)
Alessandro Rubini,
[email protected]
Traduction Jean-Albert Ferrez,
[email protected]
v2.2, 11 Novembre 1997
Ce document explique comment utiliser termcap pour configurer un bip
visuel sur son systeme et comment desactiver a la demande le bip
sonore.
11.. IInnttrroodduuccttiioonn
La console Linux emet un bip sonore lorsqu'un caractere 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 cense expliquer comment
indiquer aux applications de ne pas produire de caractere BEL. Il
explique egalement comment faire en sorte que le noyau et le serveur X
Window ne sonnent pas en presence d'un caractere BEL. Notez que la
plupart de ce document concerne la console texte, etant donne que la
configuration du serveur X est triviale pour ceux qui travaillent dans
un environnement graphique.
A mon avis, la meilleure attitude a adopter face a un ordinateur
bruyant consiste a operer au niveau du materiel, le mien n'a meme pas
de haut-parleur.
22.. SSppeekkeeaarreeccttoommyy"",, aabbllaattiioonn dduu hhaauutt--ppaarrlleeuurr
L'ablation du haut-parleur est de loin la solution la plus brillante
au probleme du bip sonore. Comme son nom l'indique, elle consiste a
supprimer le bip a la source. L'operation est simple, elle ne
necessite pas d'anesthesie.
Les PC sont habituellement equipes d'un bouton ridicule servant a
reduire la frequence du CPU. Ce bouton n'est jamais utilise dans un
environnement multitache, puisque l'on n'a jamais besoin de ralentir
la machine pour utiliser des jeux bases sur des boucles de
temporisation. Malheureusement, on ne peut pas utiliser ce bouton pour
augmenter la frequence du CPU, mais on peut l'utiliser pour
activer/desactiver le haut-parleur. Parfois, ce dernier est utile meme
si vous preferez un ordinateur silencieux, par exemple pour signaler
la fin d'une longue compilation. Pour modifier la fonction de ce
bouton, il suffit de le deconnecter de la carte-mere et de le brancher
en serie avec le haut-parleur.
Cela dit, les possesseurs de portables n'ont pas acces au haut-
parleur, pas plus qu'ils ne disposent d'un bouton inutile a
reassigner. La solution pour ces utilisateurs reside dans la
configuration de leurs logiciels, comme indique ci-dessous.
33.. CCoonnffiigguurraattiioonn dduu bbiipp ccoonnssoollee ppaarr ccoonnssoollee
Depuis la version 1.3.43, Martin Mares a modifie console.c, y ajoutant
la possibilite de configurer la hauteur et la duree du bip. Chaque
console peut etre configuree pour avoir un bip de hauteur et/ou duree
differente. Ce but est atteint au moyen de sequences d'echappement
interpretees par le gestionnaire de la console. Vous pouvez configurer
vos fichiers ~/.profile ou ~/.login pour choisir un bip particulier
pour chaque console (ou, le cas echeant, pas de bip du tout).
Les sequences d'echappement fonctionnent comme suit :
+o ESC-[10;xx] selectionne la hauteur du bip en Hertz. La valeur doit
etre dans la plage 21-32766, sinon le resultat est indetermine. Si
l'argument `xx' manque (ESC-[10]), la valeur par defaut est 750 Hz.
+o ESC-[11;xx] selectionne la duree du bip en millisecondes. Au dela
de 2 secondes, la valeur par defaut de 125 ms est appliquee. Cette
derniere est egalement utilisee si l'argument 'xx' manque.
Pour avoir par exemple un bip a 50Hz durant une seconde, faites "echo
-e "\\33[10;50]\\33[11;1000]"" avec bash (le "-e" signifie `digere les
sequences d'echappement'. Avec tcsh la commande devient "echo
"\\033[10;50]\\033[11;1000]"".
Bien que je ne connaisse aucune version de la commande 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 recent, vous pouvez vous
contenter des sequences d'echappement et interrompre votre lecture
ici. Si votre noyau est plus vieux, ou si vous desirez un bip visuel,
vous aller aimer le reste de ce document.
44.. CCoonncceeppttss ddee bbaassee aauu ssuujjeett ddee TTeerrmmccaapp eett TTeerrmmiinnffoo
Le fichier /etc/termcap est un fichier texte contenant les "terminal
capabilities" (capacites des terminaux, N.d.T.). Plusieurs
applications utilisent les informations de termcap pour deplacer le
curseur sur l'ecran ou d'autres actions en relation avec ce dernier.
tcsh, bash, vi et toutes les applications basees sur curses utilisent
la base de donnees termcap.
La base de donnees decrit plusieurs types de terminaux. La variable
d'environnement TERM selectionne le comportement correct lors de
l'execution en indiquant aux applications quelle entree de termcap
utiliser.
Dans la base de donnees, chaque capacite d'un terminal est representee
par un code de deux lettres et une representation de la sequence
d'echappement permettant d'obtenir l'effet desire. Les deux-points ":"
servent de separateur entre les differentes capacites. Par exemple, le
bip sonore dont le code est "bl" apparait generalement sous la forme
"bl=^G", ce qui signifie que le bip est obtenu en "affichant" le
caractere control-G, correspondant au code ASCII BEL.
En plus de bl, la capacite vb est reconnue. Elle est utilisee pour
representer le "bip visible". vb est generalement absent de l'entree
linux du fichier termcap.
La plupart des applications et librairies modernes utilisent la base
de donnees terminfo au lieu de termcap. Cette base de donnees utilise
un fichier par type de terminal et est situee dans /usr/lib/terminfo;
pour eviter de trop grands repertoires, les descriptions de chaque
type de terminal sont stockees dans un repertoire nomme d'apres la
premiere lettre : ainsi, l'entree linux se situe dans
/usr/lib/terminfo/l/linux. Pour construire une entree terminfo il faut
"compiler" une description termcap, voir le programme tic et sa page
de manuel.
55.. MMiissee ssuurr ppiieedd dd''uunn bbiipp vviissiibbllee
Vous pouvez ajouter une entree pour la capacite vb dans votre fichier
termcap, si ce n'est pas deja fait. Dennis Henriksen (
[email protected]) a
suggere la ligne suivante dans l'entree linux (appelee console dans
les anciennes distributions) du fichier termcap :
:vb=\E7\E[?5h\E[?5l\E[?5h\E[?5l\E[?5h\E[?5l\E[?5h\E[?5l\E8:\
Le backslash final sert a cacher le retour a la ligne dans la base.
Le code de Dennis fonctionne comme suit (selon ses propres mots) :
+o Sauvegarde de la position du curseur (par precaution).
+o Bascule du fond d'ecran plusieurs fois entre normal et inverse.
+o Restauration de la position du curseur.
66.. DDeessaaccttiivvaattiioonn dduu bbiipp ssoonnoorree ddaannss llaa ccoonnssoollee tteexxttee
Si vous desirez imposer le bip visuel dans la console, vous pouvez
utiliser l'entree "bl" dans la termcap et lui donner la meme valeur
que pour "vb" ci-dessus. Cette aproche est pratique si vous ne voulez
pas configurer chaque application (cela est de toutes facons decrit
ci-dessous). J'utilise cette solution sur toutes les machines sur
lesquelles j'utilise Linux sans pouvoir deconnecter le haut-parleur.
77.. EEmmppeecchheerr lleess aapppplliiccaattiioonnss dd''eemmeettttrree ddeess bbiippss
Ceci est une liste incomplete d'applications qui peuvent etre
configurees pour utiliser l'entree vb pour le type de terminal utilise
(utilisant soit termcap soit terminfo) :
+o Le serveur X : utilisez la commande "xset b" pour selectionner le
comportement du bip. Elle prend trois arguments numeriques :
volume, hauteur et duree. "xset -b" desactive completement le bip.
La configuration du serveur affecte toutes les applications
tournant dessus.
+o xterm : xterm peut convertir chaque bip soit en un signal visuel
soit en un signal sonore. Si vous utilisez un bip sonore, il obeit
a la configuration issue de "xset". Par defaut xterm utilise un bip
sonore, mais l'option "-vb" sur la ligne de commande ainsi que la
ressource "xterm*visualBell: true" le remplace par un flash visuel.
Vous pouvez passer de l'un a l'autre en cours d'execution 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.
+o tcsh (6.04 et ulterieurs) : "set visiblebell". Cette instruction
peut etre placee dans .cshrc ou executee directement. Pour retablir
le bip sonore, "unset visiblebell". Pour n'avoir ni l'un ni
l'autre, utilisez "set nobeep".
+o bash (n'importe quel bash, pour autant que je sache) : Mettez "set
bell-style visible" dans votre ~/.bashrc. Les autre valeurs
possibles sont "none" et "audible".
+o bash (avec readline, ainsi que d'autres applications basees sur
readline) : Mettez "set prefer-visible-bell" dans ~/.inputrc.
+o nvi et elvis : Mettez "set flash" dans ~/.exrc ou faites ":set
flash" directement. (notez les deux points). Pour desactiver le bip
visuel, utilisez noflash au lieu de flash.
+o emacs : Mettez "(setq visible-bell t)" dans votre ~/.emacs. Pour la
desactiver : "(setq visible-bell nil)".
+o less : Utilisez l'option "-q" sur la ligne de commande pour avoir
un bip visuel, utilisez "-Q" pour n'avoir aucun bip. Pour avoir
l'une ou l'autre de ces options par defaut, mettez-les dans la
variable d'environnement "LESS".
+o screen : Faites "Ctrl-A - Ctrl-G". Cela change le comportement de
tous les ecrans virtuels. Voyez la page du manuel sous
"CUSTOMIZATION" pour fixer le comportement par defaut.
88.. LLaa ffaaccee ccaacchheeee dduu pprroobblleemmee
La mauvaise nouvelle est que toutes les applications n'utilisent pas
termcap ou terminfo. La plupart des petits programmes ont le caractere
'backslash-a' (l'alarme) dans le code source C. Le code "alarme"
devient un caractere ASCII BEL dans les chaines de caractere du code
binaire. Les vraies applications ne sont en principe pas de ce type,
mais mefiez-vous des debutants en C qui vous donnent leurs programmes.
Les pires, je vous assure, sont les etudiants en informatique.
La seule maniere de reduire ces applications au silence est de
proceder a une "spekearectomy", ou d'utiliser les sequences
d'echappement dues a Martin Mares.