Welches Protokoll / welcher Standard wird von Endgeräten verwendet?

25

Ich habe mich gefragt, wie die "GUI" einer Befehlszeilenanwendung über ein Netzwerk kommuniziert. Meistens ist es recht einfach (einfacher Text / Eingabe), aber manchmal ist es komplexer (Eignung).

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

Olivier Lalonde
quelle

Antworten:

46

Konsolenprogramme verwenden normalerweise Flüche oder einen ihrer Nachfolger¹, um die Art von Textbenutzeroberflächen zu erstellen, über die Sie sprechen.

Diese Bibliotheken verwenden eine von zwei Datenbanken, genannt termcapund 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 verschiedener Terminaltypen zu erhalten. Die überwiegende Mehrheit der in diesen Datenbanken definierten Terminaltypen hat die Zeit der realen Terminals nicht überstanden und ist daher nur noch von historischem Interesse.

ANSI-Terminals

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

  • ANSI X3.64 : Ein Standard zur Steuerung von "Glasterminals" - im Gegensatz zu Teletypen - basiert auf speziellen Zeichenfolgen, die die Gegenstelle interpretiert. Wenn die Unix-Box beispielsweise einem ANSI X3.64-kompatiblen Terminal mitteilen möchte, dass der Cursor in die linke obere Ecke des Bildschirms bewegt werden soll, werden die Zeichen gesendetESC [ 1 ; 1 H. Die ersten beiden Zeichen weisen das Terminal an, eine Steuersequenz zu erwarten, die Einsen sind die Zeile und die Spalte, und esHhandelt sich um den Befehl, der "Cursor bewegen" bedeutet .⁴

    Wissenswertes: Viele PC- BBS verwendeten auch ANSI-Codes. ( Noch tun , eigentlich.)

  • DEC VT100 : Das erste wirklich beliebte ANSI-kompatible Glasterminal war das VT100 von Digital Equipment Corporation. Durch den Nachweis des De-Jure- Standards von ANSI auf dem Markt wurde ein De-Facto- Standard etabliert, der bis heute von Bedeutung ist.

    Manchmal wird dies als VT102-Protokoll bezeichnet. Dies ist eine spätere kostenreduzierte und daher populärere Version des VT100 sowie alle verfügbaren integrierten Erweiterungsoptionen.

    Die DEC-Terminalprotokolle sind abwärtskompatibel und erstrecken sich vom ersten 1978 eingeführten ANSI-kompatiblen Modell (VT100) bis zu den Modellen der VT500-Serie, die von Boundless Technologies nach dem Kauf des Terminalgeschäfts von DEC im Jahr 1995 hergestellt wurden jetzt aus dem Geschäft, aber ihre Terminals erscheinen immer noch von Zeit zu Zeit auf dem Gebrauchtmarkt.)

  • xterm : Eine Art Amalgam von ANSI und den VT-was auch immer-Standards. Wenn Sie einen GUI-Terminalemulator wiextermoder eines seiner Derivate verwenden, verwenden Sie normalerweise auch dasxtermTerminalprotokoll, in der Regel das modernerexterm-coloroderdie modernerenxterm-color256Varianten.

  • Linux : Die Linux-Konsole verwendet auch eine erweiterte Variante des ANSI-Terminalprotokolls im selben Sinne wie diextermProtokolle. Die meisten Erweiterungen haben mit den Unterschieden zwischen einem PC und einem Glasterminal zu tun. Beispielsweise verfügt die IBM-Tastatur über einige Tasten, die sich nicht auf einem DEC VT befinden. (Und umgekehrt.)

    Einige Unix-Systeme haben auch ein eigenes Konsolenterminalprotokoll. Es gibt zum Beispiel die scoansiANSI X3.64-Variante für SCO Unixes.

Ein typisches Terminal-Emulator-Programm ist so etwas wie ein Mischling und emuliert kein einzelnes Terminal-Modell genau. Es unterstützt möglicherweise 96% aller DEC VT-Escape-Sequenzen bis zum VT320, unterstützt jedoch auch Erweiterungen wie ANSI-Farbe (eine VT525-Funktion) und eine beliebige Anzahl von Zeilen und Spalten. Die 4% der Codes, die es nicht versteht, werden möglicherweise nicht übersehen, wenn Ihre Programme diese Funktionen nicht benötigen, obwohl Sie curses(oder was auch immer) mitgeteilt haben , dass Programme, die sie verwenden, das VT320-Protokoll verwenden sollen. Solch ein Programm könnte sich selbst als VT320-kompatibel bewerben, obwohl dies streng genommen nicht der Fall ist

