GNU/Linux >> Tutoriels Linux >  >> Linux

Linux - Touches de remappage dur du clavier ?

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. De telles commandes fonctionnent pour d'autres applications/fenêtres normales sur X.

Je pense que l'application peut lire les données brutes du clavier et ignorer l'entrée X ?

Alors, comment remapper les 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é loadkeys, car il fonctionne sur X.

J'ai trouvé ici que je pouvais essayer setkeycodes , "parce qu'après avoir attribué le code clé du noyau, le bouton devrait fonctionner dans xorg", mais j'ai également trouvé que "vous ne pouvez pas utiliser 'setkeycodes' sur les claviers USB", c'est mon cas (je suis intéressé au cas où quelqu'un le ferait fonctionner sur ps2 comme Je pense que je pourrais utiliser un adaptateur).

Cela semblait prometteur "Mapper les scancodes sur les codes clés", mais après quelques tests, rien n'a changé, les voici :
J'ai trouvé le code clé "36" (touche "j") à vt1 avec showkey
J'ai trouvé le scancode "7e" (clavier ".") sur vt1 avec showkey --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. :ne fonctionnait pas non plus avec :KEYBOARD_KEY_7e=j

Quelques méthodes alternatives (par @vinc17) pour trouver les clés :
evtest /dev/input/by-id/... ou
input-kbd 3 (mettre l'index d'id trouvé à ls -l /dev/input/by-id/* de l'ex. événement3)

PS. :* Si vous souhaitez vous tester, le fil de discussion associé à l'application est le suivant :http://forums.thedarkmod.com/topic/14266-keyboard-issue-in-new-version-108/ 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 en "0x00"

Réponse acceptée :

Trouvez d'abord le scancode de la clé qui doit être remappée, par ex. avec le evtest utilitaire. Une ligne comme la suivante (avec MSC_SCAN dedans) doit être affiché :

Event: time 1417131619.686259, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70068

suivi d'un second indiquant le code clé actuel. Si aucun MSC_SCAN est sortie, cela est dû à un bogue du pilote du noyau, mais le scancode peut toujours être trouvé avec le input-kbd utilitaire; evtest aurait dû donner le code de la clé, afin qu'il soit facile de trouver la ligne correspondante dans le input-kbd sortie (par exemple en utilisant grep ).

Une fois les scancodes des touches à 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 :

evdev:input:b0003v05ACp0221*
 KEYBOARD_KEY_70035=102nd       # Left to z: backslash bar
 KEYBOARD_KEY_70064=grave       # Left to 1: grave notsign
 KEYBOARD_KEY_70068=insert      # F13: Insert

(Avant udev 220, je devais utiliser keyboard:usb:v05ACp0221* pour la première ligne.)

Connexe :Linux – le numéro majeur TTY de votre Unix ?

Le evdev: La chaîne doit être au début de la ligne.
Notez que les lettres du fournisseur et de l'identifiant du produit doivent être en majuscules.
Chaque KEYBOARD_KEY_ les paramètres doivent avoir exactement un espace avant (remarque :une ligne sans espace donnera un message d'erreur, et une ligne avec deux espaces était silencieuse ignoré avec les anciennes versions d'udev). KEYBOARD_KEY_ est suivi du scancode en hexadécimal (comme ce que font les deux evtest et input-kbd donner). Des valeurs valides peuvent être obtenues à partir de l'evtest sortie ou le input-kbd sortie, ou même depuis le /usr/include/linux/input.h fichier :par exemple, KEY_102ND donnerait 102nd (en supprimant KEY_ et conversion en minuscules), que j'ai utilisé ci-dessus.

Une fois le fichier enregistré, saisissez :

udevadm hwdb --update

pour (re)construire la base de données /etc/udev/hwdb.bin (vous pouvez vérifier son horodatage). Ensuite,

udevadm trigger --sysname-match="event*"

prendra en compte les nouveaux paramètres. Vous pouvez vérifier avec evtest .

En 2014, l'udev publié avait des informations incomplètes/buguées dans /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 la discussion concernant la documentation et les problèmes d'espacement.

Si cela ne fonctionne pas, le problème peut être trouvé après avoir temporairement augmenté le niveau de journalisation de udevd avec udevadm control (voir la page de manuel udevadm(8) pour plus de détails).

Pour l'ancien udev versions telles que 204, cette méthode devrait toujours fonctionner.


Linux
  1. 8 conseils pour la ligne de commande Linux

  2. Avoir une vache à la ligne de commande Linux

  3. Linux – Mode clavier brut ?

  4. Sauvegarder tout le disque dur Linux ?

  5. Remapper les touches Win, Ctrl et Alt sous Linux

Comment démarrer en ligne de commande Linux

Maîtrisez la ligne de commande Linux

Principes de base de la ligne de commande Linux :sudo

Remapper les touches du clavier personnalisées sous Linux - Tutoriel

Linux – Raccourci pour minimiser toutes les fenêtres ?

Cedilla sous C (ç) dans la disposition du clavier 'US international with dead keys' sous Linux