Utiliser plusieurs claviers avec des mapping différents sous X.org
Les deux techniques présentées sont différentes selon la version de X.org utilisée.
Les versions de X.org >= 1.5 supportent l'hotplugging, en passant par HAL ; les versions précédentes non.
Pour connaître sa version de X:
X -version
Avec HAL
Pour lister les périphériques détectés par HAL:
lshal
Copie le fichier /usr/share/hal/fdi/policy/10osvendor/10-keymap.fdi dans /etc/hal/fdi/policy/.
Voici mon fichier une fois modifié:
<?xml version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- --> <deviceinfo version="0.2"> <device> <match key="info.capabilities" contains="input.keymap"> <append key="info.callouts.add" type="strlist">hal-setup-keymap</append> </match> <match key="info.capabilities" contains="input.keys"> <merge key="input.xkb.rules" type="string">base</merge> <merge key="input.xkb.model" type="string">keyboard</merge> <match key="/org/freedesktop/Hal/devices/computer:system.kernel.name" string="Linux"> <merge key="input.xkb.model" type="string">evdev</merge> </match> <match key="info.product" string="TypeMatrix.com USB Keyboard"> <merge key="input.xkb.variant" type="string">bepo</merge> </match> <match key="info.product" string="USB Multimedia Keyboard"> <merge key="input.xkb.variant" type="string">latin9</merge> </match> <merge key="input.xkb.layout" type="string">fr</merge> </match> </device> </deviceinfo>
La partie:
<match key="info.product" string="TypeMatrix.com USB Keyboard"> <merge key="input.xkb.variant" type="string">bepo</merge> </match>
spécifie que pour mon clavier TypeMatrix je souhaite une variante bépo.
Pour l'autre j'utilise du latin9.
Pour configurer ton fichier il faut reprendre les informations issues de lshal.
Les claviers sont repérables par leur info.capabilities qui contiennent 'input.keyboard'.
Une fois repérés il reste à récupérer la chaîne info.product (TypeMatrix.com USB Keyboard et USB Multimedia Keyboard dans mon cas) et configurer le fichier /etc/hal/fdi/policy/10-keymap.fdi avec.
Sans HAL:
Pour lister uniquement les périphériques d'entrée (souris, clavier, joystick...):
xinput list --short
On récupère l'identifiant du device qui nous intéresse et, par exemple:
setxkbmap -device 0 fr bepo setxkbmap -device 1 fr latin9
L'inconvénient c'est que le changement n'est pas persistant lors de chaque redémarrage.