GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Welches Protokoll/welcher Standard wird von Terminals verwendet?

Ich habe mich gefragt, wie die „GUI“ einer Befehlszeilenanwendung über ein Netzwerk kommuniziert wird. Meistens ist es ganz einfach (einfacher Text / Eingabe), aber manchmal ist es komplexer (Begabung).

Ist es durch eine Art Standard definiert, sodass jeder sein eigenes Terminal schreiben kann und dass sich alle Terminalimplementierungen gleich verhalten (Farben, Positionierung usw.)?

Akzeptierte Antwort:

Konsolenprogramme verwenden normalerweise Flüche oder einen seiner Nachfolger¹, um die Art von Textbenutzerschnittstellen zu erstellen, von denen Sie sprechen.

Diese Bibliotheken verwenden eine von zwei Datenbanken namens termcap und terminfo .² Diese Datenbanken enthalten Karten, die der Bibliothek mitteilen, welche Codes gesendet werden müssen, um die gewünschten Aktionen mit einer großen Anzahl unterschiedlicher Terminaltypen zu erhalten. Die überwiegende Mehrheit der Terminaltypen, die Sie in diesen Datenbanken definiert finden, hat die Tage echter Terminals nicht überlebt und ist daher nur noch von historischem Interesse.

ANSI-Terminals

