Des geekeries, de la MAO, de tout et de rien…
Je suis
Charlie

Deux claviers branchés, deux dispositions différentes

Icône auteur nah, Icône canondrier 02 novembre 2013, Icône commentaire
Mots clés Icône catégorie geekeries, GNU/Linux, classé dans Icône catégorie Asrall, Geekeries, Linux

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.