Bip visuel mini-Howto (Visual bell mini-Howto) Alessandro Rubini, rubini@linux.it Traduction Jean-Albert Ferrez, Jean-Albert.Ferrez@epfl.ch 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 (duke@diku.dk) 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. .