
                           The Linux Keyboard HOWTO

Andries Brouwer, aeb@cwi.nl

   v2.1, 8 Novembre 1995 - version franaise Bruno Viaris
     _________________________________________________________________

   _Ce document traite de l'utilisation du clavier, de la console et de
   caractres non ASCII sous Linux._
     _________________________________________________________________

1. Programmes utiles

   Les paquetages suivants contiennent des programmes en rapport avec le
   clavier ou la console.

   kbd-0.90.tar.gz contient loadkeys, dumpkeys, showkey, setmetamode,
   setleds, setfont, showfont, mapscrn, kbd_mode, chvt, resizecons,
   disalloc, getkeycodes, setkeycodes.

   util-linux-2.5 contient setterm, kbdrate.

   shellutils-1.8 (ou stty.tar.gz) contient stty.

   open-1.1.tgz contient open. (Voir aussi dynamic-vc-1.1.tar.gz.)

   SVGATextMode-0.9.tar.gz contient SVGATextMode.

   La distribution standard de X contient xmodmap, xset, kbd_mode. (Voir
   aussi X386keybd(1).)

2. Le clavier - gnralits

   Quand on appuie sur une touche, le contrleur clavier envoie des
   scancodes au pilote clavier du noyau. Certains claviers sont
   programmables, mais en gnral les scancodes sont fixes. Quand le
   pilote clavier est en _mode scancode_ (dit aussi _mode raw_), le noyau
   se contente de transmettre les codes tels quels  l'application, c'est
   ce qui se passe sous X. Sinon le flux de scancodes est dcompos en
   keycodes correspondant  l'appui ou au relchement d'une touche. (Le
   simple fait d'appuyer sur une touche peut produire jusqu' 6
   scancodes, rduits ici en un seul keycode.) Si le pilote clavier est
   en _mode keycode_ (ou _mode mediumraw_), l'application reoit les
   keycodes (ce mode est utilis, par exemple, par showkey). Sinon, les
   keycodes sont traduits d'aprs une table (keymap), ensuite, soit un
   caractre (ou un chane) est envoy  l'application, soit une action
   est dclenche. (Exemple: si on appuie et relche la touche q, le
   clavier envoie les scancodes 0x1E et 0x9E, ce qui est converti en
   keycodes 30 et 158, puis en la valeur 113, qui est le code ASCII ou
   Latin-1 de q (avec un clavier Azerty et une keymap adapte). Si on
   appuie et relche la touche Suppr, le clavier envoie les scancodes
   0xE0 0x53 0xE0 0xD3, convertis en keycodes 111 et 239, ce qui donne
   finalement la squence ESC [ 3 ~. Ctrl-Alt-Suppr est une combinaison
   de touches qui dclenche une action.)

   La conversion de scancodes exotiques en keycodes peut tre programme
   avec l'utilitaire setkeycodes, mais peu de gens ont besoin. La table
   de traduction des keycodes en caractres, chanes ou actions, i.e. la
   keymap, se manipule grce  loadkeys. Pour plus de dtails, voir
   getkeycodes(8), setkeycodes(8), dumpkeys(1), loadkeys(1).

   Dans ce paragraphe, le terme `envoy  l'application' signifie en fait
   `transmis au pilote du terminal'. Le texte est ensuite trait de la
   mme faon que s'il venait d'une ligne srie. Les dtails de ce
   traitement sont ajusts par le programme stty.

3. La console - gnralits

   A l'inverse, quand on envoie des caractres  la console, ils
   subissent un traitement standard (rgl par stty), puis sont envoys
   au pilote de la console. Le pilote de la console mule un terminal
   VT100, et scrute les donnes reues pour intercepter les squences
   escape (du genre dplacement du curseur, effacement de l'cran, etc.).
   Les autres octets sont, aprs une ventuelle conversion par la table
   de conversion de la console, crits dans la mmoire vido. La carte
   vido affiche ces caractrs en utilisant une police stocke dans sa
   mmoire. On peut changer cette police en utilisant setfont, et la
   table de conversion de la console peut tre modifie avec mapscrn.
   Pour plus de dtails, voir plus bas.

4. Rinitialiser le terminal

   L'cran est plein de cochonneries, tout ce qu'on tape apparat sous
   forme de petits dessins. Que faire ?

   De nombreux programmes retracent l'cran quand on tape ^L, ce qui peut
   tre utile en cas de modem bruit ou de messages intempestifs 
   l'cran. La commande clear efface l'cran.

   La commande reset rinitialise le pilote de la console. Elle est bien
   utile quand l'cran est plein de ces jolis caractres graphiques
   illisibles, ou quand l'affichage est rduit  la ligne du bas. Si vous
   ne disposez pas de cette commande, ou si elle fait autre chose, voici
   le remde: mettez ces deux lignes dans un fichier excutable reset
   quelque part dans votre PATH:

#!/bin/sh
echo -e \\033c

   ce qui envoie la squence ESC c  la console. Si vous avez charg une
   police bizarre et que vous voulez revenir  la police par dfaut,

% setfont

   fera l'affaire ( condition que la police par dfaut soit  sa place).
   Sur de vieux terminaux, l'utilisation de tabs peut demander un dlai,
   excuter alors

% stty tab3

   (voir stty(1)). Pour changer de mode vido, utiliser resizecons ou
   SVGATextMode. Ceci rgle gnralement la partie affichage. Ct
   clavier, il peut y avoir encore pas mal de problmes. Si X, DOOM ou
   tout autre programme travaillant en mode raw (ou mediumraw) se plante,
   le clavier peut rester dans ce mode et il est alors difficile
   d'excuter la moindre commande. (Voir "Comment sortir du mode raw"
   plus loin.)

4.1 Keyboard hardware reset

   Le problme peut parfois se situer  un niveau encore plus bas. Il y a
   au moins deux niveaux (le clavier et le contrleur clavier) o l'on
   peut envoyer la commande "dsactiver le clavier" au matriel. De plus
   les claviers ont souvent trois tables de scancodes utilisables au
   choix.

   Je n'ai cependant jamais entendu parler de cas o cela ait pos un
   problme.

   Certains claviers ont une fonction de reprogrammation des touches.
   Stormy Henderson ( stormy@Ghost.Net) crit:

     `Si votre clavier a t accidentellement reprogramm, vous pouvez
     (avec un clavier Gateway AnyKey) appuyer sur
     control-alt-suspend_macro pour remettre les choses en place.'

5. Delete et Backspace

5.1 Comment choisir le caractre  utiliser pour effacer le dernier caractre
tap

% stty erase ^?

   Si le caractre est effac, mais d'une manire bizarre, c'est que les
   paramtres du terminal sont mauvais. Si echoprt est activ, les
   caractres effacs s'affichent entre \ et /. Si echoe est dsactiv,
   les caractres ne sont plus effacs  l'cran, mais leur effacement
   est signal par l'affichage du caractre d'effacement, exemple:
   Libux###nux (avec # comme caractre d'effacement).

   On utilisera donc gnralement stty echoe -echoprt. La commande stty
   sane activera ces paramtres et bien d'autres. La commande stty -a
   affiche les paramtres actuels. Pourquoi ces paramtres ne sont pas
   activs par dfaut ? Il suffit d'utiliser le bon getty.

   Il est  noter que beaucoup de programmes (comme bash, emacs etc.) ont
   leur propres assignations de touches (dfinis dans ~/.inputrc,
   ~/.emacs, etc.) et ne tiennent pas compte de ces paramtres de
   terminal.

  `Getty comprenait bien DEL et BS, mais plus maintenant ?'

   Jadis, la console traduisait DEL (\177) en BS Espace BS
   (\010\040\010).

   Les DEL sont dsormais ignors (comme le devrait toute mulation vt100
   fidle). Choisissez un meilleur getty, i.e., qui n'affiche pas les
   DEL.

  `Login ne fait pas la mme chose au premier et au deuxime essai?'

   Au premier essai, on parle  getty, au deuxime  login, deux
   programmes distincts qui peuvent se comporter diffremment.

5.2 Comment dire  Linux quel code gnrer  l'appui sur une touche

   Quand on utilise la console, ou plus prcisment, quand le clavier
   n'est pas en mode (medium)raw, il faut utiliser:

% loadkeys monclavier.map

   Sous X, utiliser:

% xmodmap monclavier.xmap

   Remarque: depuis XFree86-2.1, X initialise son clavier  partir de la
   configuration du clavier de la console. Bien que les deux systmes ne
   soient pas 100% compatibles, cette technique rend gnralement
   l'utilisation de xmodmap superflue.

   Si, par exemple, si vous voulez que la touche Backspace gnre le code
   BackSpace (^H), au lieu du code par dfaut (Delete), faites:

% loadkeys
keycode 14 = BackSpace
%

  `Pourquoi la touche BackSpace ne gnre pas BackSpace par dfaut ?'

   (i) Parce que les terminaux VT100 ont une touche Delete au dessus de
   la touche Entre.

   (ii) Parce que Linus en a dcid ainsi.

5.3 Comment dire  X d'changer Delete et Backspace

% xmodmap -e "keysym BackSpace = Delete" -e "keysym Delete = BackSpace"

   Ou, si vous voulez juste que Backspace gnre le code BackSpace:

% xmodmap -e "keycode 22 = BackSpace"

   Ou, si vous voulez juste que Delete gnre le code Delete:

% xmodmap -e "keycode 107 = Delete"

   (mais gnralement c'est dj la disposition par dfaut).

5.4 Comment dire  emacs ce qu'il doit faire des codes Delete et Backspace

   Mettez dans votre .emacs les lignes:

  (global-set-key "\?" 'delete-backward-char)
  (global-set-key "\C-h" 'help-command)

   Bien sr, vous pouvez associer d'autres commandes  d'autres touches
   de la mme manire.

5.5 Comment dire  emacs de permuter Delete et Backspace

   Mettez dans votre .emacs les lignes:

  (setq keyboard-translate-table (make-string 128 0))
  (let ((i 0))
  (while (< i 128)
      (aset keyboard-translate-table i i)
      (setq i (1+ i))))
  (aset keyboard-translate-table ?\b ?\^?)
  (aset keyboard-translate-table ?\^? ?\b)

5.6 Comment dire  kermit d'changer Delete et Backspace

   Mettez dans votre .kermrc les lignes:

  set key \127 \8
  set key \8 \127

5.7 Comment rgler xterm selon vos modes de terminal prfrs

   Normalement xterm hrite des modes de terminal du processus qui
   l'appelle. Pour xdm, les caractres erase et kill sont # et @, comme
   sur les bons vieux Unix Version 6. Si a ne vous plat pas, vous
   pouvez mettre

  XTerm*ttymodes: erase ^? kill ^U intr ^C quit ^\ eof ^D susp ^Z start ^Q stop
 ^S eol ^@

   dans /usr/lib/X11/app-defaults/XTerm ou dans $HOME/.Xresources, 
   condition d'excuter la commande

  xrdb $HOME/.Xresources

   dans votre $HOME/.xinitrc.

5.8 Comment dire  xmosaic que la touche Backspace gnre une DEL

   Mettre

  *XmText.translations: #override\n\
         <Key>osfDelete: delete-previous-character()
  *XmTextField.translations: #override\n\
          <Key>osfDelete: delete-previous-character()

   dans votre $HOME/.Xresources devrait faire l'affaire.

   Cependant, la FAQ de netscape dit:
        Pourquoi ma touche Backspace ne marche pas dans les boites texte ?
        Par dfaut, Linux et XFree86 ont leur touches Backspace et Delete
        mal configures. Tous les programmes Motif (y compris Netscape
        Navigator) auront les mmes problmes.

        Les spcifications Motif disent que Backspace doit effacer le
        caractre prcdent et Delete le caractre suivant. Par dfaut sous
        Linux et XFree86 Backspace et Delete gnrent le code DEL.

        Le problme peut tre rsolu en utilisant un programme tel que
        xmodmap, xkeycaps, ou loadkeys pour que la touche Backspace
        gnre le code BackSpace au lieu de Delete.

        Une autre solution consiste  avoir un fichier .motifbind;
        voir la page de manuel de VirtualBindings(3).

        Note: n'utilisez pas les ressources *XmText.translations ou
        *XmTextField.translations pour essayer de rsoudre ce problme.
        Si vous le faites, vous annulez toutes les autres programmations
        de touches dans les boites textes de Netscape Navigator.

5.9 Et les fichier termcap et terminfo?

   Les gens qui ont des problmes avec backspace ont tendance  aller
   voir dans leur fichier termcap (ou terminfo), et effectivement la
   ressource kb (ou kbs) dcrit le code gnr par la touche Backspace.
   Cependant peu de programmes utilisent ces bases de donnes pour
   rechercher le code envoy par backspace, donc,  moins de n'avoir des
   problmes qu'avec certains programmes, il faut en gnral chercher
   ailleurs. Cela dit, il vaut mieux de toute faon avoir un termcap (ou
   terminfo) correct. Voir aussi "La variable TERM" plus loin.

6. Les tables de caractres de la console

   Le noyau a quatre tables de conversion des octets en symboles cran:
   a) Latin1 -> PC, b) VT100 graphique -> PC, c) PC -> PC, d)
   utilisateur.

   Il y a deux tables de caractres, appeles G0 et G1, dont l'une est la
   table courante. (Initialement G0.) Taper ^N fait passer  la table G1,
   ^O  la table G0.

   Ces variables G0 et G1 pointent sur des tables de conversion et
   peuvent tres changes par l'utilisateur. Initialement, elles pointent
   respectivement sur les tables a) et b). Les squences ESC ( B , ESC (
   0 , ESC ( U et ESC ( K font respectivement pointer G0 sur les tables
   de conversion a), b), c) et d). Les squences ESC ) B , ESC ) 0 , ESC
   ) U et ESC ) K font respectivement pointer G0 sur les tables de
   conversion a), b), c) et d).

   La squence ESC c provoque une rinitialisation complte du terminal,
   ce qui peut tre ncessaire si l'cran est tout brouill. La commande
   echo ^V^O, souvent conseille, ne fera que rappeler la table G0, mais
   rien ne garantit que G0 pointe sur la table a). Certaines
   distributions ont un programme reset(1) qui fait juste un echo ^[c. Si
   votre termcap pour la console est correcte (et a une entre :rs=\Ec:),
   alors vous pouvez utiliser setterm -reset.

   La table de conversion d) peut tre dfinie par mapscrn(8). Le
   rsultat est que si un symbole c est affich, c'est le symbole s =
   map[c] qui est mis dans la mmoire vido. L'image du caractre s se
   trouve dans la mmoire de la carte vido et peut tre modifie avec
   setfont(8).

