J'essaie de trouver un moyen de remapper les touches du clavier avec force.
J'ai essayé d'utiliser xmodmap et setxkbmap, mais ils ne fonctionnent pas pour une application spécifique. Ces commandes fonctionnent pour d'autres applications / fenêtres normales sur X tho.
Je pense que l'application peut lire les données brutes du clavier et ignorer l'entrée X?
Alors, comment remapper des clés sans utiliser xmodmap et setxkbmap? s'il est possible de le faire à l'aide d'un logiciel.
J'ai également essayé xkeycaps, xkbcomp, mais je n'ai pas essayé les clés de charge, car il fonctionne sur X.
J'ai trouvé ici que je pouvais essayer setkeycodes
, "car après avoir assigné le code clé du noyau, le bouton devrait fonctionner dans xorg" , mais j'ai aussi trouvé que "vous ne pouvez pas utiliser 'setkeycodes' sur les claviers USB" , c'est mon cas (je suis intéressé par le cas quelqu'un le faire fonctionner sur ps2 car je pense que je pourrais utiliser un adaptateur).
Cela semblait prometteur "Mapper les scancodes aux codes clés" , mais après quelques tests, rien n'a changé, voici:
j'ai trouvé le code clé "36" (touche "j") sur vt1 avec le showkey
scancode "7e" (clavier ".") Sur vt1 avecshowkey --scancodes
$cat >/etc/udev/hwdb.d/90-custom-keyboard.hwdb
keyboard:usb:v*p*
keyboard:dmi:bvn*:bvr*:bd*:svn*:pn*:pvr*
KEYBOARD_KEY_7e=36
$udevadm hwdb --update #updates file: /lib/udev/hwdb.bin
$udevadm trigger #should apply the changes but nothing happened
$cat /lib/udev/hwdb.bin |egrep "KEYBOARD_KEY_7e.{10}" -ao
KEYBOARD_KEY_7eleftmeta
$#that cat on hwdb.bin did not change after the commands..
Obs .: n'a pas fonctionné non plus avec: KEYBOARD_KEY_7e=j
D'autres moyens alternatifs (par @ vinc17) pour trouver les clés:
evtest /dev/input/by-id/...
ou
input-kbd 3
(mettre l'index id trouvé à ls -l /dev/input/by-id/*
partir de ex. Event3)
PS .: * Si vous êtes intéressé à vous tester vous-même, le fil associé à l'application est le suivant: http://forums.thedarkmod.com/topic/14266-keyboard-issue-in-new-version-108/ Les problèmes que je ont sont les mêmes: certaines clés (KP_Decimal, DownArrow, UpArrow, RightArrow) sont ignorées et considérées toutes avec la même valeur là "0x00"
la source
/etc/udev/hwdb.bin
, non/lib/udev/hwdb.bin
. Mais bien que ce fichier soit correctement mis à jour, cela ne fonctionne pas non plus pour moi, même après un redémarrage. Peut-être que quelque chose manque dans la documentation. À propos de ceci: bugs.freedesktop.org/show_bug.cgi?id=82311showkey --scancodes
ne donne pas les scancodes que udev attend (les valeurs sont différentes); l'input-kbd
utilitaire donne les scancodes corrects.evtest
utilitaire devrait également vous donner les scancodes corrects: après avoir tapé une clé, vous devriez obtenir 2 lignes et la première devrait se terminer par quelque chose de la formecode 4 (MSC_SCAN), value xxx
, oùxxx
est le scancode. Mais le pilote de mon clavier est bogué, et je n'ai pas cetteMSC_SCAN
ligne pour certaines touches que je voulais remapper. C'est pourquoi j'ai utiliséinput-kbd
, qui répertorie tous les scancodes pour le périphérique sélectionné.Réponses:
Trouvez d'abord le scancode de la clé qui doit être remappée, par exemple avec l'
evtest
utilitaire. Une ligne comme la suivante (avecMSC_SCAN
en elle) doit être sortie:suivi d'un second donnant le code clé actuel. Si aucune
MSC_SCAN
ligne n'est sortie, cela est dû à un bug du pilote du noyau, mais le scancode peut toujours être trouvé avec l'input-kbd
utilitaire;evtest
devrait avoir donné le code clé, de sorte qu'il devrait être facile de trouver la ligne correspondante dans lainput-kbd
sortie (par exemple en utilisantgrep
).Une fois les scancodes des clés à remapper déterminés, créez un fichier tel que
/etc/udev/hwdb.d/98-custom-keyboard.hwdb
contenant les remappages. Le début du fichier/lib/udev/hwdb.d/60-keyboard.hwdb
donne quelques informations. Dans mon cas (qui fonctionne), j'ai:(Avant udev 220, je devais utiliser
keyboard:usb:v05ACp0221*
pour la première ligne.)La
evdev:
chaîne doit être au début de la ligne. Notez que les lettres du fournisseur et de l'ID de produit doivent être en majuscules. ChaqueKEYBOARD_KEY_
paramètre doit avoir exactement un espace avant (note: une ligne sans espaces donnera un message d'erreur, et une ligne avec deux espaces était silencieusement ignorée avec les anciennes versions d'udev).KEYBOARD_KEY_
est suivi du scancode en hexadécimal (comme ce que les deuxevtest
etinput-kbd
donner). Des valeurs valides pourraient être obtenues à partir de laevtest
sortie ou de lainput-kbd
sortie, ou même du/usr/include/linux/input.h
fichier: par exemple,KEY_102ND
donnerait102nd
(en supprimantKEY_
et en convertissant en minuscules), que j'ai utilisé ci-dessus.Une fois le fichier enregistré, tapez:
pour (re) construire la base de données
/etc/udev/hwdb.bin
(vous pouvez vérifier son horodatage). Alors,prendra en compte les nouveaux paramètres. Vous pouvez vérifier avec
evtest
.En 2014, le udev publié contenait des informations incomplètes / bogues
/lib/udev/hwdb.d/60-keyboard.hwdb
, mais vous pouvez consulter la dernière version de développement du fichier et / ou mon rapport de bogue et une discussion concernant la documentation et les problèmes d'espacement.Si cela ne fonctionne pas, le problème peut être détecté après une augmentation temporaire du niveau de journalisation de
udevd
withudevadm control
(voir la page de manuel udevadm (8) pour plus de détails).Pour les anciennes
udev
versions telles que 204, cette méthode devrait toujours fonctionner.la source
/lib/udev/hwdb.bin
, j'ai regardé avecbless
etKEYBOARD_KEY_70085
apparaît à sa fin. Je pense que Ubuntu 14.04 est configuré (protégé?) De cette façon. J'ai essayéudevadm control --log-priority=debug
. basé surlsusb
(045e: 0750) mon clavier ressemblekeyboard:usb:v045ep0750*
, mais j'ai aussi essayé aveckeyboard:usb:v*p*
. Je suppose que cela/etc/udev/hwdb.bin
devrait être mis à jour mais n'existe même pas.udevadm hwdb --usr --update
, malgré que je n'étais pas.udevadm hwdb --update
je copiais/lib/udev/hwdb.bin
à/etc/udev/hwdb.bin
et RANstrace udevadm trigger --sysname-match="event*"
et le fichierhwdb.bin
ne paraît pas avoir été lu par (si elle est comme ça fonctionne).udevadm trigger ...
, consultez mon test ici . Notez qu'avant d'exécuterudevadm trigger ...
, vous devez vous assurer que l'heure de modification du fichier a été mise à jour, sinon l'heure d'accès ne sera pas mise à jour lors de la lecture du fichier.udevadm --version
: 215 (et version du paquet udev: 215-7). Merci àudevadm trigger ...
, vous ne devriez pas avoir besoin de redémarrer (sauf si vous souhaitez supprimer les paramètres, AFAIK). Mais vous voudrez peut-être essayer un redémarrage pour voir s'il y a un effet.