The Linux Keyboard HOWTO
 Andries Brouwer, [email protected]
 v2.1, 8 Novembre 1995 - version francaise Bruno Viaris

 Ce  document  traite  de l'utilisation du clavier, de la console et de
 caracteres non ASCII sous Linux.

 11..  PPrrooggrraammmmeess uuttiilleess

 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).)

 22..  LLee ccllaavviieerr -- ggeenneerraalliitteess

 Quand on appuie sur une  touche,  le  controleur  clavier  envoie  des
 scancodes   au   pilote  clavier  du  noyau.  Certains  claviers  sont
 programmables, mais en general les scancodes  sont  fixes.   Quand  le
 pilote  clavier est en _m_o_d_e _s_c_a_n_c_o_d_e (dit aussi _m_o_d_e _r_a_w), le noyau se
 contente de transmettre les codes tels quels a l'application, c'est ce
 qui  se  passe  sous  X.  Sinon  le flux de scancodes est decompose en
 keycodes correspondant a l'appui ou au relachement d'une  touche.  (Le
 simple   fait  d'appuyer  sur  une  touche  peut  produire  jusqu'a  6
 scancodes, reduits ici en un seul keycode.) Si le pilote  clavier  est
 en _m_o_d_e _k_e_y_c_o_d_e (ou _m_o_d_e _m_e_d_i_u_m_r_a_w), l'application recoit les keycodes
 (ce mode est utilise, par exemple, par showkey).  Sinon, les  keycodes
 sont  traduits  d'apres une table (keymap), ensuite, soit un caractere
 (ou un chaine)  est  envoye  a  l'application,  soit  une  action  est
 declenchee.  (Exemple: si on appuie et relache 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  adaptee).   Si  on  appuie  et
 relache  la  touche  Suppr,  le clavier envoie les scancodes 0xE0 0x53
 0xE0 0xD3, convertis en keycodes 111 et 239, ce qui  donne  finalement
 la  sequence  ESC [ 3 ~. Ctrl-Alt-Suppr est une combinaison de touches
 qui declenche une action.)

 La conversion de scancodes exotiques en keycodes peut etre  programmee
 avec  l'utilitaire setkeycodes, mais peu de gens ont besoin.  La table
 de traduction des keycodes en caracteres, chaines ou actions, i.e.  la
 keymap,  se  manipule  grace  a  loadkeys.  Pour plus de details, voir
 getkeycodes(8), setkeycodes(8), dumpkeys(1), loadkeys(1).

 Dans ce paragraphe, le terme `envoye a l'application' signifie en fait
 `transmis  au  pilote  du terminal'. Le texte est ensuite traite de la
 meme facon que s'il venait  d'une  ligne  serie.  Les  details  de  ce
 traitement sont ajustes par le programme stty.

 33..  LLaa ccoonnssoollee -- ggeenneerraalliitteess

 A  l'inverse,  quand  on  envoie  des  caracteres  a  la  console, ils
 subissent un traitement standard (regle par stty), puis  sont  envoyes
 au  pilote  de  la console.  Le pilote de la console emule un terminal
 VT100, et scrute les donnees recues  pour  intercepter  les  sequences
 escape (du genre deplacement du curseur, effacement de l'ecran, etc.).
 Les autres octets sont, apres une eventuelle conversion par  la  table
 de  conversion  de  la console, ecrits dans la memoire video. La carte
 video affiche ces caracters en utilisant une police  stockee  dans  sa
 memoire.  On  peut  changer  cette  police en utilisant setfont, et la
 table de conversion de la console peut  etre  modifiee  avec  mapscrn.
 Pour plus de details, voir plus bas.

 44..  RReeiinniittiiaalliisseerr llee tteerrmmiinnaall

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

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

 La commande reset reinitialise le pilote de la console. Elle est  bien
 utile  quand  l'ecran  est  plein  de  ces jolis caracteres graphiques
 illisibles, ou quand l'affichage est reduit a la  ligne  du  bas.   Si
 vous  ne  disposez pas de cette commande, ou si elle fait autre chose,
 voici le remede: mettez ces deux lignes  dans  un  fichier  executable
 reset quelque part dans votre PATH:

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

 ce qui envoie la sequence ESC c a la console.  Si vous avez charge une
 police bizarre et que vous voulez revenir a la police par defaut,

      % setfont

 fera l'affaire (a condition que la police par defaut soit a sa place).
 Sur  de vieux terminaux, l'utilisation de tabs peut demander un delai,
 executer alors

      % stty tab3

 (voir stty(1)). Pour changer de mode  video,  utiliser  resizecons  ou
 SVGATextMode.   Ceci  regle  generalement  la  partie affichage.  Cote
 clavier, il peut y avoir encore pas mal de problemes. 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'exe-
 cuter  la  moindre  commande.  (Voir "Comment sortir du mode raw" plus
 loin.)

 44..11..  KKeeyybbooaarrdd hhaarrddwwaarree rreesseett

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

 Je n'ai cependant jamais entendu parler de cas ou  cela  ait  pose  un
 probleme.

 Certains  claviers  ont  une  fonction de reprogrammation des touches.
 Stormy Henderson ([email protected]) ecrit:

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

 55..  DDeelleettee eett BBaacckkssppaaccee

 55..11..  CCoommmmeenntt cchhooiissiirr llee ccaarraacctteerree aa uuttiilliisseerr ppoouurr eeffffaacceerr llee  ddeerrnniieerr
 ccaarraacctteerree ttaappee

      % stty erase ^?

 Si le caractere est efface, mais d'une maniere bizarre, c'est que  les
 parametres du terminal sont mauvais. Si echoprt est active, les carac-
 teres effaces s'affichent entre \ et /.  Si echoe est  desactive,  les
 caracteres  ne  sont  plus effaces a l'ecran, mais leur effacement est
 signale  par   l'affichage   du   caractere   d'effacement,   exemple:
 Libux###nux (avec # comme caractere d'effacement).

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

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

 55..11..11..  ``GGeettttyy ccoommpprreennaaiitt bbiieenn DDEELL eett BBSS,, mmaaiiss pplluuss mmaaiinntteennaanntt ??''

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

 Les DEL sont desormais ignores (comme le devrait toute emulation vt100
 fidele). Choisissez un meilleur getty, i.e.,  qui  n'affiche  pas  les
 DEL.

 55..11..22..   ``LLooggiinn  nnee  ffaaiitt  ppaass llaa mmeemmee cchhoossee aauu pprreemmiieerr eett aauu ddeeuuxxiieemmee
 eessssaaii??''

 Au  premier  essai,  on  parle  a  getty,  au  deuxieme  a login, deux
 programmes distincts qui peuvent se comporter differemment.

 55..22..  CCoommmmeenntt ddiirree aa LLiinnuuxx qquueell ccooddee ggeenneerreerr aa ll''aappppuuii ssuurr uunnee ttoouucchhee

 Quand  on  utilise  la  console, ou plus precisement, 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 a partir de  la
 configuration  du clavier de la console. Bien que les deux systemes ne
 soient pas 100% compatibles, cette technique rend generalement l'util-
 isation de xmodmap superflue.

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

      % loadkeys
      keycode 14 = BackSpace
      %

 55..22..11..  ``PPoouurrqquuooii llaa ttoouucchhee BBaacckkSSppaaccee  nnee  ggeenneerree  ppaass  BBaacckkSSppaaccee  ppaarr
 ddeeffaauutt ??''

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

 (ii) Parce que Linus en a decide ainsi.

 55..33..  CCoommmmeenntt ddiirree aa XX dd''eecchhaannggeerr DDeelleettee eett BBaacckkssppaaccee

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

 Ou, si vous voulez juste que Backspace genere le code BackSpace:
      % xmodmap -e "keycode 22 = BackSpace"

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

      % xmodmap -e "keycode 107 = Delete"

 (mais generalement c'est deja la disposition par defaut).

 55..44..   CCoommmmeenntt  ddiirree  aa  eemmaaccss ccee qquu''iill ddooiitt ffaaiirree ddeess ccooddeess DDeelleettee eett
 BBaacckkssppaaccee

 Mettez dans votre .emacs les lignes:

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

 Bien  sur,  vous pouvez associer d'autres commandes a d'autres touches
 de la meme maniere.

 55..55..  CCoommmmeenntt ddiirree aa eemmaaccss ddee ppeerrmmuutteerr DDeelleettee eett BBaacckkssppaaccee

 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)

 55..66..  CCoommmmeenntt ddiirree aa kkeerrmmiitt dd''eecchhaannggeerr DDeelleettee eett BBaacckkssppaaccee

 Mettez dans votre .kermrc les lignes:

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

 55..77..  CCoommmmeenntt rreegglleerr xxtteerrmm sseelloonn vvooss mmooddeess ddee tteerrmmiinnaall pprreeffeerreess

 Normalement  xterm  herite  des  modes  de  terminal  du processus qui
 l'appelle.  Pour xdm, les caracteres erase et kill sont # et @,  comme
 sur  les  bons  vieux  Unix  Version 6.  Si ca ne vous plait 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, a con-
 dition d'executer la commande

        xrdb $HOME/.Xresources

 dans votre $HOME/.xinitrc.

 55..88..  CCoommmmeenntt ddiirree aa xxmmoossaaiicc qquuee llaa ttoouucchhee BBaacckkssppaaccee ggeenneerree uunnee DDEELL

 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 defaut, Linux et XFree86 ont leur touches Backspace et Delete
         mal configurees. Tous les programmes Motif (y compris Netscape
         Navigator) auront les memes problemes.

         Les specifications Motif disent que Backspace doit effacer le
         caractere precedent et Delete le caractere suivant. Par defaut sous
         Linux et XFree86 Backspace et Delete generent le code DEL.

         Le probleme peut etre resolu en utilisant un programme tel que
         xmodmap, xkeycaps, ou loadkeys pour que la touche Backspace
         genere le code BackSpace au lieu de Delete.

         Une autre solution consiste a 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 resoudre ce probleme.
         Si vous le faites, vous annulez toutes les autres programmations
         de touches dans les boites textes de Netscape Navigator.

 55..99..  EEtt lleess ffiicchhiieerr tteerrmmccaapp eett tteerrmmiinnffoo??

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

 66..  LLeess ttaabblleess ddee ccaarraacctteerreess ddee llaa ccoonnssoollee

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

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

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

 La  sequence ESC c provoque une reinitialisation complete du terminal,
 ce qui peut etre necessaire si l'ecran est tout brouille. La  commande
 echo  ^V^O, souvent conseillee, 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  entree
 :rs=\Ec:), alors vous pouvez utiliser setterm -reset.

 La  table  de  conversion  d)  peut  etre  definie par mapscrn(8).  Le
 resultat est que si un symbole c est affiche, c'est  le  symbole  s  =
 map[c]  qui  est mis dans la memoire video.  L'image du caractere s se
 trouve dans la memoire de la carte video et peut  etre  modifiee  avec
 setfont(8).

 77..  CChhaannggeerr ddee ccoonnssoollee

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

 XFree86  1.3  ne  sait  pas  que  la  touche Alt est enfoncee quand on
 rappelle la fenetre X. Il faut donc  relacher  Alt  avant  de  pouvoir
 rechanger  de  console.   Pourtant,  ca  pourrait  marcher:  le  noyau
 memorise toujours l'etat appuye/relache des touches. (Autant que faire
 se  peut:  certains clavier n'emettent pas de scancode quand on appuie
 dessus (ex: les touches PFn d'un FOCUS 9000) ou quand on  les  relache
 (ex: la touche Pause de la plupart des claviers).)

 XFree86 1.3 sauve les polices chargees sur la carte video quand il est
 demarre, et les restaure lors d'un  changement  de  console.  Donc  le
 resultat  d'un  setfont  sur  une  console virtuelle est annule par un
 aller retour dans la fenetre X.  L'utilisation de setfont sous X donne
 des resultats bizarres...

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

 77..11..  CChhaannggeerr llee nnoommbbrree ddee CCoonnssoolleess VViirrttuueelllleess

 Cette question est toujours posee de temps en temps, mais  la  reponse
 est:  il  y en a deja suffisament.  Depuis la version 1.1.54 du noyau,
 il y a entre 1 et 63 consoles virtuelles.  Une  nouvelle  console  est
 creee des qu'elle est ouverte.  Elle peut etre supprimee avec disalloc
 (mais il faut que plus aucun processus ne lui soit associe).

 Pour les vieux noyaux, changer la ligne

      #define NR_CONSOLES     8

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

 Quand les consoles sont allouees dynamiquement,  il  est  generalement
 plus  simple  de  n'avoir  qu'un ou deux getty. D'autres consoles sont
 ouvertes par open -l -s bash. Les consoles inutilisees (sans processus
 associe) sont desallouees 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-FlecheHaute creera  (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 listes
 dans /etc/securetty.

 88..  CCttrrll--AAlltt--DDeell eett aauuttrreess ccoommbbiinnaaiissoonnss ssppeecciiaalleess

 88..11..  CCttrrll--AAlltt--DDeell ((BBoooott))

 Quand on  appuie  sur  Ctrl-Alt-Del  (ou  toute  autre  combinaison  a
 laquelle  loadkeys  associe  le keycode Boot), soit la machine reboote
 immediatement (sans sync), soit le signal SIGINT est envoye a init (ce
 qui  est  le  comportement  par defaut, changeable par l'appel systeme
 reboot(), voir ctrlaltdel(8)).  Certains init changent le  defaut.  Ce
 qui  se  produit quand init recoit SIGINT depend de la version du init
 utilisee  et  est  souvent  determine  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 assigne
 par defaut a Boot.

 88..22..  AAuuttrreess ccoommbbiinnaaiissoonnss

 Combinaisons par defaut 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-FlecheDroite
 Decr_Console    Alt-FlecheGauche
 Last_Console    Alt[Gr]-ImprEcran
 Scroll_Backward Shift-PgPrec
 Scroll_Forward  Shift-PgSuiv
 Compose         Ctrl-.          (Ctrl-: sur clavier azerty)
 Caps_On         <pas defini>    (Par defaut CapsLock est un va-et-vient,
 Caps_Shift      <pas defini>    ces Keycodes servent a recreer le desagreable
                                 comportement MS-Keyb Fr)

 88..33..  CCoommbbiinnaaiissoonnss ssoouuss XX

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

 Sur certaines cartes-meres, Ctrl-Alt-KP- et  Ctrl-Alt-KP+  emulent  le
 bouton Turbo. Ces sequences 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) a non-Turbo (8 or 12 MHz) et vice-versa.  (souvent ce comporte-
 ment peut etre desactive par un cavalier sur la carte-mere.)

 Perry F Nguyen ([email protected]) ecrit:

      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 defini, et  ce  jusqu'a  ce  que
      celui-ci soit tape.

 88..44..  CCoommbbiinnaaiissoonnss ssoouuss DDoosseemmuu

 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)

 88..55..  CCoommppoossiittiioonn ddee ssyymmbboolleess

 Un symbole peut etre construit en utilisant plusieurs frappes.

 +o  En  mode  Ascii,  taper  un  code  Ascii  en  decimal  sur  le pave
    numerique, tout en maintenant la touche Alt  enfoncee,  produit  le
    caractere  en  question  quand on relache Alt. (En mode Unicode, il
    faut taper le code hexadecimal a 4 chiffres du symbole)

 +o  L'appui sur un accent mort puis sur une lettre produit cette lettre
    accentuee  (si  possible,  sinon l'accent suivi de la lettre).  Les
    touche  mortes  sont  definissables  par  l'utilisateur  (grace   a
    loadkeys(1)). Il y a cinq possibilites:

    accent                  keycode mort            keycode normal
    ------------------------------------------------------
    accent grave            dead_grave              grave
    accent aigu             dead_acute              apostrophe
    accent circonflexe      dead_circumflex         asciicircum
    tilde                   dead_tilde              asciitilde
    trema                   dead_diaeresis          diaeresis

 Par  defaut  aucune  touche  du  clavier n'est morte.  Le resultat est
 celui de Compose + accent + lettre (et  est  donc  redefinissable,  cf
 plus bas).

      NDT:  pour  des francophones utilisant un clavier Azerty, il
      vaut  generalement  mieux  se  contenter  de  definir  comme
      touches mortes l'accent circonflexe et le trema de la touche
      a 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 general toutes les
      touches mortes possibles. Il faut donc pour ressusciter  ces
      touches,  remplacer  le  keycode  mort par le keycode normal
      dans la table chargee au demarrage par loadkeys.

 +o  Compose suivi de deux symboles produit une  combinaison  des  deux.
    Cette  combinaison  est  redefinissable.  Il  y  a  a  ce  jour  68
    combinaisons par defaut qui peuvent etre affichees par  dumpkeys  |
    grep compose.

 +o  Depuis  la  version  1.3.33  du  noyau, il est possible d'avoir des
    touches "collantes" (plus ou moins comme Escape)  grace  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 a noter qu'il existe au moins trois mecanismes  de  composition
 distincts:

 1. Le pilote clavier de Linux, configure par loadkeys.

 2. Le mecanisme de X - voir X386keybd(1), ou XFree86kbd(1).
    Sous X11R6 : editer /usr/X11R6/lib/X11/locale/iso8859-1/Compose.

 3. Le mecanisme d'emacs, active 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-cedille; pour Linux et emacs,
    seule  la  premiere combinaison est correcte. Les combinaisons de X
    sont fixes, celles de Linux et  emacs  sont  reconfigurables.   Les
    trois listes par defaut sont assez similaires, mais il y a quelques
    differences.

 99..  DDiivveerrsseess pprroopprriieetteess ddee llaa ccoonnssoollee

 Voir loadkeys(1), setleds(1), setmetamode(1) pour  les  codes  generes
 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  proprietes  telles  que  les
 couleurs de l'ecriture et du fond, l'economiseur d'ecran et la vitesse
 de repetition 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 definit les sequences escape utilisees 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  crees  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  considere  /dev/tty0  comme un synonyme de la console virtuelle
 courante.  XFree86 1.3 change le proprietaire de /dev/tty0, mais ne le
 restaure  qu'a  la  sortie.  Or  dumpkeys  risque de ne pas marcher si
 quelqu'un d'autre est  proprietaire  de  /dev/console;  dans  ce  cas,
 lancer X et en sortir peut arranger les choses.

 1100..  CCoommmmeenntt ssoorrttiirr dduu mmooddee RRAAWW

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

 1ere etape: Lancer X.  Appuyez sur la combinaison  2-F12-=  :  appuyez
 sur  2  puis  F12  (sans  lacher  2)  et  puis = (sans lacher les deux
 autres), le tout assez  rapidement!  Ca  lance  X.   (Explication:  si
 l'appui  sur  une  touche  produit le keycode K, alors son relachement
 produit K+128. Votre shell risque de na pas apprecier ces  caracteres,
 donc  on  evite  de les lui envoyer en ne lachant pas les touches. `2'
 produit un ^C qui annule tout ce qui a ete tape avant. F12 produit  un
 X  et `=' le code entree. Et tout ca vite fait avant que la repetition
 des touches ne commence...)

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

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

 3eme etape: 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 preparer pour cette occasion, faites de  \215A\301
 (3  symboles)  un  alias de kbd_mode -a.  Desormais, l'appui sur F7 en
 mode RAW remettra tout en ordre.

 1111..  LLaa vvaarriiaabbllee TTEERRMM

 De nombreux programmes utilisent  la  variable  TERM  et  la  base  de
 donnees /etc/termcap ou /usr/lib/terminfo/* pour trouver quelle chaine
 de commande efface l'ecran, deplace le curseur, etc., et parfois  pour
 savoir  quelle  chaine  est  envoyee  par  la touche backspace, ou les
 touches de fonction, etc. Cette variable est d'abord  definie  par  le
 noyau (pour la console). Generalement elle est redefinie par getty, en
 utilisant  /etc/ttytype  ou  l'argument  specifie  dans  /etc/inittab.
 Parfois elle est encore changee par /etc/profile.

 Les anciens systemes utilisent TERM=console ou TERM=con80x25. Les plus
 recents (avec ncurses  1.8.6)  utilisent  la  valeur  plus  specifique
 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 defaut est TERM=linux.

 Si votre termcap n'a pas d'entree `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.

 1111..11..  TTeerrmmiinnffoo

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

 1122..  CCoommmmeenntt ffaaiirree ppoouurr qquuee dd''aauuttrreess pprrooggrraammmmeess aacccceepptteenntt  lleess  ccaarraacc--
 tteerreess nnoonn--AASSCCIIII

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

 Tout  d'abord,  le huitieme bit doit survivre au processus d'entree 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-etre aussi

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

 dans votre $HOME/.emacs.  (Cette derniere 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, a veri-
 fier 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, definissez les variables:

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

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

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

 G. Pour elm,  mettez  displaycharset  a  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 huitieme  bit  pour
      la  video  inversee  (voir  le  flag  _STANDOUT  defini dans
      /usr/include/curses.h).  Cependant ncurses semble  fonction-
      ner 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  ete  corrige  et  fait  un
 setlocale(LC_CTYPE,""); et  2)  de  definir  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 apres edition du fichier de configuration. J'ai aussi lu: joe:
 mettez l'option -asis dans /usr/lib/joerc en premiere colonne.

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

 Une  belle  discussion  sur  le  theme  de l'ISO-8859-1 et sur comment
 manipuler les caracteres 8-bits est disponible dans
  <ftp://grasp.insa-lyon.fr/pub/faq/fr/accents>  (en  francais).    Une
 autre, en anglais, peut etre trouvee a
  <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>.

 1133..  QQuuee ffaaiitt eexxaacctteemmeenntt XXFFrreeee8866--22..11 aa ll''iinniittiiaalliissaattiioonn ddee ssaa  kkeeyymmaapp??

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

 D'abord  X  lit  le  fichier Xconfig, ou 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 defaut, c'est la colonne  LeftAlt  qui  sert  pour  Mod,  sauf  si
 CtlDroit  est  defini comme ModeShift ou ModeLock, dans ce cas ce sont
 les entrees RightCtl qui servent pour Mod. (Sauf si AltGr  est  defini
 comme  Mod  dans  Xconfig,  auquel  cas  c'est la colonne RightAlt qui
 sert.)  Ceci determine comment les 4 entrees de XFree86 sont  choisies
 parmi  les  16  de  Linux.  Notons que par defaut Linux ne fait pas la
 difference  entre  les  deux  touche  Control  ou  Shift.  X  fait  la
 dufference.
 Les   touches   "action"   Show_Memory,   Show_State,  Show_Registers,
 Last_Console, Console_n, Scroll_Backward, Scroll_Forward,  Caps_On  et
 Boot  sont  ignorees,  de  meme  pour  les  touches  mortes,  NumLock,
 ScrollLock et Alt+code-ASCII.

 Ensuite,  les  definitions  de  Xconfig  sont  utilisees.  (Donc   une
 definition  de  Compose  dans  Xconfig  annulera celle trouvee dans la
 keymap du noyau.)

 Que deviennent les chaines associees aux touches des fonctions ? Rien,
 ce  concept  n'existe pas sous X. (Mais il est possible de definir des
 chaines associees aux touches de fonction dans xterm - mais  elles  ne
 doivent pas etre interceptees par le gestionnaire de fenetres.)

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

 1144..  TToouucchheess eett ccllaavviieerrss ppaarrttiiccuulliieerrss

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

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

 1155..  EExxeemmpplleess dd''uuttiilliissaattiioonn ddee llooaaddkkeeyyss aanndd xxmmooddmmaapp

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

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

 Les permuter sous X seulement:

        % xmodmap .xmodmaprc

 ou .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 numerotation des touches? Backspace a le numero 14
 sous Linux et 22 sous X... En fait, la numerotation est plus ou  moins
 arbitraire.  Le numero sous Linux peut etre visualise avec showkey(1),
 et le numero sous X avec xev(1). Souvent le numero sous  X  est  8  de
 plus que le numero sous Linux.

 1155..11..  ``JJee nnee ppeeuuxx ttaappeerr qquu''aavveecc uunn sseeuull ddooiiggtt''

 Les  touches  Shift,  Ctrl  et Alt peuvent-elles etre 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 numeros a
 utiliser  sont donnes par showkey (et sont generalement 29 et 97 (Con-
 trol), 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.

 1166..  CChhaannggeerr llee mmooddee vviiddeeoo

 Pour  autant  que  je  sache,  il  y  a  6 manieres de changer de mode
 resolution:

 1. A la compilation: changer la ligne

         SVGA_MODE=      -DSVGA_MODE=NORMAL_VGA

 dans /usr/src/linux/Makefile.

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

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

 3.  En  cours  de route: A. Utiliser la commande resizecons. (C'est un
 programme tres 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 video de la carte ecran  sans  que  le  pilote  de  la
 console s'en apercoive. C'est parfois utile pour configurer resizecons
 ou SVGATextMode:sous dosemu se mettre dans le mode video voulu grace a
 un  programme  DOS  utilisant  ce  mode,  puis dans une autre console,
 recuperer les parametres de ce mode. Il ne reste  plus  qu'a  utiliser
 ces  donnees pour l'initialisation de resizecons et SVGATextMode. Dans
 certains cas la carte video se retrouve dans un mode inutilisable,  le
 moyen  le  plus  simple  pour  se  sortir  de la est de lancer dosemu,
 laisser le BIOS mettre un mode video correct, puis tuer  dosemu  (avec
 kill -9).

 1166..11..  IInnssttrruuccttiioonnss ppoouurr ll''uuttiilliissaattiioonn ddee rreessiizzeeccoonnss

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

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

 1177..  CChhaannggeerr llaa vviitteessssee ddee rreeppeettiittiioonn dduu ccllaavviieerr

 Au  demarrage,  le  noyau  met  la  vitesse  de repetition a 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 meme caractere. Dans ce cas utiliser le  programme
 kbdrate(8)  pour  changer  la vitesse de repetition ou si ca 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.

 1188..  EEccoonnoommiisseeuurr dd''eeccrraann

 setterm -blank _n_n regle le delai d'extinction de l'ecran a  _n_n minutes
 d'inactivite. (Avec _n_n = 0, l'economiseur d'ecran est desactive.)

 L'option s de xset(1) regle les parametres de l'economiseur d'ecran de
 X.

 Les   modes   d'economie   d'energie   du   moniteur   peuvent    etre
 actives/desactives  par  le  programme  setvesablank  donne  dans  les
 commentaires          au          debut           du           fichier
 /usr/src/linux/drivers/char/vesa_blank.c.

 1199..  QQuueellqquueess pprroopprriieetteess dduu VVTT110000 -- mmooddee aapppplliiccaattiioonn

 : 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'

 reinitialise les proprietes du terminal courant.  Si on veut passer en
 mode application:

         % echo -e '\033[?1h'

 et si on veut en sortir:

         % echo -e '\033[?1l'

 2200..  IInnccoommppaattiibbiilliittee mmaatteerriieellllee

 Quelques personnes ont note des pertes de caracteres tapes  lors  d'un
 acces disquette. Il semblerait que ce soit un probleme avec les cartes
 meres Uni-486WB. (SVP envoyez moi un mail pour confirmer [Oui, j'ai le
 meme  probleme], infirmer [Non, tout va bien avec ma carte Uni-486WB],
 ou modifier [Ma machine Xyzzy a le meme probleme].)

 Certaines personnes ont  eu  des  blocages  aleatoires  du  clavier  -
 parfois associes a une activite disque dur ou une autre entree/sortie.

 [email protected] (Ulf Tietz) ecrit:

      `J'avais ce genre de problemes quand ma carte mere avait des
      reglages  trop  rapides. En remettant les delais (CLK, wait-
      states, etc.) a des valeurs plus raisonnables, tout est ren-
      tre dans l'ordre.'

 [email protected] (Bill Hogan) ecrit:

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

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

 Additions et corrections sont les bienvenues.

 Andries Brouwer - [email protected]

 (Bruno Viaris - [email protected] pour la traduction)