Puis-je donner deux keyboards différentes dispositions?

Je préfère une layout Dvorak, donc j'ai un joli keyboard USB Das et je lui ai assigné une layout qui fonctionne pour moi sur Virtual Console et sur X11. J'ai utilisé loadkeys et install-keymap pour qu'il prenne effet dès le démarrage, et j'en suis très satisfait.

Cependant, la plupart de mes collègues préfèrent la layout Qwerty, et c'est un obstacle à la programmation par paires. J'ai une sélection de keyboards USB utilisables que je pourrais joindre pour cette tâche, mais ils prennent tous ma disposition Dvorak quand ils sont branchés.

Existe-t-il un moyen de dire à udev (ou même à X11) d'utiliser une disposition Qwerty pour mes keyboards supplémentaires? Ils ont des identifiants de fournisseur et d'appareil USB distincts que je peux utiliser pour les distinguer.

Mon système est Debian Testing, avec udev version 232. Il a été infecté par systemd lorsque je l'ai réinstallé après une panne de disque, donc les approches standard (SysV-style) auxquelles je suis habitué ne fonctionneront pas.

La question similaire La disposition différente du keyboard pour chaque keyboard ne m'aide pas.

Context général: Les keys reçoivent trois sets différents de «codes», d'abord le scancode (le nombre dépendant du matériel arbitraire représente la key du keyboard), puis le code key (nombre plus abstrait représentant une key particulière, par exemple 1 ou! ), et enfin le keysym (symbole key, le symbole actuel comme produit par une key ou une combinaison de touches).

J'ai récemment appris que chaque /dev/input/event* porte son propre mappage scancode-keycode. Ces mappings peuvent être lus et modifiés par iotcls ( EVIOCGKEYCODE_V2 , EVIOCSKEYCODE_V2 ), mais curieusement, il ne semble pas y avoir d'outils généraux disponibles pour accéder à ces mappings (j'ai rapidement écrit un simple programme C, comme j'étais curieux).

Le kernel Linux et X puis mappent les keycodes aux keysyms. Pour le kernel, il n'y a qu'un mappage global, le gestionnaire kbd (ou au less un mappage global pour une console très virtuelle, je ne suis pas sûr que différentes consoles virtuelles puissent avoir des mappages différents). X maintient un mappage pour chaque périphérique.

Donc, si vous voulez des différences entre les keyboards sur la console virtuelle, le seul choix est d'utiliser le mappage scancode-keycode. Pour Dvorak vs. Qwerty, cela peut fonctionner aussi longtime que vous remappez les touches de lettres et que vous ne voulez pas remapper les symboles dans un état décalé et non décalé différemment.

Les versions plus récentes d'udev utilisent une database matérielle ( /etc/udev/hwdb.d ) pour initialiser les mappages spéciaux scancode-to-keycode, et vous pouvez append vos propres versions personnalisées .

L'alternative est de vivre avec Dvorak ou Qwerty sur la console virtuelle, mais de configurer X pour utiliser différents mappages keycode-to-keysym pour chacun, comme décrit dans la réponse que vous avez liée qui ne vous a pas aidé (probablement parce que vous n'avez pas vouloir cette variante). L'avantage de cette méthode est que vous pouvez également mapper des symboles, des keys mortes, des compositions, etc. différemment.