7. Changer de console

   Par dfaut, le changement de console se fait par Alt-Fn ou
   Ctrl-Alt-Fn. Sous X (ou les versions rcentes de dosemu), seule la
   combinaison Ctrl-Alt-Fn marche.

   XFree86 1.3 ne sait pas que la touche Alt est enfonce quand on
   rappelle la fentre X. Il faut donc relcher Alt avant de pouvoir
   rechanger de console. Pourtant, a pourrait marcher: le noyau mmorise
   toujours l'tat appuy/relch des touches. (Autant que faire se peut:
   certains clavier n'mettent pas de scancode quand on appuie dessus
   (ex: les touches PFn d'un FOCUS 9000) ou quand on les relche (ex: la
   touche Pause de la plupart des claviers).)

   XFree86 1.3 sauve les polices charges sur la carte vido quand il est
   dmarr, et les restaure lors d'un changement de console. Donc le
   rsultat d'un setfont sur une console virtuelle est annul par un
   aller retour dans la fentre X. L'utilisation de setfont sous X donne
   des rsultats bizarres...

   Le changement de console par programme est possible grce  la
   commande chvt.

7.1 Changer le nombre de Consoles Virtuelles

   Cette question est toujours pose de temps en temps, mais la rponse
   est: il y en a dj suffisament. Depuis la version 1.1.54 du noyau, il
   y a entre 1 et 63 consoles virtuelles. Une nouvelle console est cre
   ds qu'elle est ouverte. Elle peut tre supprime avec disalloc (mais
   il faut que plus aucun processus ne lui soit associ).

   Pour les vieux noyaux, changer la ligne

