Chibi-nah::blog

Des geekeries, de la MAO, de tout et de rien…

Archives

Deux claviers branchés, deux dispositions différentes

Une petite astuce simple et rapide, quand on a deux claviers différents, avec deux dispositions différentes, genre un azerty et un bépo, sous Xorg.

Ce qui serait bien, c'est que si je tape quelque chose sur mon clavier bépo, la map utilisée soit celle du bépo, et si je tape sur mon clavier azerty, la map utilisée soit en azerty.

Comment faire ?

Commençons par lister les périphériques via xinput

alex@yue ~> xinput -list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Wacom ISDv4 E3 Finger touch               id=11   [slave  pointer  (2)]
⎜   ↳ Wacom ISDv4 E3 Pen stylus                 id=12   [slave  pointer  (2)]
⎜   ↳ Logitech USB Laser Mouse                  id=13   [slave  pointer  (2)]
⎜   ↳ TypeMatrix.com USB Keyboard               id=15   [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=17   [slave  pointer  (2)]
⎜   ↳ Wacom ISDv4 E3 Pen eraser                 id=19   [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)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Video Bus                                 id=8    [slave  keyboard (3)]
    ↳ Power Button                              id=9    [slave  keyboard (3)]
    ↳ Sleep Button                              id=10   [slave  keyboard (3)]
    ↳ TypeMatrix.com USB Keyboard               id=14   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=16   [slave  keyboard (3)]
    ↳ HP WMI hotkeys                            id=18   [slave  keyboard (3)]

Ce qui m'intéresse, ce sont les deux claviers, donc les deux lignes suivantes :

    ↳ TypeMatrix.com USB Keyboard               id=14   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=16   [slave  keyboard (3)]

Chaque clavier a un identifiant, reste à faire l'association [id clavier] -> [disposition].

Pour cela, il suffit de taper les deux commandes suivantes :

alex@yue ~> setxkbmap -device 14 -layout fr bepo
alex@yue ~> setxkbmap -device 16 -layout fr oss

La commande s'utilise comme suit :

setxkbmap -device <id> -layout <langue> <variante>

À noter : ces ID peuvent changer d'un démarrage à l'autre, voire même si on débranche/rebranche le clavier.

Du coup, il va falloir scripter un peu :)

#!/bin/bash
#Permet de redéfinir à la volée les dispositions des claviers branchés.
#Clavier du laptop : fr-oss
#TypeMatrix, si branché : fr-bépo

#Clavier de mon pc portable
setxkbmap -device $(xinput --list --id-only "keyboard:AT Translated Set 2 keyboard") -layout fr oss

#À noter, le TypeMatrix peut ne pas être présent.
#Dans ce cas, on ne fait rien
CL_TMx2030=$(xinput --list --id-only "keyboard:TypeMatrix.com USB Keyboard" | sed 's/[^0-9]//g')

if [ -n "$CL_TMx2030" ]
then
    setxkbmap -device $CL_TMx2030 -layout fr bepo
fi

Rien de compliqué. On récupère les deux ID via xinput, puis on applique les dispositions. Une petite variante pour le TypeMatrix. En effet, il vaut mieux détecter sa présence, d'où le "sed" pour extraire la valeur numérique si le clavier est branché.

Il ne reste plus qu'à appeler ce script dans l'autoexec de WMaker, ou via un raccourci clavier, ou une entrée de menu.

Après, pourquoi s'embêter avec ça alors que je pourrais définir les deux claviers en bépo ? Plusieurs raisons :

  • Dosbox (enfin, DOS, dans dosbox) ne reconnait pas le bépo.
  • Quand je suis en extérieur, je ne prends pas systématiquement mon TM.
  • Je suis absolument incapable de taper en bépo sur mon clavier azerty, et en azerty sur mon bépo.
  • Quand quelqu'un utilise mon ordi (famille…), il/elle est habitué(e) à la disposition azerty, et n'a pas le temps (ni l'envie) d'apprendre le bépo.