CTRL + ALT + Serial

Man klemmt auf der einen Seite TX, RX und Ground an die PINs eines Systems und auf der anderen Seite alles an einen USB-to- Serial Konverter.

Schon kann man fast jedes Linux-System “fernwarten”. Vorausgesetzt, dieses Linux ist mit einer seriellen Konsole konfiguriert.

Tja, aber wie unterbricht man dort einen laufenden Prozess? CTRL + C würde normalerweise helfen.
… aber wie überträgt man die Tasten CTRL + C über eine serielle Verbindung?


Die Lösung lautet einfach: ASCII Code 3.

Alle CTRL + Buchstabe Kombinationen werden auf die ASCII-Codes 1 bis 26 abgebildet.

… wieder was gelernt.

Ctrl + ? == ? - 64

Das bedeutet natürlich, dass manche Tastenkombinationen etwas Besonderes bedeuten, z.B.: hat Ctrl + M dann den Code 13 und ist damit der ENTER Taste gleichgesetzt.
Eigentlich läuft alles nach der Formel: Ctrl + {chr} = ASCII({chr}) - 64
Und das hört nicht bei Z -> 26 auf sondern geht bis _ -> 31 weiter.

ASCII Kombination Taste Bedeutung
3 CTRL + C   Programm abbrechen
7 CTRL + G   \a Bell, akustisches Signal
8 CTRL + H BACKSPACE \b Zeichen löschen
9 CTRL + I TAB \t Tabulator einrücken
10 CTRL + J   \n Line Feed
11 CTRL + K   \v Vertikaler Tabulator
12 CTRL + L   \f Form feed, neue Seite
13 CTRL + M ENTER \r Wagenrücklauf
26 CTRL + Z   Substitute, Eingabe-Ende
27 CTRL + [ ESCAPE Escape-Sequenz einleiten
28 CTRL + \    
29 CTRL + ]    
30 CTRL + ^    
31 CTRL + _    

Weitere Kombinationen

Wenn es um die F-Tasten, Pfeiltasten oder Alt + * geht, wird es leider kompliziert. Hier hängt es nämlich vom Terminal-Standard der Zielkonsole ab. Linux setzt hier auf VT-100 und das generiert Escape-Codes für alle möglichen Tasten und Tastenkombinationen.

Schlimmer ist es beim Einlesen dieser Zeichen über STDIN, denn hier findet ein Mapping von den Sondertasten auf Buchstaben statt, die mit einem Präfix Code eingeleitet werden, oft der ASCII Code 0 (NUL). Oder es werden ebenso Escape-Codes erzeugt.

Fazit

Die CTRL - Formel ist super und auch schon im GATE Projekt zum Teil in system/keyboards.h und system/terminals.h implementiert.

Die Sondertasten und Alt bleiben für mich noch offen. Da ist es wichtig eine gutes generisches Mapping zu finden, in welches von den nativen APIs aus übersetzt wird, damit man gut damit weiterarbeiten kann.

CTRL + C ist aber so ziemlich die wichtigste Kombination überhaupt, denn ohne sie ist es schwierig laufende (oder bockige) Konsolenprogramm zu beenden.