Binômer avec un clavier dvorak et un clavier azerty

Nous avons récemment succombé à la geekerie du moment : un clavier Type Matrix dvorak.

Clavier Type Matrix 2030 dvorak

Clavier Type Matrix 2030 dvorak

Sous Linux, la commande setxkbmap permet de changer le mapping de son clavier. Ainsi, pour passer en Dvorak avec la composition pour les accents (3 touches pour écrire é : compose (le Alt de droite), apostrophe, e), il faut écrire :

setxkbmap dvorak en -option compose:ralt

Après une période d’apprentissage, nous sommes assez contents, mais tout le monde n’est pas prêt ou n’a pas forcément envie de faire cet effort.

Dans un premier temps, j’ai donc mappé sur le raccourci Windows + F5 une commande de basculement dvorak/azerty. (NB: La touche Windows s’appelle Start sur mon clavier)

J’utilise LXDE comme gestionnaire de fenêtres, un mapping se rajoute ainsi dans le fichier ~/.config/openbox/lxde-rc.xml :

<keybind key="W-F5">
    <action name="Execute">
        <command>~/bin/switch_dv_fr</command>
    </action>
</keybind>

Le script de bascule ~/bin/switch_dv_fr est le suivant :

#!/bin/bash

kbd=`setxkbmap -query | grep layout | awk '{print $2}'`

if [ 'fr' = $kbd ]
then
        notify-send 'Keyboard is now Dvorak'
        setxkbmap dvorak en -option compose:ralt
else
        notify-send 'Keyboard is now French'
        setxkbmap fr -option ""
fi

(notify-send permet d’afficher une notification dans Linux)

Ce n’était toujours pas satisfaisant, car il fallait taper une combinaison de touches avant de se passer le clavier. Heuereusement, avec Linux il est possible d’avoir deux claviers branchés avec deux mappings différents. Le programme xinput permet de configurer les périphériques d’entrée. Pour obtenir la liste de tous les périphériques branchés sur sa machine, il suffit de taper xinput list. Chez moi cela donne :

⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech USB Optical Mouse                id=8    [slave  pointer  (2)]
⎜   ↳ HID 046a:0023                             id=10   [slave  pointer  (2)]
⎜   ↳ TypeMatrix.com USB Keyboard               id=13   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Power Button                              id=7    [slave  keyboard (3)]
    ↳ HID 046a:0023                             id=9    [slave  keyboard (3)]
    ↳ Dell WMI hotkeys                          id=11   [slave  keyboard (3)]
    ↳ TypeMatrix.com USB Keyboard               id=12   [slave  keyboard (3)]

On constate que mon clavier Type Matrix possède l’identifiant 12 et mon autre clavier (un HID 046a:0023) le 9. Du coup, maintenant que je connais le nom de mes claviers, je peux trouver leurs identifiants et les passer à setxkbmap grâce à l’option --device. Le script final donne :

DVORAK=`xinput list | grep TypeMatrix | grep keyboard | sed 's/.*id=\([0-9]*\).*/\1/'`
AZERTY=`xinput list | grep HID | grep keyboard | sed 's/.*id=\([0-9]*\).*/\1/'`
setxkbmap -device $DVORAK dvorak -option compose:ralt
setxkbmap -device $AZERTY fr -option ""

Nous pouvons désormais binômer sur mon poste avec deux claviers différents !

Réactions

  • Jean-Philippe Caruana le 2015-09-04 : voir une mise à jour de ce script qui marche désormais tout seul : bloggure.info/AutoApplyKeymapUdev
  • Bruno Thomas le 2015-09-03 : à noter que c’est même faisable en “zero touch” avec udev. Le souci c’est qu’il faut attendre que le clavier ait été reconnu par le kernel et X avant de l’ajouter. Cela explique cette vilaine tempo d’une seconde. Merci à @BitardMichael gist.github.com/3531813
  • Jean-Philippe Caruana le 2015-09-02 : on peut rester en “zéro touch” également en ajoutant ce script au démarrage de la session X (autostart.sh pour les dérivés d’OpenBox)