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.