GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – Tastatur Hard Remap Keys?

Ich versuche, einen Weg zu finden, Tastaturtasten zwangsweise neu zuzuordnen.
Ich habe versucht, xmodmap und setxkbmap zu verwenden, aber sie funktionieren nicht für eine bestimmte Anwendung. Solche Befehle funktionieren aber auch für andere normale Fensteranwendungen/Anwendungen auf X.

Ich denke, die Anwendung liest die Tastatur-Rohdaten und ignoriert die X-Eingabe?

Also, wie ordnet man Schlüssel neu zu, ohne xmodmap und setxkbmap zu verwenden? wenn es jemals mit irgendeiner Software möglich ist.

Ich habe auch xkeycaps, xkbcomp ausprobiert, aber nicht loadkeys, da es auf X läuft.

Ich habe hier gefunden, dass ich setkeycodes ausprobieren könnte , „denn nach dem Zuweisen des Kernel-Keycodes sollte die Schaltfläche in xorg funktionieren“, aber ich habe auch festgestellt, dass „Sie 'setkeycodes' nicht auf USB-Tastaturen verwenden können“, das ist mein Fall (ich bin interessiert, falls jemand es auf PS2 zum Laufen bringt als Ich denke, ich könnte einen Adapter gebrauchen).

Das schien vielversprechend zu sein:„Scancodes auf Tastencodes abbilden“, aber nach ein paar Tests änderte sich nichts, hier sind sie:
Ich habe den Tastencode „36“ („j“-Taste) bei vt1 mit showkey gefunden
Ich habe Scancode „7e“ (Keypad „.“) bei vt1 mit showkey --scancodes gefunden

$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..

Bem.:ging auch nicht mit:KEYBOARD_KEY_7e=j

Einige weitere alternative Wege (von @vinc17), um die Schlüssel zu finden:
evtest /dev/input/by-id/... oder
input-kbd 3 (geben Sie den gefundenen ID-Index unter ls -l /dev/input/by-id/* ein von Bsp. Ereignis3)

PS.:*Wenn Sie daran interessiert sind, sich selbst zu testen, ist der zugehörige Thread für die Anwendung dieser:http://forums.thedarkmod.com/topic/14266-keyboard-issue-in-new-version-108/ Die Probleme I haben sind gleich:einige Tasten (KP_Decimal, DownArrow, UpArrow, RightArrow) werden ignoriert und alle mit dem gleichen Wert dort „0x00“

betrachtet

Akzeptierte Antwort:

Suchen Sie zuerst den Scancode des Schlüssels, der neu zugeordnet werden muss, z. mit dem evtest Nützlichkeit. Eine Zeile wie die folgende (mit MSC_SCAN darin) ausgegeben werden soll:

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

gefolgt von einer zweiten, die den aktuellen Schlüsselcode angibt. Wenn kein MSC_SCAN line ausgegeben wird, ist dies auf einen Fehler im Kerneltreiber zurückzuführen, aber der Scancode kann immer noch mit dem input-kbd gefunden werden Nützlichkeit; evtest sollte den Schlüsselcode angegeben haben, damit es einfach sein sollte, die entsprechende Zeile im input-kbd zu finden Ausgabe (z.B. mit grep ).

Nachdem die Scancodes der neu zuzuordnenden Tasten ermittelt wurden, erstellen Sie eine Datei wie /etc/udev/hwdb.d/98-custom-keyboard.hwdb enthält die Remappings. Der Anfang der Datei /lib/udev/hwdb.d/60-keyboard.hwdb gibt einige Informationen. In meinem Fall (was funktioniert) habe ich:

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

(Vor udev 220 musste ich keyboard:usb:v05ACp0221* verwenden für die erste Zeile.)

Verwandte:Linux – die TTY-Major-Nummer Ihres Unix?

Der evdev: Zeichenfolge muss am Anfang der Zeile stehen.
Beachten Sie, dass die Buchstaben in der Hersteller- und Produkt-ID Großbuchstaben sein müssen.
Jeder KEYBOARD_KEY_ Einstellungen sollten genau ein Leerzeichen davor haben (Hinweis:Eine Zeile ohne Leerzeichen gibt eine Fehlermeldung aus, und eine Zeile mit zwei Leerzeichen wurde still bei alten udev-Versionen ignoriert). KEYBOARD_KEY_ folgt der Scancode in hexadezimaler Form (so wie sowohl evtest und input-kbd geben). Gültige Werte können entweder von evtest erhalten werden output oder das input-kbd Ausgabe oder sogar aus /usr/include/linux/input.h Datei:zum Beispiel KEY_102ND würde 102nd ergeben (durch Entfernen von KEY_ und Umwandlung in Kleinbuchstaben), die ich oben verwendet habe.

Geben Sie nach dem Speichern der Datei Folgendes ein:

udevadm hwdb --update

um die Datenbank /etc/udev/hwdb.bin (neu) aufzubauen (Sie können den Zeitstempel überprüfen). Dann

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

berücksichtigt die neuen Einstellungen. Sie können dies mit evtest überprüfen .

Im Jahr 2014 hatte das veröffentlichte udev unvollständige/fehlerhafte Informationen in /lib/udev/hwdb.d/60-keyboard.hwdb , aber Sie können sich die neueste Entwicklungsversion der Datei und/oder meinen Fehlerbericht und die Diskussion zu Dokumentations- und Abstandsproblemen ansehen.

Wenn dies nicht funktioniert, wird das Problem möglicherweise gefunden, nachdem die Protokollebene von udevd vorübergehend erhöht wurde mit udevadm control (Einzelheiten finden Sie auf der Manpage udevadm(8)).

Für altes udev Versionen wie 204 sollte diese Methode immer noch funktionieren.


Linux
  1. 8 Tipps für die Linux-Kommandozeile

  2. Haben Sie eine Kuh an der Linux-Befehlszeile

  3. Boxen Sie sich auf der Linux-Befehlszeile ein

  4. Linux – Raw-Tastaturmodus?

  5. Ganze Festplatte Linux sichern?

So booten Sie in die Linux-Befehlszeile

Meistern Sie die Linux-Befehlszeile

Grundlagen der Linux-Befehlszeile:sudo

Benutzerdefinierte Tastaturtasten in Linux neu zuordnen - Tutorial

Linux – Verknüpfung zum Minimieren aller Windows?

Cedilla unter C (ç) im Tastaturlayout „US International with Dead Keys“ unter Linux