
Keymaps haben einen ähnlichen Ablauf wie das OSI-Modell, sind aber bei weitem nicht so gut definiert. Ich führe derzeit eine Neuzuordnung auf einer höheren Ebene durch, als ich möchte. Offensichtlich entspricht Ebene 1 der physischen Tastatur und Ebene 7 der Anwendung, aber ich bin mir nicht sicher, wie viele andere Ebenen es gibt oder wo sie in einer Reihe stehen.
Wenn dies ein Desktop mit einer dedizierten programmierbaren physischen Tastatur wäre, wäre ich fertig, aber leider ist es ein Laptop und ich muss die Neubelegungen beibehalten, während ich die integrierte Tastatur verwende.
Ich tausche die folgenden Tastenpaare aus: [Tilde/Esc], [Caps/LCtrl], [Back{space,slash}]. Ich verwende auch Dvorak, aber das ist im Betriebssystem standardmäßig konfiguriert.
Derzeit ändere ich /usr/share/X11/xkb/keycodes/evdev, um meine Änderungen in X vorzunehmen (und erstelle eine benutzerdefinierte Layoutdatei für Konsolen, aber das ist hier nicht relevant). Ich bin mir nicht sicher, wo dies im „Ebenenstapel“ liegt.
Das Thema:Meine Tastenbelegung lässt sich nicht in Proxmox-Konsolensitzungen übersetzen, die einen Web-VNC-Client verwenden. (Das Layout ist auch nicht anwendbar, aber das ist zu erwarten.) Das Problem besteht eindeutig darin, dass der VNC-Client die Tastatur auf einer niedrigeren Ebene einhängt, wo die evdev-Neubelegung noch nicht angewendet wurde.
Unter Windows verwende ich ein Dienstprogramm namens KeyTweak, um Scancode-Maps für die Registrierung zu generieren, die im Wesentlichen „Layer 3“ zu sein scheint. Ich habe Spiele gespielt, bei denen die Tastatur anscheinend auf „Layer 2“ eingebunden war, aber das ist kaum ein Problem, da in den meisten Spielen sehr wenig getippt wird.
Abschließend, ich bin mir nicht sicher, wo evdev in meinem imaginären OSI-Tastaturmodell liegt, aber wie kann ich auf einer niedrigeren Ebene neu zuordnen? Ich muss die Neuzuordnung aus keinem Grund auswechseln, daher kann diese Änderung grundsätzlich dauerhaft sein. Wenn ich es im BIOS tun könnte, würde ich es tun.
Antwort1
Die Antwort war udev. Ich folgte im Wesentlichendieser Beitrag, aber das Wesentliche ist:
- Installieren
evtest
- Führen Sie aus
evtest
und drücken Sie die Tasten, die Sie neu zuordnen möchten, um zu sehenbeidedie Scancodes und Schlüsselcodes. - Erstellen Sie eine neue Datei mit
/etc/udev/hwdb.d/
einem Namen wie diesem70-keyremap.hwdb
und dem folgenden Inhalt- Ich gehe davon aus, dass die Nummer die Reihenfolge der Datei ist, aber ich hatte keine vorhandenen Dateien, auf denen ich es aufbauen konnte, also bin ich mir nicht sicher, welche Voraussetzungen es gibt, dass es eine höhere Nummer haben muss als. Tatsächlich
hwdb.d
existierte das Verzeichnis bei mir auf Tumbleweed nicht, also musste ich es erstellen, aber es funktionierte trotzdem.
- Ich gehe davon aus, dass die Nummer die Reihenfolge der Datei ist, aber ich hatte keine vorhandenen Dateien, auf denen ich es aufbauen konnte, also bin ich mir nicht sicher, welche Voraussetzungen es gibt, dass es eine höhere Nummer haben muss als. Tatsächlich
- Laufen
systemd-hwdb update
. - Neustart
_
# This is from the brokkr.net post I linked above
# Format can be found on [https://wiki.archlinux.org/title/Map_scancodes_to_keycodes].
$ cat 70-keymap.hwdb
evdev:atkbd:dmi:bvn*:bvr*:bd*:svn*:pn*:pvr*
KEYBOARD_KEY_01=41 # Remap Tilde to Esc
KEYBOARD_KEY_29=01 # Remap Esc to Tilde (evtest showed "1" but when I put that without the leading zero, it was interpreted as the literal [1] key.)
KEYBOARD_KEY_3A=29 # Remap Caps to LCtrl
KEYBOARD_KEY_1D=58 # Remap LCtrl to Caps
KEYBOARD_KEY_0E=43 # Remap Backspace to Backslash
KEYBOARD_KEY_2B=14 # Remap Backslash to Backspace
Aktualisieren:
Die obige Methode funktionierte auf meinem Laptop einwandfrei, aber als ich ihn angedockt habe, verwendeten externe Tastaturen immer noch die Standard-Tastenbelegung. Das liegt daran, dass die interne Tastatur über PS/2 kommuniziert, das immer noch die AT-Scancodes ( atkbd
in der Gerätezeichenfolge) verwendet, aber USB ist völlig anders. Am Ende musste ich evtest erneut ausführen, um die Scancodes von einer USB-Karte abzurufen und eine andere Belegung zu schreiben. Hier ist meine resultierende Datei:
evdev:atkbd:dmi:*
KEYBOARD_KEY_01=41
KEYBOARD_KEY_29=01
KEYBOARD_KEY_3A=29
KEYBOARD_KEY_1D=58
KEYBOARD_KEY_0E=43
KEYBOARD_KEY_2B=14
evdev:input:b0003v*
KEYBOARD_KEY_70029=41
KEYBOARD_KEY_70035=01
KEYBOARD_KEY_70039=29
KEYBOARD_KEY_700e0=58
KEYBOARD_KEY_7002a=43
KEYBOARD_KEY_70031=14