Wie verarbeitet der Linux-Kernel Tastatur-Ein-/Ausgaben?

Wie verarbeitet der Linux-Kernel Tastatur-Ein-/Ausgaben?

Ich verstehe nichts von virtuellen Terminalgeräten (z. B. /dev/tty1), aber ich weiß, dass ich zu „wechseln“ kann, tty1wenn ich drücke ctrl + alt + f1.

Ich habe ein benutzerdefiniertes Tastaturlayout, das zwar aktiviert ist, /usr/share/X11/xkb/symbols/usaber nur „funktioniert“, wenn X ausgeführt wird.

Sowohl virtuelle Terminals als auch X scheinen die Tastatur-Ein-/Ausgabe auf ihre eigene Weise zu verwalten, vermutlich interagieren sie aber beide auf irgendeine Weise mit dem (Linux-)Kernel, der eine Art Abstraktion für die Tastatur-Hardware bereitstellen muss.

Wie verarbeitet der Linux-Kernel Tastatureingaben/-ausgaben? Gibt es eine Quelldatei, die ich mir ansehen kann, mit einer Liste aller Scancodes/Keycodes/Keysims usw. und vielleicht mit der Gesamtlogik, wie Linux die gesamte Idee einer „Tastatur“ handhabt?

(Ich verwende Lubuntu.)

Antwort1

SehenWie funktionieren Tastatureingabe und Textausgabe?für einen Überblick über das Thema.

Genauer gesagt empfängt der Kernel unter Linux Scancodes von der Hardware und konvertiert diese in Tastencodes. (Diese Terminologie ist nicht ganz standardisiert; möglicherweise wird „Scancode“ oder „Tastencode“ für beides verwendet.) Wie diese Konvertierung funktioniert, hängt vom Tastaturtreiber ab. Für PS/2-Tastaturen können Sie sie mit konfigurierensetkeycodesFür USB-Tastaturen können Sie es konfigurierenüber udev. Siehe auchdas Arch-Wiki. Alle Benutzereingabegeräte, einschließlich Tastaturen und Mäuse, werden über Ereignisgeräte bereitgestellt /dev/input/event*.

In einer Linux-Konsole werden Tastencodes gemäß der Tastenbelegung der Konsole Escape-Sequenzen zugeordnet. Da es sich bei einer Konsole um ein Textterminal handelt, sehen Anwendungen Bytes, wobei druckbare Zeichen sich selbst darstellen und Funktionstasten mit Steuerzeichen oder Escape-Sequenzen codiert sind. Sie können die Zuordnung ändern mitloadkeys. Die Zuordnung verwendet zwei Indirektionsebenen, von der Kombination aus Tastencode und Modifikator (mit drei Modifikatoren: shift, control, alt) zum Keysym und vom Keysym zum String (Zeichen oder Escape-Sequenz). Der Satz von Keysyms ist festgelegt. Wenn Sie also benutzerdefinierte Kombinationen definieren möchten, müssen Sie vorhandene Keysyms verwenden, die sonst nicht verwendet werden, wie F13, F14, …

Wenn Sie den Quellcode sehen möchten, der diese Übersetzungen implementiert, schauen Sie sich an unterTastaturtreiberUndgenerischer Eingabecode, UndudevUndAbonnieren.

X11 (die GUI) hat seine eigene Methode, Tastenkombinationen den von Anwendungen empfangenen Tasten zuzuordnen. X11-Anwendungen erkennen Tastenkombinationen und Modifikatoren, sodass Funktionstasten nicht weiter codiert werden müssen. Tatsächlich gibt es unter X zwei Möglichkeiten, Tastenkombinationen zu definieren: die klassische Methode xmodmap und den neueren Mechanismus XKB, der leistungsfähiger, aber auch komplexer ist.

verwandte Informationen