#define NR_CONSOLES     8

   dans include/linux/tty.h (ne pas dpasser 63), et recompiler. Il est
   possible que vous ayez  crer le priphrique correspondant avec
   MAKEDEV ou mknod ttyN c 4 N o N est le numro du terminal. Si vous
   voulez avoir des getty sur ces nouvelles consoles, ajoutez des lignes
   dans /etc/inittab.

   Quand les consoles sont alloues dynamiquement, il est gnralement
   plus simple de n'avoir qu'un ou deux getty. D'autres consoles sont
   ouvertes par open -l -s bash. Les consoles inutilises (sans processus
   associ) sont dsalloues par disalloc.

   Si vous disposez de spawn_login (inclus dans kbd-0.90.tar.gz) et que
   vous mettez

        loadkeys << EOF
        alt keycode 103 = Spawn_Console
        EOF
        spawn_login &

   dans /etc/rc.local, taper Alt-FlcheHaute crera (et affichera) une
   nouvelle console avec un login. Voir aussi open-1.3.tgz.

   Vous ne pouvez vous loger sous "root" que sur les terminaux lists
   dans /etc/securetty.

8. Ctrl-Alt-Del et autres combinaisons spciales

8.1 Ctrl-Alt-Del (Boot)

   Quand on appuie sur Ctrl-Alt-Del (ou toute autre combinaison 
   laquelle loadkeys associe le keycode Boot), soit la machine reboote
   immdiatement (sans sync), soit le signal SIGINT est envoy  init (ce
   qui est le comportement par dfaut, changeable par l'appel systme
   reboot(), voir ctrlaltdel(8)). Certains init changent le dfaut. Ce
   qui se produit quand init reoit SIGINT dpend de la version du init
   utilise et est souvent dtermin par le ligne pf du fichier
   /etc/inittab (on peut dans ce cas lancer n'importe quel programme).
   Dans les versions actuelles du noyau Ctrl-AltGr-Del n'est plus assign
   par dfaut  Boot.

8.2 Autres combinaisons

   Combinaisons par dfaut avant utilisation de loadkeys, donc en qwerty.
Nom du keycode  Combinaison
-------------------------------
Show_Memory     Shift-Scrollock
Show_Registers  AltGr-ScrollLock
Show_State      Ctrl-ScrollLock
Console_n       Alt-Fn and Ctrl-Alt-Fn  (1 <= n <= 12)
Console_{n+12}  AltGr-Fn                (1 <= n <= 12)
Incr_Console    Alt-FlcheDroite
Decr_Console    Alt-FlcheGauche
Last_Console    Alt[Gr]-ImprEcran
Scroll_Backward Shift-PgPrec
Scroll_Forward  Shift-PgSuiv
Compose         Ctrl-.          (Ctrl-: sur clavier azerty)
Caps_On         <pas dfini>  (Par dfaut CapsLock est un va-et-vient,
Caps_Shift      <pas defini> ces Keycodes servent  recrer le dsagrable
                                comportement MS-Keyb Fr)

8.3 Combinaisons sous X

Ctrl-Alt-Fn             Affiche la console virtuelle n
Ctrl-Alt-KP+            Rsolution suivante
Ctrl-Alt-KP-            Rsolution prcdente
Ctrl-Alt-Backspace      Tue le serveur X

   Sur certaines cartes-mres, Ctrl-Alt-KP- et Ctrl-Alt-KP+ mulent le
   bouton Turbo. Ces squences produisent les scancodes 1d 38 4a ca b8 9d
   et 1d 38 4e ce b8 9d, et toutes deux changent la vitesse de Turbo (>=
   25MHz)  non-Turbo (8 or 12 MHz) et vice-versa. (souvent ce
   comportement peut tre dsactiv par un cavalier sur la carte-mre.)

   Perry F Nguyen ( pfnguyen@netcom22.netcom.com) crit:

     Les BIOS AMI permettent de bloquer le clavier et de faire clignoter
     les LEDs quand on appuie sur Ctrl-Alt-Backspace et qu'un mot de
     passe BIOS est dfini, et ce jusqu' ce que celui-ci soit tap.

8.4 Combinaisons sous Dosemu

Ctrl-Alt-Fn     Rappelle la console n (versions >0.50; avant Alt-Fn)
Ctrl-Alt-PgDn   Tue dosemu (quand le calvier est en mode RAW)
(et bien d'autres, voir la documentation de dosemu)

8.5 Composition de symboles

   Un symbole peut tre construit en utilisant plusieurs frappes.
     * En mode Ascii, taper un code Ascii en dcimal sur le pav
       numrique, tout en maintenant la touche Alt enfonce, produit le
       caractre en question quand on relche Alt. (En mode Unicode, il
       faut taper le code hexadcimal  4 chiffres du symbole)
     * L'appui sur un accent mort puis sur une lettre produit cette
       lettre accentue (si possible, sinon l'accent suivi de la lettre).
       Les touche mortes sont dfinissables par l'utilisateur (grce 
       loadkeys(1)). Il y a cinq possibilits:
accent                  keycode mort            keycode normal
------------------------------------------------------
accent grave            dead_grave              grave
accent aigu             dead_acute              apostrophe
accent circonflexe      dead_circumflex         asciicircum
tilde                   dead_tilde              asciitilde
trma                    dead_diaeresis          diaeresis
       Par dfaut aucune touche du clavier n'est morte. Le rsultat est
       celui de Compose + accent + lettre (et est donc redfinissable, cf
       plus bas).

     NDT: pour des francophones utilisant un clavier Azerty, il vaut
     gnralement mieux se contenter de dfinir comme touches mortes
     l'accent circonflexe et le trma de la touche  droite du `P'. Il
     est sinon fastidieux voire parfois impossible (en particulier sous
     X) de taper les symboles tilde et apostrophe, bien utiles sous
     Unix. Or les tables standard pour clavier Latin-1 activent en
     gnral toutes les touches mortes possibles. Il faut donc pour
     ressusciter ces touches, remplacer le keycode mort par le keycode
     normal dans la table charge au dmarrage par loadkeys.
     * Compose suivi de deux symboles produit une combinaison des deux.
       Cette combinaison est redfinissable. Il y a  ce jour 68
       combinaisons par dfaut qui peuvent tre affiches par dumpkeys |
       grep compose.
     * Depuis la version 1.3.33 du noyau, il est possible d'avoir des
       touches "collantes" (plus ou moins comme Escape) grce aux codes
       SControl et SAlt. Par exemple, on peut taper ^C par Scontrol puis
       C et Ctrl-Alt-BackSpace par SControl puis SAlt puis BackSpace.

   Il est  noter qu'il existe au moins trois mcanismes de composition
   distincts:
    1. Le pilote clavier de Linux, configur par loadkeys.
    2. Le mcanisme de X - voir X386keybd(1), ou XFree86kbd(1).
       Sous X11R6 : diter /usr/X11R6/lib/X11/locale/iso8859-1/Compose.
    3. Le mcanisme d'emacs, activ en chargeant iso-insert.el.

   Pour X, l'ordre des deux symboles n'a pas d'importance: Compose-,-c et
   Compose-c-, donnent tous deux un c-cdille; pour Linux et emacs, seule
   la premire combinaison est correcte. Les combinaisons de X sont
   fixes, celles de Linux et emacs sont reconfigurables. Les trois listes
   par dfaut sont assez similaires, mais il y a quelques diffrences.

9. Diverses proprits de la console

   Voir loadkeys(1), setleds(1), setmetamode(1) pour les codes gnrs
   par les diverses touches et l'utilisation des leds quand on n'est pas
   sous X. Sous X, voir xmodmap(1).

   Voir setterm(1), kbdrate(8) pour les proprits telles que les
   couleurs de l'criture et du fond, l'conomiseur d'cran et la vitesse
   de rptition des touches quand on n'est pas sous X. Sous X, voir
   xset(1), qui s'occupe aussi du clic des touches et du volume des bips.

   Le fichier /etc/termcap dfinit les squences escape utilises par de
   nombreux programmes utilisant la console (ou tout autre terminal). Une
   version plus moderne se trouve dans /usr/lib/terminfo. (voir
   terminfo(5). Les fichiers terminfo sont crs par le compilateur
   terminfo /usr/lib/terminfo/tic, voir tic(1).)

   (Sur ma machine) /dev/console est lien symbolique sur /dev/tty0, et le
   noyau considre /dev/tty0 comme un synonyme de la console virtuelle
   courante. XFree86 1.3 change le propritaire de /dev/tty0, mais ne le
   restaure qu' la sortie. Or dumpkeys risque de ne pas marcher si
   quelqu'un d'autre est propritaire de /dev/console; dans ce cas,
   lancer X et en sortir peut arranger les choses.

10. Comment sortir du mode RAW

   Si un programme utilisant le mode K_RAW du clavier se termine sans
   remettre le calvier en mode K_XLATE, alors il est trs difficile de
   faire quoi que ce soit - mme Ctrl-Alt-Del. Cependant il est parfois
   possible d'viter d'appuyer sur Reset (et mme souhaitable: vos
   utilisateurs risquent de ne pas apprcier qu'on leur tue leur Nethack,
   et surtout il est possible d'endommager le systme de fichiers). Les
   solutions simples consistent  se loger  partir d'un autre terminal
   ou une autre machine et faire kbd_mode -a. La procdure suivante
   suppose que X ne tourne pas, que l'cran est en mode texte, que vous
   tes  un prompt shell, que Ctrl-C est le caractre d'interruption et
   que vous n'avez pas un clavier trop exotique (i.e. la touche `=' est 2
   touches  droite de `0').

   1re tape: Lancer X. Appuyez sur la combinaison 2-F12-= : appuyez sur
   2 puis F12 (sans lcher 2) et puis = (sans lcher les deux autres), le
   tout assez rapidement! a lance X. (Explication: si l'appui sur une
   touche produit le keycode K, alors son relchement produit K+128.
   Votre shell risque de na pas apprcier ces caractres, donc on vite
   de les lui envoyer en ne lchant pas les touches. `2' produit un ^C
   qui annule tout ce qui a t tap avant. F12 produit un X et `=' le
   code entre. Et tout a vite fait avant que la rptition des touches
   ne commence...)

   Votre cran est alors probablement gris, puisqu'aucun .xinitrc n'a t
   spcifi. Cependant Ctrl-Alt-Fn marche, et vous pouvez appeler une
   autre console. (Ctrl-Alt-Backspace marche aussi, mais a restaure
   l'tat initial du clavier qui justement n'est pas bon.)

   2me tape: Programmer le changement de mode du clavier. (Par exemple,
   avec sleep 5; kbd_mode -a.)

   3me tape: Quitter X. Alt-Fx (souvent Alt-F7) retourne sous X,
   ensuite Ctrl-Alt-Backspace tue X. Dans les 5 secondes le clavier
   redevient utilisable.

   Si vous voulez vous prparer pour cette occasion, faites de \215A\301
   (3 symboles) un alias de kbd_mode -a. Dsormais, l'appui sur F7 en
   mode RAW remettra tout en ordre.

11. La variable TERM

   De nombreux programmes utilisent la variable TERM et la base de
   donnes /etc/termcap ou /usr/lib/terminfo/* pour trouver quelle chane
   de commande efface l'cran, dplace le curseur, etc., et parfois pour
   savoir quelle chane est envoye par la touche backspace, ou les
   touches de fonction, etc. Cette variable est d'abord dfinie par le
   noyau (pour la console). Gnralement elle est redfinie par getty, en
   utilisant /etc/ttytype ou l'argument spcifi dans /etc/inittab.
   Parfois elle est encore change par /etc/profile.

   Les anciens systmes utilisent TERM=console ou TERM=con80x25. Les plus
   rcents (avec ncurses 1.8.6) utilisent la valeur plus spcifique
   TERM=linux ou TERM=linux-80x25. Cependant, les vieilles versions de
   setterm cherchent une valeur du type TERM=con* et ne marchent donc pas
   avec TERM=linux.

   Depuis la version 1.3.2 du noyau, la valeur par dfaut est TERM=linux.

   Si votre termcap n'a pas d'entre `linux', il suffit d'ajouter l'alias
   linux dans la description de `console':

        console|con80x25|linux:\

   et de copier (ou faire un lien symbolique) /usr/lib/terminfo/c/console
   en /usr/lib/terminfo/l/linux.

11.1 Terminfo

   Il manque, dans le fichier terminfo de la console linux fourni avec
   ncurses 1.8.6, la ligne: kich1=\E[2~, ncessaire  certains
   programmes. Editez ce fichier et compilez-le avec tic.

12. Comment faire pour que d'autres programmes acceptent les caractres
non-ASCII

   C'tait jadis un vritable calvaire. Il fallait convaincre
   individuellement chaque programme de travailler en 8 bits. Les choses
   ne sont pas encore idales, mais rcemment de nombreux utilitaires GNU
   ont appris  reconnatre les variables LC_CTYPE=iso_8859_1 ou
   LC_CTYPE=iso-8859-1. Essayez d'abord a, et si a ne suffit pas
   essayez les trucs ci-dessous.

   Tout d'abord, le huitime bit doit survivre au processus d'entre du
   noyau, assurez-vous-en donc avec stty cs8 -istrip -parenb.

   A. Pour emacs, mettez les lignes

        (standard-display-european t)
        (set-input-mode nil nil 1)
        (require 'iso-syntax)

   et peut-tre aussi

        (load-library "iso-insert.el")
        (define-key global-map [?\C-.] 8859-1-map)

   dans votre $HOME/.emacs. (Cette dernire ligne marche dans un xterm,
   en utilisant emacs -nw, mais il faut alors mettre

        XTerm*VT100.Translations:       #override\n\
        Ctrl <KeyPress> . : string("\0308")

   dans votre .Xresources.) NDT: fichiers pour clavier Qwerty,  vrifier
   pour azerty.

   B. Pour less, mettez LESSCHARSET=latin1 dans l'environment.

   C. Pour ls, mettez l'option -N. (A priori en faisant un alias.)

   D. Pour bash (version 1.13.*), mettez

        set meta-flag on
        set convert-meta off

   et, selon le Danish-HOWTO,

        set output-meta on

   dans votre $HOME/.inputrc.

   E. Pour tcsh, dfinissez les variables:

        setenv LANG     fr_FR   (ou fr_CA, fr_CH, fr_BE...)
        setenv LC_CTYPE iso_8859_1

   Si nls est install, les routines correspondantes sont utilises.
   Sinon tcsh agit en iso_8859_1, quelle que soit les valeurs donnes 
   LANG et LC_CTYPE. voir la section NATIVE LANGUAGE SYSTEM de tcsh(1).
   (d'aprs le Danish-HOWTO: setenv LC_CTYPE ISO-8859-1; stty pass8)

   F. Pour flex, donnez l'option -8 si l'analyseur gnr doit accepter
   les entres 8-bits. (Bien sur qu'il doit le faire !)

   G. Pour elm, mettez displaycharset  ISO-8859-1. (Danish HOWTO: LANG=C
   et LC_CTYPE=ISO-8859-1)

   H. Pour les programmes utilisant curses (comme lynx) David Sibley dit:

     La version standard de curses utilise le huitime bit pour la vido
     inverse (voir le flag _STANDOUT dfini dans
     /usr/include/curses.h). Cependant ncurses semble fonctionner en
     8-bits et affiche le iso-latin-8859-1 correctement.

   I. Pour les programmes utilisant groff (comme man), utilisez le
   -Tlatin1 au lieu de -Tascii. Les vieilles versions de man utilisent
   aussi col, et le point suivant s'applique aussi.

   J. Pout col, assurez-vous 1) qu'il a t corrig et fait un
   setlocale(LC_CTYPE,""); et 2) de dfinir LC_CTYPE=ISO-8859-1 dans
   l'environment.

   K. Pour rlogin, utilisez l'option -8.

   L. Pour joe,
   sunsite.unc.edu:/pub/Linux/apps/editors/joe-1.0.8-linux.tar.gz devrait
   marcher aprs dition du fichier de configuration. J'ai aussi lu: joe:
   mettez l'option -asis dans /usr/lib/joerc en premire colonne.

   M. Pour LaTeX: \documentstyle[isolatin]{article}.
   Pour LaTeX2e: \documentclass{article}\usepackage{isolatin} ou
   isolatin.sty est disponible  ftp://ftp.vlsivie.tuwien.ac.at/pub/8bit.

   Une belle discussion sur le thme de l'ISO-8859-1 et sur comment
   manipuler les caractres 8-bits est disponible dans
   ftp://grasp.insa-lyon.fr/pub/faq/fr/accents (en franais). Une autre,
   en anglais, peut tre trouve 
   ftp://rtfm.mit.edu/pub/usenet-by-group/comp.answers/character-sets/iso
   -8859-1-faq. Encore une autre(?):
   ftp://ftp.vlsivie.tuwien.ac.at/pub/8bit/FAQ-ISO-8859-1.

13. Que fait exactement XFree86-2.1  l'initialisation de sa keymap?

   Depuis la version 2.1, XFree86 initialise sa keymap d'aprs celle de
   Linux, dans les limites du possible. Linux a 16 entres par touches
   (une pour chaque combinaison de Shift, AltGr, Ctrl, Alt; en fait il en
   a mme 256), alors que X n'en a que 4 (une pour chaque combinaison de
   Shift et Mod), il y a donc forcment des informations perdues.

   D'abord X lit le fichier Xconfig, o il trouve les correspondances
   entre les touches Control, Alt et ScrollLock avec les codes X Meta,
   ModeShift, Compose, ModeLock et ScrollLock - voir X386keybd(1), ou
   XFree86kbd(1).

   Par dfaut, c'est la colonne LeftAlt qui sert pour Mod, sauf si
   CtlDroit est dfini comme ModeShift ou ModeLock, dans ce cas ce sont
   les entres RightCtl qui servent pour Mod. (Sauf si AltGr est dfini
   comme Mod dans Xconfig, auquel cas c'est la colonne RightAlt qui
   sert.) Ceci dtermine comment les 4 entres de XFree86 sont choisies
   parmi les 16 de Linux. Notons que par dfaut Linux ne fait pas la
   diffrence entre les deux touche Control ou Shift. X fait la
   duffrence.

   Les touches "action" Show_Memory, Show_State, Show_Registers,
   Last_Console, Console_n, Scroll_Backward, Scroll_Forward, Caps_On et
   Boot sont ignores, de mme pour les touches mortes, NumLock,
   ScrollLock et Alt+code-ASCII.

   Ensuite, les dfinitions de Xconfig sont utilises. (Donc une
   dfinition de Compose dans Xconfig annulera celle trouve dans la
   keymap du noyau.)

   Que deviennent les chanes associes aux touches des fonctions ? Rien,
   ce concept n'existe pas sous X. (Mais il est possible de dfinir des
   chanes associes aux touches de fonction dans xterm - mais elles ne
   doivent pas tre interceptes par le gestionnaire de fentres.)

   Je ne sais pas comment convaincre xterm qu'il devrait utiliser la
   keymap de X quand Alt est enfonc. Il semble qu'il ne ragisse qu'en
   fonction de sa ressource eightBitInput, et selon qu'elle est  vrai ou
   faux, soit il met  1 le huitime bit, soit il gnre un caractre
   escape devant le caractre (comme le fait setmetamode(1) pour la
   console).

14. Touches et claviers particuliers

   Les deux touches ImprEcran/Syst et Pause/Attn sont spciales car elles
   ont deux keycodes: la premire produit le keycode 84 quand Alt est
   enfonc et 99 sinon; la seconde 101 si Ctrl est enfonc, 119 sinon.
   (Il est donc inutile d'assigner des fonctions  Alt-Keycode99 ou
   Ctrl-Keycode119.)

   Si votre clavier a des touches tranges qui ne gnrent aucun code
   sous Linux (ou gnrent des messages du genre "unrecognized
   scancode"), vous pouvez,  partir du noyau 1.1.63, utiliser
   setkeycodes(1) pour dire au noyau quel keycode assigner  ces touches.
   (Leur utilisation sous X sera cependant impossible.) Une fois qu'elles
   ont un keycode grce  setkeycodes, on peut leur associer une fonction
   avec loadkeys.

15. Exemples d'utilisation de loadkeys and xmodmap

   Permuter ScrollLock et Control (en suposant que vous utilisez les
   keymaps 0-15; vrifiez avec dumpkeys | head -1)

  % loadkeys
  keymaps 0-15
  keycode 58 = Control
  keycode 29 = Caps_Lock
  %

   Les permuter sous X seulement:

  % xmodmap .xmodmaprc

   o .xmodmaprc contient les lignes

  remove Lock = Caps_Lock
  remove Control =  Control_L
  keysym  Control_L  =  Caps_Lock
  keysym  Caps_Lock  = Control_L
  add Lock = Caps_Lock
  add Control = Control_L

   Qu'en est-il de la numrotation des touches? Backspace a le numro 14
   sous Linux et 22 sous X... En fait, la numrotation est plus ou moins
   arbitraire. Le numro sous Linux peut tre visualis avec showkey(1),
   et le numro sous X avec xev(1). Souvent le numro sous X est 8 de
   plus que le numro sous Linux.

15.1 `Je ne peux taper qu'avec un seul doigt'

   Les touches Shift, Ctrl et Alt peuvent-elles tre des commutateurs
   stables ? Oui, en faisant:

% loadkeys
keycode 29 = Control_Lock
keycode 42 = Shift_Lock
keycode 56 = Alt_Lock
%

   les Control, Shift et Alt de gauche deviennent stables. Les numros 
   utiliser sont donns par showkey (et sont gnralement 29 et 97
   (Control), 42 et 54 (Shift), 56 et 100 (Alt)) et les fonctions
   possibles sont Control_Lock, Shift_Lock, Alt_Lock, ALtGr_Lock.

   Et le touches `collantes'? Il n'y a pas encore eu de nouvelle version
   du paquetage kbd depuis leur introduction dans le noyau 1.3.33, il
   faut donc utiliser leurs codes hexa, par example:

% loadkeys
keymaps 0-15
keycode 54 = 0x0c00
keycode 97 = 0x0c02
keycode 100 = 0x0c03
%

   rend les Shift, Ctrl et Alt de droite collantes.

16. Changer le mode vido

   Pour autant que je sache, il y a 6 manires de changer de mode
   rsolution:

   1. A la compilation: changer la ligne

        SVGA_MODE=      -DSVGA_MODE=NORMAL_VGA

   dans /usr/src/linux/Makefile.

   1A. Aprs la compilation: utiliser rdev -v - une affreuse magouille,
   mais bon, a marche.

   2. Au dmarrage: mettre vga=ask dans le fichier de config de lilo, qui
   demandera au boot le mode voulu. Une fois dcid, remplacer par
   vga=LePlusJoliMode.

   3. En cours de route: A. Utiliser la commande resizecons. (C'est un
   programme trs primitif utilisant l'ioctl VT_RESIZE.) B. Utiliser
   SVGATextMode. (C'est une version moins primitive)

   4. Pas "sur la console": Sous dosemu, ou avec svgalib etc. on peut
   changer le mode vido de la carte cran sans que le pilote de la
   console s'en aperoive. C'est parfois utile pour configurer resizecons
   ou SVGATextMode:sous dosemu se mettre dans le mode vido voulu grce 
   un programme DOS utilisant ce mode, puis dans une autre console,
   rcuprer les paramtres de ce mode. Il ne reste plus qu' utiliser
   ces donnes pour l'initialisation de resizecons et SVGATextMode. Dans
   certains cas la carte vido se retrouve dans un mode inutilisable, le
   moyen le plus simple pour se sortir de l est de lancer dosemu,
   laisser le BIOS mettre un mode vido correct, puis tuer dosemu (avec
   kill -9).

16.1 Instructions pour l'utilisation de resizecons

   Rcuprer svgalib et compiler le programme restoretextmode. Booter la
   machine dans tous les modes vido possibles (en mettant vga=ask dans
   le fichier config de lilo), et sauvegarder les registres vido dans
   des fichiers CxL (C=Colonnes, L=Lignes), par exemple 80x25, 132x44,
   etc. Placer ces fichiers dans /usr/lib/kbd/videomodes. Dsormais
   resizecons 132x44 changera le mode vido (et enverra le signal
   SIGWINCH  tous les processus qui ont besoin de savoir que la
   rsolution a chang, et chargera une nouvelle police si ncessaire).

   A prsent, resizecons ne change de mode que s'il y a assez de mmoire
   pour contenir  la fois l'ancienne et la nouvelle console.

17. Changer la vitesse de rptition du clavier

   Au dmarrage, le noyau met la vitesse de rptition  sa valeur
   maximale. Pour la plupart des claviers c'est raisonnable, mais sur
   certains il devient quasiment impossible d'effleurer une touche sans
   avoir trois fois le mme caractre. Dans ce cas utiliser le programme
   kbdrate(8) pour changer la vitesse de rptition ou si a ne suffit
   pas supprimer la section:
     _________________________________________________________________

     ! set the keyboard repeat rate to the max

         mov     ax,#0x0305
         xor     bx,bx           ! clear bx
         int     0x16
     _________________________________________________________________

   de /usr/src/linux/[arch/i386/]boot/setup.S.

18. Economiseur d'cran

   setterm -blank _nn_ rgle le dlai d'extinction de l'cran  _nn_
   minutes d'inactivit. (Avec _nn_ = 0, l'conomiseur d'cran est
   dsactiv.)

   L'option s de xset(1) rgle les paramtres de l'conomiseur d'cran de
   X.

   Les modes d'conomie d'nergie du moniteur peuvent tre
   activs/dsactivs par le programme setvesablank donn dans les
   commentaires au dbut du fichier
   /usr/src/linux/drivers/char/vesa_blank.c.

19. Quelques proprits du VT100 - mode application

   : Parfois les touches de curseur produisent des codes bizarres?

   Quand le terminal est en mode application, les touches de curseur
   produisent les codes Esc O x et sinon Esc [ x, avec x = A,B,C ou D.
   Certains programmes mettent le termnial en mode application et si on
   les tue avec un kill -9, ou s'il se plantent, le terminal restera dans
   ce mode.
        % echo -e '\033c'

   rinitialise les proprits du terminal courant. Si on veut passer en
   mode application:
        % echo -e '\033[?1h'

   et si on veut en sortir:
        % echo -e '\033[?1l'

20. Incompatibilit matrielle

   Quelques personnes ont not des pertes de caractres taps lors d'un
   accs disquette. Il semblerait que ce soit un problme avec les cartes
   mres Uni-486WB. (SVP envoyez moi un mail pour confirmer [Oui, j'ai le
   mme problme], infirmer [Non, tout va bien avec ma carte Uni-486WB],
   ou modifier [Ma machine Xyzzy a le mme problme].)

   Certaines personnes ont eu des blocages alatoires du clavier -
   parfois associs  une activit disque dur ou une autre entre/sortie.

   ulf@rio70.bln.sni.de (Ulf Tietz) crit:

     `J'avais ce genre de problmes quand ma carte mre avait des
     rglages trop rapides. En remettant les dlais (CLK, wait-states,
     etc.)  des valeurs plus raisonnables, tout est rentr dans
     l'ordre.'

   bhogan@crl.com (Bill Hogan) crit:

     `Si vous avez un BIOS AMI, vous pouvez essayer de mettre le
     paramtre Gate A20 emulation sur 'chipset' (si cette option
     existe). Quand cette option tait sur n'importe quoi d'autre
     ('fast', 'both', 'disabled') j'avais souvent des blocages du
     clavier.'

   --------------------------------------------------------------------

   Additions et corrections sont les bienvenues.

   Andries Brouwer - aeb@cwi.nl

   (Bruno Viaris - Viaris@Yoko.ENS-Cachan.Fr pour la traduction)
