Hier gibt es zwei Ebenen: KEYCODE-zu-KEYSYM-Zuordnung und KEYSYM-zu-Text-Zuordnung. Wenn Sie den Kernel zählen, der AT Keyboard-Scancodes einem XT-artigen KEYCODE oder einen USB Keyboard-HID-Code einem KEYCODE zuordnen muss, gibt es mehr Ebenen. Ein KEYCODE ist einfach eine 8-Bit-Ganzzahl ohne Vorzeichen, die der Kernel eines Betriebssystems an den X11-Server weitergibt. Es kann zwischen Betriebssystemen wie Linux und Solaris variieren. Unter Linux sind diese KEYCODEs normalerweise die gleiche Nummer wie auf alten XT PC-Tastaturen. Neuere Computer mit AT-, PS / 2- oder USB-Tastaturen ordnen diese Tastaturen normalerweise nur dem alten XT-Code zu, damit der Schlüssel das Leben einfacher macht.
Rohe Tastaturcodes (XT, AT, PS / 2 oder USB) repräsentieren einen physischen Ort auf einer Tastatur. Die XT-Tastatur sendet beim Drücken oder Loslassen einer Taste nur eine einzige 8-Bit-Nummer. Die q-Taste auf einer US / British XT-Tastatur sendet die Nummer 16. Auf einer französischen Tastatur wird dieselbe physische Taste mit a bezeichnet, aber sie sendet immer noch 16. Es sind die höheren Ebenen im Betriebssystem, die ihr eine echte Bedeutung zuweisen. Wenn eine Taste auf einer XT-Tastatur losgelassen wird, wird derselbe Tastencode plus 128 gesendet. In diesem Beispiel wird beim Drücken von q eine 16 gesendet, beim Loslassen jedoch die Nummer 142 (16 + 128). AT-Tastaturen verwenden Scancodes, die aus einer Reihe von Zahlen bestehen und recht lang werden können. Mit Schlüsselfreigaben werden zusätzliche Codes hinzugefügt. Beispielsweise lautet der Scancode für Pause E1, 1D, 45, E1, 9D, C5. Die meisten Betriebssysteme, einschließlich DOS, Windows, Linux, FreeBSD, und das BIOS ordnet alle Scancodes wesentlich einfacheren XT-Scancodes zu. Außerdem wird die Unterstützung neuerer Tastaturen vereinfacht, die unterschiedliche Codes verwenden, z. B. USB-Tastaturen, die HID-Codes senden. Alle Codes werden vom Betriebssystem demselben konsistenten Satz von Codes zugeordnet, bevor X11 oder die Anwendung sie sieht.
X11 kennt diesen Teil des Prozesses nicht. Es erhält lediglich den KEYCODE vom Kernel und wendet seine eigene Zuordnung an, um diesen KEYCODE in einen KEYSYM zu konvertieren. Xmodmap ist das Standardwerkzeug zur Steuerung dieses Mappings. Ein Großteil des Verhaltens der Tastaturbelegung ist konfigurierbar, es gibt jedoch einige Sonderfälle wie die Num-Taste, den Modusschalter und die Feststelltaste / Umschalttaste, die in X11 fest programmiert sind. Andere Aspekte wie Shift sind tatsächlich konfigurierbar. Im Gegensatz zu Mode Switch oder Num Lock kann jede Taste als Umschalttaste zugeordnet werden.
KEYCODEs stellen physische Schlüssel dar, die vom Kernel des Betriebssystems gesendet werden. Jeder KEYCODE kann 8 möglichen KEYSYMs zugeordnet werden. Es werden nur 4 verwendet und manchmal Level 1-4 genannt. Level 1 gibt das KEYSYM an, das gedruckt wird, wenn keine Modifikatoren aktiv sind. Dies sind oft Kleinbuchstaben und Ziffern. Modifikatoren sind KEYCODEs, die das von anderen KEYCODEs generierte KEYSYM ändern, wenn der Modifikator aktiv ist (gedrückt oder eingeschaltet). Modifikatortastencodes werden auch über Xmodmap gesteuert. Level 2 gibt ein KEYSYM an, das gesendet werden soll, wenn der Shift-Modifikator gedrückt wird. Stufe 3 wird immer dann aktiviert, wenn der Modusschalter KEYSYM gedrückt wurde. Stufe 4 wird aktiviert, wenn sowohl eine Umschalttaste als auch ein Modusschalter aktiv sind.
Sobald ein KEYSYM generiert wurde, kann dies direkt interpretiert werden, wird jedoch meistens in Text konvertiert. Nicht alle KEYSYMs werden zu Text oder wirken sich nur auf zukünftige KEYSYMs aus. Ein Beispiel ist natürlich Shift_L, das keine Textdarstellung hat, aber es gibt auch eine Reihe von KEYSYMs, die zum Verfassen eines anderen Zeichens verwendet werden. Eine Liste von ihnen auf meinem System ist unter /usr/share/X11/locale/en_US.UTF-8/Compose
. Ein solches Beispiel ist das tote_akute KEYSYM, das beim Drücken versucht, das nächste KEYSYM in einen Buchstaben mit akutem Akzent zu konvertieren. Es gibt eine Standardzuordnung zum Umwandeln von KEYSYMs in Unicode.
Nachdem dies alles gesagt wurde, ist Xmodmap veraltet und durch XKB ersetzt, das viel ausgefeilter ist. Dies wirkt sich darauf aus, wie KEYCODEs auf KEYSYMs abgebildet werden, aber nicht darauf, wie der Kernel KEYCODEs generiert oder wie KEYSYMs in Text konvertiert oder zusammengesetzt werden, der immer noch derselbe ist. XKB kann deaktiviert werden, um das Verhalten von Xmodmap wiederherzustellen. Es hat auch eine Kompatibilitätsebene zur Unterstützung von Xmodmap, aber es kann Probleme geben, da es nicht vollständig kompatibel ist. XKB-Regeln sind unter- /usr/share/X11/xkb/
und viel ausgefeilter. Es gibt an anderer Stelle eine gute Dokumentation darüber, wie Tastaturlayouts zum Zuordnen von KEYCODEs zu KEYSYMs generiert werden.
Die Linux-Konsole verfügt über eigene Tastaturlayouts, die /usr/share/keymaps
im loadkeys
Befehl gespeichert und mit diesem geladen werden . Im BIOS und in früheren Bootloader-Phasen, einschließlich GRUB2, ist die Tastaturzuordnung unabhängig von der Nummer, der das BIOS den Schlüssel zuordnen möchte.