Je travaille fréquemment sur des stations d'appairage où plusieurs claviers sont installés. Je peux utiliser setxkbmap
avec -device <ID>
pour définir la disposition d'un clavier spécifique (en utilisant un ID dexinput
), mais souvent, il n'est pas évident de savoir quel clavier je suis. Il serait préférable d'éviter les allers-retours d'essayer les deux claviers, donc j'aimerais écrire un outil rapide pour obtenir ces informations setxkbmap
. Je m'attendrais à un cas d'utilisation typique comme le suivant:
$ setxkbmap -device "$(get-keyboard-id)" -layout gb
Press Enter to detect keyboard ID
Quelle interface fournit ces informations sur Linux? Idéalement, cela devrait fonctionner sans X, mais ce n'est pas une exigence (il ne semble pas y avoir beaucoup d'outils qui prennent en charge cela sans X).
Résultats à ce jour:
- Linux doit savoir sur quel clavier je tape pour prendre en charge différentes dispositions pour plusieurs claviers simultanément.
xinput
→ list.c →list_xi2
→XIQueryDevice
fournit des ID de périphérique utilisables parsetxkbmap
.showkey
etxev
n'imprimez pas les ID de clavier.xinput list-props $ID
indique où les événements clavier sont envoyés . Cependant, en utilisant le code d'une autre réponse, il semble que cet appareil n'imprime rien pour identifier le clavier.Une solution presque possible consiste à exécuter
xinput --test <ID> &
pour chaque ID de clavier et à voir lequel renvoie quelque chose en premier. Le problème avec cela est de savoir quels "claviers" sont en fait des claviers:$ xinput | grep keyboard ⎣ 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)] ↳ Power Button id=8 [slave keyboard (3)] ↳ Sleep Button id=9 [slave keyboard (3)] ↳ WebCam SC-13HDL10931N id=10 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=11 [slave keyboard (3)]
less -f /dev/input/eventX
et appuyez sur une touche du clavier correspondant, vous devriez voir "ordures" apparaître, de sorte que vos touches sont en effet dirigées dans un fichier de développement et non dans les autres.