J'essaie d'utiliser xmodmap
pour remapper Alt/ Supertouches sur le clavier Dell L100, et ai du mal à obtenir les codes de touche.
Par exemple, utiliser xev
ne me donne pas le code de touche pourAlt
FocusOut event, serial 36, synthetic NO, window 0x4a00001,
mode NotifyGrab, detail NotifyAncestor
FocusIn event, serial 36, synthetic NO, window 0x4a00001,
mode NotifyUngrab, detail NotifyAncestor
KeymapNotify event, serial 36, synthetic NO, window 0x0,
keys: 122 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Pour la Right Superclé, xev
et showkey
donner différents keycodes - 134
et 126
respectivement.
Que se passe-t-il avec ces codes de touche?
J'ai essayé d'obtenir les codes clés showkey -k
et d'utiliser le xmodmap
fichier ci-dessous, mais cela a donné une carte étrange qui remappait la bclé:
clear Mod1
clear Control
keycode 125 = Meta_L
keycode 126 = Meta_R
keycode 58 = Control_L
keycode 56 = Control_L
keycode 100 = Control_R
add Control = Control_L Control_R
add Mod1 = Meta_L Meta_R
Réponses:
Il y a beaucoup de joueurs entre votre clavier et le processus qui gère finalement l'événement de clavier. Parmi les éléments majeurs du paysage, il y a le fait que le système X dispose de sa propre couche de gestion du clavier et que X associe différents "codes clés" à des clés différentes de celles de votre système de base Linux. La
showkey
commande vous montre les codes clés dans le jargon Linux-base-system. Carxmodmap
vous avez besoin des codes clavier X, qui sont ce quixev
est affiché. Tant que vous envisagez de travailler dans X et de relier votre clé avecxmodmap
, ignorezshowkeys
et écoutez ce que vous ditesxev
.Ce que vous voulez rechercher dans votre
xev
sortie sont des blocs comme celui-ci:xev
a tendance à générer beaucoup de sortie, en particulier lorsque vous déplacez votre souris. Vous devrez peut-être revenir en arrière un peu pour trouver le résultat recherché. Dans la sortie précédente, on voit que l'keysym Alt_L
est associé au X keycode64
.la source
xev -event keyboard
, il suffirait de débarrasser la plupart du bruit.xev devrait fonctionner
Odd, mon xev donne un événement KeyPress et KeyRelease pour alt (et pour la touche Windows, appelée ici "super"):
Et celui de droite:
Je peux voir deux possibilités:
xinit -- :1
, ce qui devrait vous permettre d’obtenir un serveur X avec seulement un xterm - il n’y aura même pas de gestionnaire de fenêtres en cours d’exécution. La fermeture de xterm fermera la session).Un moyen facile, si vous connaissez le nom de la clé
Une autre possibilité: il suffit d’obtenir les codes clés de xmodmap:
Il y a les 64 et 108 encore.
xmodmap -pm
vous montrera juste la carte de modificateur, qui vous donne également les nombres (bien que, cette fois, en hexadécimal).la source
Je "détecte" trois problèmes dans votre question:
xev
etshowkey
signaler différents codes de clé pour une clé?xev
montre pas Altêtre appuyé correctement?En ce qui concerne la première question: ces jours-ci, lorsque le "pilote" du clavier sous X ne pilote pas vraiment le matériel, il pourrait simplement transmettre les codes de clé du noyau au noyau X, mais ce n’est pas le cas. Il ajoute 8 au keycode avant de le transmettre.
Deuxièmement: quelque chose dans votre session X est en train de saisir l' Altévénement. Les autres réponses couvrent déjà cela. (Ie
xev
ne comprend pas l'événement que vous aimeriez voir). Le coupable pourrait être lié à votre gestionnaire de fenêtres. Essayez une session X plus nue.Troisièmement: ne pas utiliser
xmodmap
. Il est dépassé depuis une décennie. Les nouveaux gars sont XKB et son outilsetxkbmap
.Pour l’échange Alt, Winil existe déjà une option dans XKB. Ajoutez-le simplement:
la source
setxkbmap
changement permanent?~/.xinitrc
.En tant que root, lancez:
... pour voir quel est le scancode pour votre clé mystère. J'ai quelque chose comme ça:
Vous ne savez pas pourquoi il semble qu'une clé génère deux scancodes. Ce n'est pas une chose de keydown / keyup, autant que je puisse dire d'après le modèle. Notez l'avertissement, vous voudrez peut-être l'exécuter en mode mono-utilisateur.
J'ai deviné que 0x46 était mon scancode.
Ensuite, trouvez un keycode non utilisé avec:
Vous pouvez voir ici que le code 97 n'est pas utilisé sur mon système:
Le code d'activation utilisé par X et le code d'activation utilisé par le noyau sont OFF BY 8 pour des "raisons historiques". Prenez donc 97 - 8 = 89 et utilisez 89 avec la commande setkeycodes (à nouveau en tant que root):
Et vous devriez être prêt. Confirmez avec xev que vous obtenez un événement Keypress avec le code d'activation 97. (bien qu'une fois que j'ai dit au fichier de clés de Fluxbox d'utiliser ce code d'activation, je n'avais plus d'événements KeyPress - peut-être parce que Fluxbox les avalait quand il les utilisait?)
Notez que les 'setkeycodes' ne survivront pas au redémarrage, vous devrez donc les ajouter à vos scripts d'initialisation (par exemple, dans /etc/rc.local)
la source
J'essayais de résoudre ce problème par moi-même et je venais de le comprendre.
Le problème principal est que vous n'obtenez pas l'événement pour la pression de touche. En regardant le journal que vous avez posté, la raison est évidente.
Vous pouvez voir les les
Focus{In,Out}
événements ont unmode
desNotify{Grab,Ungrab}
. Cela indique qu'une clé a été gérée par un autre processus (probablement une application de raccourci / de raccourci clavier).Dans mon cas, c’était xbindkeys, mais si vous utilisez un environnement de bureau, ils ont probablement un système de raccourci clavier. Afin de voir ces événements est xev, vous devrez arrêter / désactiver l'autre programme.
Si vous ne pouvez pas déterminer quel programme vole les événements clés, la meilleure solution consiste à démarrer une autre session X sans l'avoir exécutée. Exécutez la commande suivante pour démarrer une autre session X
:1
, si cela est déjà pris, augmentez simplement le nombre à la fin. Vous pouvez bien entendu changer le terminal selon vos préférences ou votre installation sur votre système.Puis courez
xev
encore. Cela devrait vous donner le résultat sans que cela soit capturé par d'autres programmes. Notez que le gestionnaire de fenêtres qui se lance est le survol actif. Vous devrez donc placer votre curseur au-dessus de la fenêtre xev pour que les clés soient capturées.Comme l'a dit dubiousjim dans cette excellente réponse , le code clé est différent car il y a beaucoup de couches entre xev et le noyau.
la source
J'ai eu le même problème avec la
Alt_L
disparition dans XUbuntu 14.04 (Alt_R
c'était bien). Après avoir beaucoup joué, j'ai constaté queshowkey
la frappe était enregistrée, maisxev
pas - il devait y avoir quelque chose dans le système de fenêtre. J'ai parcouru tous les paramètres du "Gestionnaire de fenêtres" et du "Gestionnaire de fenêtres", sans rien trouver. Enfin, j'ai trouvé un écartAlt_L
dans la liste des raccourcis clavier (xfce4-keyboard-shortcuts
) dans "Settings Editor". Je "réinitialise" cela, et j'ai leAlt_L
dos! LeAlt_L
raccourci parasite ne s'est affiché nulle part ailleurs que dans "l'éditeur de paramètres".la source