Modification des touches du clavier avec Xkb

Le tutoriel ci-dessous a été réalisé sous Mandriva 2007.
Les fichiers de configuration sont dans /usr/share/X11/xkb/
Pour Mandriva 2006, ils étaient dans : /etc/X11/xkb/

Configuration actuelle :

La commande setxkbmap -print vous donne la configuration actuelle du clavier :

En console :
[user@fixe ~]$ setxkbmap -print
xkb_keymap {
        xkb_keycodes  { include "xfree86+aliases(azerty)"       };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc(pc105)+fr+compose(rwin)"    };
        xkb_geometry  { include "pc(pc105)"     };
};

Enregistrez le code renvoyé dans un fichier, par exemple dans /home/user/.xkb/standard.xkb

Explications :

xkb_keycodes  { include "xfree86+aliases(azerty)"       }; détermine le fichier qui lie de code matériel des touches à leur code logiciel :
- ici c'est /usr/share/X11/xkb/keycodes/xfree86 qui est chargé,
- ainsi que le paragraphe "azerty" de /usr/share/X11/xkb/keycodes/aliases.

xkb_symbols   { include "pc(pc105)+fr+compose(rwin)"    }; détermine les fichiers qui affectent ce que renvoient les touches à l'écran à partir de leur code logiciel.
- pc(pc105) appelle le fichier /usr/share/X11/xkb/symbols/pc en chargeant ce qui se trouve dans les paragraphes "basic" et "pc105".
- fr appelle (en sur-couche au fichier pc) le fichier /usr/share/X11/xkb/symbols/fr.
- compose(rwin) est une option qui affecte à la touche "windows droite" la fonctionne "compose" de linux.

Aucun de ces fichiers ne devra être modifié !!!

Modifications :

Faites une copie du fichier standard.xkb que vous venez de créer, par exemple dans le fichier /home/user/.xkb/frperso.xkb.

La section à modifier dans frperso.xkb sera xkb_symbols.

Exemple concret :
  1. Déterminer le code matériel de la touche

    Je souhaite que la touche * du pavé numérique renvoie × (multiplié, et pas la lettre x ...)

    En console lancer xev.
    Un tas de choses sans importance s'affiche ...

    Taper sur * au clavier, la console renvoie :

    KeyRelease event, serial 31, synthetic NO, window 0x2c00001,
        root 0x4c, subw 0x0, time 452824444, (-426,325), root:(335,351),
        state 0x10, keycode 63 (keysym 0xffaa, KP_Multiply), same_screen YES,
        XLookupString gives 1 bytes: (2a) "*"
        XFilterEvent returns: False

    En particulier, ce qui nous intéresse est le keycode 63 qui est le code matériel de la touche.

  2. Déterminer le code logiciel de la touche

    Éditer le fichier /usr/share/X11/xkb/keycodes/xfree86.
    Rechercher "63" ; on trouve :
        <KPMU> =  63;                     (ne pas s'arrêter à K63, I63, ...)

    Donc la touche matérielle 63 porte le code logiciel KPMU.

  3. Trouver l'affectation de la touche

    Chercher "KPMU" dans les fichier /usr/share/X11/xkb/symbols/pc et /usr/share/X11/xkb/symbols/fr.
    Dans le fichier pc, on trouve

        key <KPMU> {
            type="CTRL+ALT",
            symbols[Group1]= [ KP_Multiply,    XF86_ClearGrab ]
        };

  4. Modifier le comportement de la touche

    Si on veut obtenir × à la place de *, il faut remplacer KP_Multiply par multiply (voir ce lien pour trouver ce nom).
    Le paragraphe deviendra donc :

                 key <KPMU> {
                      type= "CTRL+ALT",
                      symbols[Group1]= [     multiply,  XF86_ClearGrab ]
                 };

  5. Modifier donc le fichier /home/user/.xkb/frperso.xkb qui devra contenir (modifications en gras) :

    xkb_keymap {
            xkb_keycodes  { include "xfree86+aliases(azerty)"       };
            xkb_types     { include "complete"      };
            xkb_compat    { include "complete"      };
            xkb_symbols "perso" {
                 include "pc(pc105)+fr+compose(rwin)"
                 key <KPMU> {
                      type= "CTRL+ALT",
                      symbols[Group1]= [     multiply,  XF86_ClearGrab ]
                 };
            };
            xkb_geometry  { include "pc(pc105)"     };
    };

  6. Utiliser votre "nouveau" clavier

    En console, lancer la commande :
         xkbcomp ~/.xkb/frperso.xkb "$DISPLAY"

Automatisation et divers :


Pour revenir à l'ancien clavier :
     xkbcomp ~/.xkb/standard.xkb "$DISPLAY"

Pour lancer les modifications au démarrage de la session, ajouter dans /home/user/.bash_profile :
     xkbcomp ~/.xkb/frperso.xkb "$DISPLAY"

La modification du clavier ne fonctionne pas avec les logiciels utilisant wine, donnant même des comportements étranges aux autres touches.

Une explication très complete peut aussi être trouvée ici : http://club.mandriva.com/xwiki/bin/view/KB/KeyboardXkb1

Signaler une erreur, une modification :

Retour thème Retour