J'ai récemment acheté un clavier Unicomp qui vient avec les touches alt-right et Windows permutées. Le clavier identifie comme ceci sur lsusb:
Bus 003 Device 002: ID 17f6:0822 Unicomp, Inc
Existe-t-il un moyen pour que le noyau (c'est-à-dire non basé sur xmodmap) permute les touches alt-droite et windows de sorte que chaque application les voit aux endroits échangés même si elles obtiennent une entrée de clavier brute (l'échange de trucs avec xmodmap ne fera pas cela) ? Existe-t-il un moyen de n'avoir cela que pour ce seul clavier?
linux
keyboard-layout
FUZxxl
la source
la source
Réponses:
Oui, c'est possible en utilisant XKB. Contrairement à xmodmap, XKB peut remapper vos clés pour des appareils individuels.
Remarque: assurez-vous que vous avez xkbcomp> 1.2.0
Listez d'abord vos appareils avec:
xinput list
Vous obtiendrez quelque chose comme ceci:
Identifiez la chaîne de votre appareil et modifiez le script shell suivant, en changeant la ligne sed par celle qui correspond au nom de votre appareil. Modifiez ensuite les clés dont vous avez besoin remappées.
Exemple: Chargez
xev
et appuyez sur une touche que vous souhaitez remapper. Supposons que vous découvrez son code clé 84. Recherchez 84 dans https://gist.github.com/zoqaeski/3880640 . Le nom de la clé est là<KP5>
. Recherchez ensuite la clé par laquelle vous souhaitez la remplacer (dans le même lien, plus loin ci-dessous ) et copiez ce qui est à l'intérieur des crochets. Répétez le processus pour toutes les clés souhaitées.Puis sourcez-le (vous pouvez l'ajouter à votre .xinitrc). Terminé! Maintenant, appuyer sur les touches devrait générer la sortie souhaitée, uniquement pour le périphérique que vous avez spécifié.
Edit : Récemment, j'ai remarqué que, pour une raison quelconque, la nouvelle configuration n'est pas appliquée immédiatement. Vous devez d'abord appuyer sur une touche de votre autre clavier, puis tester les touches configurées sur votre clavier modifié. Je ne sais pas pourquoi cela se produit, peut-être une sorte de cache.
la source
sed -n 's/.*G19 Gaming Keyboard.*id=\([0-9]*\).*keyboard.*/\1/p'
c) Oui, vous devez absolument le tester avant de le remplacer$remote_id
par le numéro d'identification. Notez qu'il y a deux références à$remote_id
cela, avez-vous changé les deux?$remote_id
, assurez-vous de commenter la ligne[ "$remote_id" ] || exit
si vous ne l'avez pas déjà fait, sinon elle se renflouera.$9
ne fonctionnera pas, vous vouliez dire9
?Pour tous ceux qui viennent ici de Google et veulent une réponse plus conforme à ce que le questionneur espérait à l'origine, je suis conscient de deux façons de remapper les événements au
evdev
niveau afin que le changement s'applique à toutes les applications:udev fournit une API pour modifier les entrées de la base de données matérielle qui contrôlent les mappages entre scancodes et keycodes. Cette page ArchiWiki , qui contient des instructions, dit explicitement que cela fonctionnera pour les entrées X11 et console.
L'essentiel est que vous créez une entrée personnalisée dans
/etc/udev/hwdb.d/
laquelle se compose d'un modèle de correspondance de périphérique et de quelques définitions de remappage scancode-to-keycode, puis exécutezsystemd-hwdb update
pour reconstruire la base de données et l'udevadm trigger
appliquer sans redémarrage.Étant donné que Wayland n'utilise pas le sous-système de clavier de X11 et que les principaux compositeurs Wayland comme GNOME Shell et Weston n'implémentent pas d'interfaces utilisateur pour configurer les aspects pertinents de libinput, quelqu'un a écrit un démon nommé evdevremapkeys qui résout le problème de la même manière que le pilote d'espace utilisateur G15Daemon pour Logitech Claviers de jeu G15.
(Il avale les événements qu'il a l'intention de remapper, donc rien d'autre qui écoute sur l'appareil ne peut les voir, puis émet les événements corrigés via l'
uinput
API pour créer des périphériques d'entrée au niveau du noyau à partir de l'espace utilisateur.)la source
Pour ceux qui n'ont pas réussi avec l'option @Watcom, mettez simplement votre nouveau fichier de mappage, smth comme:
à / usr / share / X11 / xkb / symboles / comme peut-être root (ubuntu, peut différer pour votre distribution), appelez le fichier 'custom'. Demandez votre chaîne de disposition actuelle avec
setxkbmap -device <device id> -print | grep xkb_symbols
et ajoutez+custom
-la. Définissez une nouvelle disposition avec des clés remappées et une chaîne de disposition modifiée:L'effet n'est pas permanent et se réinitialise malheureusement lorsqu'un autre clavier est connecté, n'a pas encore trouvé comment le réparer. Vous pouvez cependant ajouter la commande ci-dessus à votre
.bashrc
, afin que les clés soient échangées au redémarrage si nécessaire.la source