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.