09/05/2010

Choisir son keymap X.org 1.8 sans xorg.conf ni hack

X.org 1.8Ce que j’aime sur mon poste principal Gentoo/Linux en “unstable” c’est l’assurance qu’une mise à jour majeure apportera son lot de surprise. Hier je suis passé à X.org 1.8 …

HAL, je te quitte …

HAL barréUn bon nombre d’entre nous a jeté au feu son Xorg.conf lorsque X.org a atteint la maturité suffisante pour deviner efficacement notre matériel.
Sauf que le keymap ne fait pas partie des paramètres devinés. Avec la 1.5, il nous a fallu jouer avec un /etc/hal/fdi/policy/10-keymap.fdi indigeste. Fini tout ça … mais du coup on s’y prend comment pour ne pas retomber dans le Xorg.conf ?

… mais j’hésite encore un peu …

Pour ceux qui ne reculent devant aucun hack cradingue, il est possible de mettre dans tous les ~/.xinitrc

setxkbmap fr

Pour ceux qui aiment regarder dans le passé, retourner au Xorg.conf (BOUH!!) :

Section "InputClass"
    Identifier            "Keyboard Defaults"
    Option           "XkbLayout"  "fr"
EndSection

Rien de bien satisfaisant …

… Oh zut ! Je choisi evdev

Autant vivre avec son temps et utiliser les bons outils. Voici ce que l’on obtient par défaut, out-of-the-box comme ils disent :

$ grep xkb /var/log/Xorg.0.log
[ 95648.133] (**) Option "xkb_rules" "evdev"
[ 95648.133] (**) Option "xkb_model" "evdev"
[ 95648.133] (**) Option "xkb_layout" "us"

Sans grande surprise nous allons devoir agir du coté de /etc/X11/xorg.conf.d/10-evdev.conf
Voici la partie qui nous interesse dans ce fichier :

Section "InputClass"
        Identifier "evdev keyboard catchall"
        MatchIsKeyboard "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

Il nous suffit de reporter l’option qui va bien :

Section "InputClass"
        Identifier "evdev keyboard catchall"
        MatchIsKeyboard "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
        Option "xkb_layout" "fr"
EndSection

Et normalement, en relançant Xorg, vous devez obtenir ceci dans votre /var/log/Xorg.0.log

$ grep xkb /var/log/Xorg.0.log
[ 95648.133] (**) Option "xkb_rules" "evdev"
[ 95648.133] (**) Option "xkb_model" "evdev"
[ 95648.133] (**) Option "xkb_layout" "fr"

Le mot de la fin

Proposer un login manager avec le bon keymap évite pas mal d’ennui avec les non-geek qui composent notre famille, notre entourage professionnel.
Lors d’une rupture technologique telle que X.org en 1.8 nous avons plusieurs méthodes plus ou moins cradingues pour revenir à l’état correct, nous avons aussi des méthodes propres : autant les appliquer.

  1. kore
    | #1

    Très bon article.

    Sais-tu si il existe des outils échanger les signaux de deux touches?

    Je m’explique: Sur les nouveaux HP Envy, pour utiliser les touches F1, F2, etc… il faut faire Fn+F1, Fn+F2, etc… sinon ce sont les fonctions spéciales (volumes +/-, couper wifi, etc…) qui sont actives.

    Peut être que je prendrais un HP Envy 14 lors de sa sortie si je ne trouves pas mieux d’ici là et je me demande si il est possible de simplement changer cela (que de base on accède aux touches F1, F2, etc… directement et que les fonctions spéciales soient accèssibles avec la touche Fn+F1, Fn+F2, etc…).

  2. ckg
    | #2

    Merci 🙂

    Tu as essayé de regarder du côté de http://wiki.archlinux.fr/howto/config_clavier_xmodmap ?

  3. garion
    | #3

    Génial !

    Merci pour cet article 🙂

    J’en profite aussi pour te poser une petite question : sais-tu comment spécifier un modèle particulier de clavier ? Par exemple, pour avoir le mappage oss d’un clavier azerty, avec X.org 1.5, il faut modifier la ligne “oss”. Avec Xorg 1.7, “grep xkb /var/log/Xorg.0.log” donne :
    (**) Option “xkb_rules” “evdev”
    (**) Option “xkb_model” “evdev”
    (**) Option “xkb_layout” “fr”
    (**) Option “xkb_variant” “oss”
    Suffit-il donc d’ajouter ” Option “xkb_variant” “oss” ” pour que ça fonctionne avec X.org 1.8 ?

  4. kore
    | #4

    @ckg

    Merci beaucoup ckg. 😀

  5. ckg
    | #5

    @garion
    Merci 🙂

    On peut lire dans evdev.c ceci :

    SetXkbOption(pInfo, "xkb_variant", &pEvdev->rmlvo.variant);
    if (!pEvdev->rmlvo.variant)
      SetXkbOption(pInfo, "XkbVariant", &pEvdev->rmlvo.variant);

    Donc, a priori, ça devrait être bon.
    Les options xkb_rules, xkb_model, xkb_layout, xkb_variant et xkb_options restent avec la même syntaxe qu’avant.

    @kore
    😉

  6. garion
    | #6

    @ckg

    Merci pour la réponse, je testerai dès que X.org 1.8 sera disponible dans le dépôt extra de Arch.

    Juste une remarque concernant mon message précédent, je l’avais édité et konqueror a planté :$ une phrase a été raccourcie plus que prévue. La fin de la phrase “il faut modifier la ligne oss” est à remplacer par “il faut modifier la ligne oss”. Voilà c’était juste pour corriger cette erreur.

  7. | #7

    je kiff xorg 1.8

  8. | #8

    Si quelqu’un a réussi à réactiver sans hal le “tap-to-click” dans son touchpad via udev ça m’intéresse !!!

  9. | #9

    @bragon
    Voila mon /etc/X11/xorg.conf.d/20-synaptics.conf

    Section "InputClass"
            Identifier "synaptics"
            Driver "synaptics"
            Option "VertEdgeScroll" "true"
            Option "HorizEdgeScroll" "true"
            MatchIsTouchpad "on"
            Option "TapButton1" "1"
    EndSection

    TapButton1 n’est pas le seul de la famille. Si tu trouves pas ton bonheur regarde dans udev.c

  10. | #10

    toujours pas… :/

  11. Ligier
    | #11

    Voilà une approche plaisante : quand les produits évoluent on cherche la solution propre adaptée à la nouvelle configuration, et on évite les bricolages et autres solutions crad….

    En tout cas merci, pour cet article bien fait, je suis passé en xorg 1.8 ce matin sur une ArchLinux (je dois pas être le seul) et évidemment le premier loginn X ne marche plus parce qu’il y a quelques caractères qui ne sont plus correctement mappés.

  12. thedsi
    | #12

    le fichier de configuration pour moi avec udev-161 et xorg-server-1.8.2
    est /usr/share/X11/xorg.conf.d/10-evdev.conf
    on peut y configurer ca souris/touchpad et le clavier .

  13. Barul
    | #13

    @bragon: J’ai trouvé une solution qui fonctionne chez moi pour que le tapping soit de nouveau effectif sous Gentoo avec xorg-server 1.9.2. J’ai fais un fichier de conf et j’ai mis ça à l’intérieur, depuis ça fonctionne:

    Section “InputClass”
    Identifier “tap-by-default”
    MatchIsTouchpad “on”
    Option “TapButton1” “1”
    EndSection

  1. | #1