Nicht-ANSI-Terminals

Es gibt noch ein paar andere bemerkenswerte Standards, auf die Sie manchmal stoßen:

  • Wyse : Als einer der ersten unabhängigen Hersteller von Glasterminals begann Wyse in den frühen 1980er Jahren mit der Herstellung von Terminals, bevor Workstation Computing begann, Minicomputer zu verdrängen. Wyse-Terminals waren zwar in der Lage, das VT100 und andere gängige Terminalprotokolle zu emulieren, hatten jedoch auch eigene native Codes.

  • IBM 3270 : Obwohl es sich nicht ausschließlich um einen "Unix" -Terminaltyp handelt, führte die Notwendigkeit, Unix-Systeme mit IBM-Mainframes zu verbinden, zur Erstellung von Terminalemulationsprogrammen der IBM 3270-Serie, die Sie immer noch verwenden können. Emulatoren für die späterenTerminalsder 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 Glas-Terminals weitgehend verdrängten und Bitmap-Grafiken zum Standard machten, gab es teure Grafik-Terminals, die als Reaktion auf Textbefehle ähnlich den oben beschriebenen Escape-Sequenzen Grafiken auf den Bildschirm zeichneten. Am beliebtesten war wohl die Tektronix 4010-Serie.

    Es hat Spaß gemacht, sie zu benutzen. Sie könnten ein Programm schreiben, das eine Grafik zeichnet, aber anstatt sie einfach zum Zeichnen auf Ihrem lokalen Terminal auszuführen, könnten Sie die Ausgabe in eine Datei umleiten:

    $ ./my4014program > my-neat-graphic
    

    Sie können diese Datei dann an eine andere Person senden und diese kann catsie auf ihrem Tek-Terminal anzeigen, ohne Ihr Programm zu haben. Ein Teil des Charmes war, wie langsam diese Terminals beim Zeichnen waren, sodass Sie den Grafikaufbau über mehrere Sekunden beobachten konnten.

Heute mit Unix Terminal Emulation arbeiten

Sie können cursesanhand der TERMUmgebungsvariablen herausfinden, welchen Terminalstandard Sie für Bibliotheken verwenden möchten:

$ echo $TERM
xterm-color

Wenn Sie sshzu einem anderen System wechseln, wird die TERMVariable mitgeführt, damit die Unix-Remote-Box weiß, wie sie mit Ihrem lokalen Terminal kommuniziert.

Da es sich bei so vielen dieser Protokolle um ANSI X3.64-Varianten handelt und die allgegenwärtigen ASCII- und UTF-8-Zeichencodierungsstandards so viel anderes berücksichtigen, ist eine falsche TERMVariable normalerweise nicht katastrophal. Dinge, die dazu neigen, kaputt zu gehen, sind erweiterte Tasten wie Start und Bild auf, Alt-beliebige Tastenkombinationen und typografische Anzeigefunktionen wie Farbe, Fettdruck usw.


Fußnoten:

  1. Meistens Flüche .

    Es gibt auch direkte Konkurrenten der cursesAPI wie S-Lang .

  2. AT & T wurde terminfoals Ersatz für die BSD- termcapDatenbank herausgegeben und konnte diese größtenteils ersetzen. Es gibt jedoch immer noch Programme, die die alte termcapDatenbank verwenden. Dies ist einer der vielen Unterschiede zwischen BSD und AT & T, die Sie bei modernen Systemen immer noch feststellen können.

    Meine macOS-Box hat keine /etc/termcap, aber /usr/share/terminfoeine Standardinstallation von FreeBSD ist genau umgekehrt, obwohl sich diese beiden Betriebssysteme auf der Kommandozeilenebene oft sehr ähnlich sind.

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

  4. Ordnungsgemäß geschriebene Unix-Programme geben diese Escape-Sequenzen nicht direkt aus. Stattdessen verwenden sie eine der oben genannten 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 Ihrer TERMUmgebungsvariableneinstellung aus. Auf diese Weise kann das Programm unabhängig vom Terminaltyp, auf dem Sie es ausführen, ordnungsgemäß ausgeführt werden.

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

    Der Betreuer von xtermschrieb ein Programm vttestzum Testen von VT-Terminal-Emulatoren wie z xterm. Sie können es mit anderen Terminalemulatoren ausführen, um herauszufinden, welche Funktionen sie nicht unterstützen.

Warren Young
quelle