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/...
oderinput-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“
betrachtetAkzeptierte 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.)
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.