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.Réponses:
Désactiver l'appareil
Voici une idée pour identifier quel clavier est lequel. Vous pouvez utiliser la commande xinput pour activer et désactiver des périphériques.
Exemple
La sortie ci-dessus montre les différents appareils que j'ai sur mon ordinateur portable Thinkpad. Je n'ai qu'un seul clavier connecté, celui-ci:
Jetez maintenant un œil aux propriétés disponibles via cet appareil:
De ce qui précède, vous pouvez voir qu'il est activé, alors désactivons-le:
Pour l'activer:
L'idée?
Vous pouvez activer la désactivation de l'un des claviers à l'aide de cette commande pour déterminer celui sur lequel vous vous trouvez.
Les références
la source
La question semble un peu contradictoire puisque vous citez des outils X mais demandez une solution qui "devrait idéalement fonctionner sans X".
A propos de votre 4 ème constatation:
xinput
vous donnera la correspondanceau moins avec la version suivante
Première étape: détecter le périphérique d'événements clavier en C
Un grand merci à cette page . J'ai supprimé la plupart des contrôles de sécurité du code que j'y ai emprunté, pour plus de clarté, dans le vrai code, vous en avez probablement besoin.
Notez que les pressions sur les touches sont répercutées, vous pouvez donc en effet vouloir demander à l'utilisateur d'appuyer sur une touche de modification (Maj, Contrôle ...) plutôt que sur n'importe quelle touche.
Deuxième étape: utilisez xinput pour obtenir l'ID X à partir du nom de l'appareil
Compilez la source C ci-dessus et utilisez cette méthode:
xinput list --id-only "keyboard:$(sudo ./a.out /dev/input/event*)"
la source
/dev/input/by-id
/dev/input/event*
- j'ai essayétail
ting mais en vain.Plus de fouilles ont révélé une autre solution utilisant Bash ordinaire et un compte d'utilisateur normal. Script :
la source