Ich versuche, / keys auf der Dell L100-Tastatur neu xmodmap
zuzuordnen , und habe Probleme beim Abrufen der Schlüsselcodes.AltSuper
Wenn Sie zum Beispiel verwenden, xev
erhalte ich keinen Schlüsselcode fürAlt
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
Für Right SuperSchlüssel, xev
und showkey
verschiedene keycodes geben - 134
und 126
jeweils.
Was ist mit diesen Schlüsselcodes los?
Ich habe versucht, Schlüsselcodes von showkey -k
und mithilfe der folgenden xmodmap
Datei abzurufen, aber das ergab eine seltsame Karte, die den bSchlüssel neu zugeordnet hat:
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
Antworten:
Es gibt eine Menge Spieler zwischen Ihrer Tastatur und dem Prozess, der das Tastaturereignis abschließt. Zu den Hauptelementen der Landschaft gehört die Tatsache, dass das X-System über eine eigene Tastaturhandhabungsebene verfügt und X den Schlüsseln andere "Schlüsselcodes" zuordnet als Ihr Linux-Basissystem. Der
showkey
Befehl zeigt Ihnen die Schlüsselcodes in der Sprache des Linux-Basissystems. Dafürxmodmap
benötigen Sie die X-Tastencodes, die angezeigt werdenxev
. Solange Sie planen, in X zu arbeiten und Ihren Schlüssel neu zu bindenxmodmap
, ignorieren Sieshowkeys
und hören Sie nur, wasxev
sagt.Was Sie in Ihrer
xev
Ausgabe suchen möchten, sind Blöcke wie diese:xev
neigt dazu, eine Menge Output zu generieren, besonders wenn Sie Ihre Maus bewegen. Möglicherweise müssen Sie eine Weile zurückblättern, um die gewünschte Ausgabe zu finden. In der vorherigen Ausgabe sehen wir, dass daskeysym Alt_L
dem X-Schlüsselcode zugeordnet ist64
.quelle
xev -event keyboard
würde es ausreichen, das meiste Rauschen zu beseitigen.xev sollte funktionieren
Seltsamerweise gibt mein xev ein KeyPress- und KeyRelease-Ereignis für alt (und für die Windows-Taste, hier "super" genannt):
Und die rechte:
Ich sehe zwei Möglichkeiten:
xinit -- :1
, wodurch Sie einen X-Server mit nur einem X- Term erhalten sollten - es wird nicht einmal ein Fenstermanager ausgeführt. Wenn Sie den X- Term beenden, wird die Sitzung geschlossen).Ein einfacher Weg, wenn Sie den Schlüsselnamen kennen
Eine andere Möglichkeit: Holen Sie sich einfach die Schlüsselcodes von xmodmap:
Da sind wieder die 64 und 108.
xmodmap -pm
zeigt Ihnen nur die Modifikatorkarte, die Ihnen auch die Zahlen anzeigt (diesmal jedoch in hexadezimaler Darstellung).quelle
Ich "erkenne" drei Probleme in Ihrer Frage:
xev
undshowkey
gemeldet?xev
nicht Altrichtig gedrückt?Zur ersten Frage: In diesen Tagen, in denen der Tastatur- "Treiber" in X die Hardware nicht wirklich steuert, könnte er nur die Schlüsselcodes vom Kernel an den X-Kern weitergeben, aber dies ist nicht der Fall. Dem Schlüsselcode werden 8 hinzugefügt, bevor er weitergegeben wird.
Zweitens: Etwas in Ihrer X-Sitzung erfasst das AltEreignis. Die anderen Antworten decken dies bereits ab. (Dh
xev
nicht das Ereignis, das Sie sehen möchten). Möglicherweise hängt der Täter mit Ihrem Fenstermanager zusammen. Versuchen Sie es mit einer nackten X-Sitzung.Drittens: nicht verwenden
xmodmap
. Es ist seit einem Jahrzehnt veraltet. Die neuen Leute sind XKB und sein Werkzeugsetxkbmap
.Für Austausch Altund Wines gibt bereits eine Option in XKB vorbereitet. Füge es einfach hinzu:
quelle
setxkbmap
Änderung dauerhaft?~/.xinitrc
.Führen Sie als root Folgendes aus:
... um zu sehen, was der Scancode für Ihren Mystery Key ist. Ich habe so etwas:
Ich bin mir nicht sicher, warum ein Schlüssel zwei Scancodes generiert. Es ist keine Keydown / Keyup-Sache, so nah ich das Muster erkennen kann. Beachten Sie die Warnung, sodass Sie diese möglicherweise im Einzelbenutzermodus ausführen möchten.
Ich vermutete, dass 0x46 mein Scancode war.
Als nächstes finden Sie einen nicht verwendeten Schlüsselcode mit:
Hier sehen Sie, dass der Schlüsselcode 97 auf meinem System nicht verwendet wird:
Der von X verwendete Schlüsselcode und der vom Kernel verwendete Schlüsselcode sind aus "historischen Gründen" auf OFF BY 8 gesetzt. Nehmen Sie also 97 - 8 = 89 und verwenden Sie 89 mit dem Befehl setkeycodes (wieder als root):
Und du solltest bereit sein. Bestätigen Sie mit xev, dass Sie ein Keypress-Ereignis mit dem Keycode 97 erhalten. (Obwohl ich der Fluxbox-Schlüsseldatei einmal gesagt habe, dass sie diesen Keycode verwenden soll, habe ich keine KeyPress-Ereignisse mehr erhalten - vielleicht, weil Fluxbox sie verschluckt, wenn sie sie verwendet?)
Beachten Sie, dass die 'setkeycodes' einen Neustart nicht überstehen, so dass Sie sie zu Ihren Init-Skripten hinzufügen müssen (z. B. in /etc/rc.local).
quelle
Ich habe versucht, dies für mich selbst zu lösen, und ich habe es gerade herausgefunden.
Das Hauptproblem ist, dass Sie das Ereignis für den Tastendruck nicht erhalten. Wenn Sie sich das von Ihnen veröffentlichte Protokoll ansehen, ist der Grund offensichtlich.
Sie können sehen, dass die
Focus{In,Out}
Ereignisse einemode
von habenNotify{Grab,Ungrab}
. Dies zeigt an, dass ein Schlüssel von einem anderen Prozess verarbeitet wurde (wahrscheinlich einer Tastenkombination).In meinem Fall handelte es sich um xbindkeys, aber wenn Sie eine Desktop-Umgebung verwenden, verfügen diese wahrscheinlich über ein Tastaturbindungssystem. Um diese Ereignisse zu sehen, müssen Sie das andere Programm stoppen / deaktivieren.
Wenn Sie nicht feststellen können, welches Programm die Schlüsselereignisse stiehlt, ist es die beste Lösung, eine weitere X-Sitzung zu starten, ohne dass sie ausgeführt wird. Führen Sie den folgenden Befehl aus, um eine weitere angezeigte X-Sitzung zu starten.
:1
Wenn dies bereits erfolgt ist, erhöhen Sie einfach die Zahl am Ende. Sie können das Terminal natürlich beliebig ändern oder auf Ihrem System installiert haben.Dann renn
xev
nochmal. Das sollte Ihnen das Ergebnis liefern, ohne dass es von anderen Programmen erfasst wird. Beachten Sie, dass der Fenstermanager, der gestartet wird, den Schwebefokus hat, sodass Sie den Cursor über dem xev-Fenster platzieren müssen, damit die Tasten erfasst werden.Wie in dieser hervorragenden Antwort von dubiousjim gesagt wurde , ist der Schlüsselcode anders, weil es viele Schichten zwischen xev und dem Kernel gibt.
quelle
Ich hatte das gleiche Problem mit dem
Alt_L
Verschwinden in XUbuntu 14.04 (Alt_R
war in Ordnung). Nach vielem Spielen habe ich beobachtet, dassshowkey
der Tastenanschlag aufgezeichnet wurde, aberxev
nicht - es musste etwas im Fenstersystem sein. Ich habe alle "Window Manager" - und "Window Manager Tweaks" -Einstellungen durchsucht und nichts gefunden. Schließlich fand ich einen FehlerAlt_L
in der Liste der Tastaturkürzel (xfce4-keyboard-shortcuts
) im "Einstellungseditor". Ich "setze" das zurück und ich habe meinenAlt_L
Rücken! Die verirrteAlt_L
Verknüpfung wurde nur im "Einstellungseditor" angezeigt.quelle