Moderne Unix-Terminalemulatoren³ verwenden das ANSI X3.64-Protokoll oder eine seiner neueren Varianten:

  • ANSI X3.64 :Ein Standard zur Steuerung von „Glasterminals“ – im Gegensatz zu Fernschreibern – basiert auf speziellen Zeichenfolgen, die die Gegenstelle interpretiert. Wenn die Unix-Box beispielsweise einem ANSI X3.64-kompatiblen Terminal sagen möchte, dass es seinen Cursor in die obere linke Ecke des Bildschirms bewegen soll, sendet es die Zeichen ESC [ 1 ; 1 H . Die ersten beiden Zeichen weisen das Terminal an, eine Steuersequenz zu erwarten, die Einsen sind die Zeile und Spalte und H ist der Befehl, der „Cursor bewegen“ bedeutet.⁴

    Wissenswertes:Viele PC-BBS verwendeten auch ANSI-Codes. (Tut es eigentlich immer noch.)

  • DEC VT100 :Das erste wirklich beliebte ANSI-kompatible Glasterminal war das VT100 von Digital Equipment Corporation. Durch den Beweis von ANSIs de jure Standard auf dem Markt, es hat sich de facto etabliert Standard, der auch heute noch wichtig ist.

    Manchmal sehen Sie dies als VT102-Protokoll bezeichnet, das eine spätere, kostenreduzierte – und daher beliebtere – Version des VT100 mit allen verfügbaren integrierten Erweiterungsoptionen ist.

    Die DEC-Terminalprotokolle sind eine abwärtskompatible Serie, die sich vom ersten ANSI-kompatiblen Modell aus dem Jahr 1978 (dem VT100) bis hin zu den Modellen der VT500-Serie erstreckt, die von Boundless Technologies hergestellt wurden, nachdem sie 1995 das Terminalgeschäft von DEC gekauft hatten. (Boundless ist inzwischen aus dem Geschäft, aber ihre Terminals tauchen immer noch von Zeit zu Zeit auf dem Gebrauchtmarkt auf.)

  • xterm :Eine Art Amalgam aus ANSI und den VT-Was auch immer-Standards. Wann immer Sie einen GUI-Terminalemulator wie xterm verwenden oder einer seiner Ableitungen verwenden Sie normalerweise auch den xterm Terminalprotokoll, typischerweise das modernere xterm-color oder xterm-color256 Varianten.

  • Linux :Die Linux-Konsole verwendet auch eine erweiterte Variante des ANSI-Terminalprotokolls, im gleichen Sinne wie xterm Protokolle. Die meisten seiner Erweiterungen haben mit den Unterschieden zwischen einem PC und einem Glasterminal zu tun. Zum Beispiel hat die IBM-Tastatur einige Tasten, die auf einem DEC VT-was auch immer nicht vorhanden sind. (Und umgekehrt.)

    Einige Unix-Systeme haben auch ihr eigenes Konsolen-Terminal-Protokoll. Da ist der scoansi ANSI X3.64-Variante für SCO-Unixe, zum Beispiel.

Ein typisches Terminalemulatorprogramm ist so etwas wie ein Mischling und emuliert kein einzelnes Terminalmodell genau. Es unterstützt möglicherweise 96 % aller DEC VT-Escape-Sequenzen bis zum VT320, unterstützt aber auch Erweiterungen wie ANSI-Farbe (ein VT525-Feature) und eine beliebige Anzahl von Zeilen und Spalten. Die 4 % der Codes, die es nicht versteht, dürfen nicht übersehen werden, wenn Ihre Programme diese Funktionen nicht benötigen, obwohl Sie curses gesagt haben (oder was auch immer), dass Programme, die es verwenden, das VT320-Protokoll verwenden sollen. Ein solches Programm könnte sich als VT320-kompatibel ausgeben, obwohl es das streng genommen nicht ist.⁵

Siehe auch:Aktualisieren des TNS-Eintrags über mehrere Terminals hinweg?

Nicht-ANSI-Terminals

Es gibt ein paar andere bemerkenswerte Standards, denen Sie manchmal noch begegnen:

  • Wise :Als einer der frühesten unabhängigen Hersteller von Glasterminals begann Wyse in den frühen 1980er Jahren mit der Herstellung von Terminals, bevor Workstation Computing Minicomputer zu verdrängen begann. Obwohl Wyse-Terminals das VT100 und andere gängige Terminalprotokolle emulieren konnten, hatten sie auch ihre eigenen nativen Codes.

  • IBM 3270 :Obwohl dies nicht unbedingt ein „Unix“-Terminaltyp ist, führte die Notwendigkeit, Unix-Systeme mit IBM-Mainframes zu verbinden, zur Entwicklung von Terminal-Emulatorprogrammen der Serie IBM 3270, die Sie immer noch verwenden. Emulatoren für die Terminals der späteren IBM 5250-Serie sind ebenfalls weit verbreitet und werden heutzutage am häufigsten für die Verbindung mit AS/400- und System i-Minicomputern verwendet.

  • Tektronix 4014 :Bevor PCs und Workstations Glasterminals weitgehend verdrängten und damit Bitmap-Grafiken zum Standard machten, gab es teure Grafikterminals, die als Reaktion auf Textbefehle ähnlich den oben beschriebenen Escape-Sequenzen Grafiken auf den Bildschirm zeichneten. Die wahrscheinlich beliebteste davon war die Tektronix 4010-Serie.

    Sie waren ziemlich lustig zu benutzen. Sie könnten ein Programm schreiben, das eine Grafik zeichnet, aber anstatt es einfach auszuführen, um es auf Ihrem lokalen Terminal zu zeichnen, könnten Sie seine Ausgabe in eine Datei umleiten:

    $ ./my4014program > my-neat-graphic
    

    Sie könnten diese Datei dann an jemand anderen senden, und sie könnten cat es auf ihrem Tek-Terminal, um die Grafik zu sehen, ohne Ihr Programm zu haben. Ein Teil des Charmes war, wie langsam diese Terminals beim Zeichnen waren, sodass Sie sehen konnten, wie sich die Grafik über mehrere Sekunden aufbaute.

Heute mit Unix-Terminalemulation arbeiten

Sie können herausfinden, welchen Terminalstandard Sie in Bibliotheken wie curses abfragen zu verwenden, indem Sie sich den TERM ansehen Umgebungsvariable:

$ echo $TERM
xterm-color

Wenn Sie ssh zu einem anderen System, der TERM Variable wird mitgeführt, damit die entfernte Unix-Box weiß, wie sie mit Ihrem lokalen Terminal kommunizieren soll.

Weil so viele dieser Protokolle ANSI X3.64-Varianten sind und weil die allgegenwärtigen ASCII- und UTF-8-Zeichencodierungsstandards so viel anderes erledigen, ein falscher TERM Variable ist normalerweise nicht katastrophal. Dinge, die dazu neigen, kaputt zu gehen, sind erweiterte Tasten wie Home und Page Up, Alt-was auch immer-Tastenkombinationen und typografische Anzeigefunktionen wie Farbe, Fettdruck usw.

Fußnoten:

  1. Am häufigsten ncurses.

    Es gibt auch regelrechte Konkurrenten der curses API, wie S-Lang.

  2. AT&T veröffentlichte terminfo als Ersatz für termcap von BSD Datenbank, und es war weitgehend erfolgreich, sie zu ersetzen, aber es gibt immer noch Programme, die immer noch das alte termcap verwenden Datenbank. Dies ist einer der vielen Unterschiede zwischen BSD und AT&T, die Sie immer noch auf modernen Systemen finden können.

    Meine macOS-Box hat kein /etc/termcap , aber es hat /usr/share/terminfo , wohingegen eine Standardinstallation von FreeBSD umgekehrt ist, obwohl diese beiden Betriebssysteme auf Kommandozeilenebene oft recht ähnlich sind.

  3. minicom , xterm , mintty , GNOME-Terminal, Terminal.app usw.

  4. Korrekt geschriebene Unix-Programme geben diese Escape-Sequenzen nicht direkt aus. Stattdessen verwenden sie eine der oben erwähnten Bibliotheken und weisen sie an, „den Cursor auf Position (1,1) zu bewegen“ oder was auch immer, und die Bibliothek gibt die erforderlichen Terminal-Steuercodes basierend auf Ihrem TERM aus Einstellung der Umgebungsvariablen. Dadurch kann das Programm unabhängig vom Terminaltyp, auf dem Sie es ausführen, ordnungsgemäß funktionieren.

  5. Alte Textterminals hatten viele seltsame Funktionen, die von Programmen nicht viel genutzt wurden, so dass viele beliebte Terminal-Emulator-Programme diese Funktionen einfach nicht implementieren. Häufige Auslassungen sind die Unterstützung für Sixel-Grafiken und Textmodi mit doppelter Breite und doppelter Höhe.

    Der Betreuer von xterm schrieb ein Programm namens vttest zum Testen von VT-Terminalemulatoren wie xterm . Sie können es mit anderen Terminal-Emulatoren vergleichen, um herauszufinden, welche Funktionen sie nicht unterstützen.

Verwandt:Rekursives Glob?
Linux
  1. Was ist Ihr Lieblings-Linux-Terminal-Emulator?

  2. Was ist Ihr Lieblings-Linux-Terminal-Trick?

  3. Welche Terminal-Emulatoren unterstützen den Tmux-Steuerungsmodus?

  4. Wofür steht Etc?

  5. Was ist das File Transfer Protocol (FTP)

3 Linux-Terminals, die Sie ausprobieren müssen

Was ist SSH?

Welches Terminal ist das?

SystemD - Wofür wird SystemD verwendet?

Warum haben wir 3 Arten von X-Auswahlen in LINUX?

Was bedeutet mdev in ping(8)?