Quale protocollo / standard viene utilizzato dai terminali?


25

Mi chiedevo come la "GUI" di un'applicazione a riga di comando fosse comunicata su una rete. Il più delle volte, è abbastanza semplice (testo normale / input) ma a volte è più complesso (attitudine).

È definito da una sorta di standard in modo che chiunque possa scrivere il proprio terminale e che tutte le implementazioni del terminale si comportino allo stesso modo (colori, posizionamento, ecc.)?

Risposte:


46

I programmi per console in genere usano maledizioni o uno dei suoi successori¹ per creare il tipo di interfacce utente di testo di cui stai parlando.

Queste librerie utilizzano uno dei due database, chiamato termcape terminfo.² Questi database contengono mappe che indicano alla libreria quali codici inviare per ottenere le azioni desiderate con un gran numero di diversi tipi di terminali. La stragrande maggioranza dei tipi di terminali che troverai definiti in questi database non è sopravvissuta ai tempi dei terminali reali , e quindi ora sono solo di interesse storico.

Terminali ANSI

I moderni emulatori di terminali Unix³ utilizzano il protocollo ANSI X3.64 o una delle sue varianti successive:

  • ANSI X3.64 : uno standard per il controllo dei "terminali di vetro" - al contrario dei teletipi - si basa su sequenze speciali di caratteri che il terminale remoto interpreta. Ad esempio, se la casella Unix vuole dire a un terminale compatibile ANSI X3.64 di spostare il cursore nell'angolo in alto a sinistra dello schermo, invia i caratteriESC [ 1 ; 1 H. I primi due caratteri indicano al terminale di aspettarsi una sequenza di controllo, gli 1 sono la riga e la colonna edHè il comando che significa "sposta cursore" .⁴

    Curiosità: anche molti BBS per PC utilizzavano codici ANSI. ( Ancora fare , in realtà.)

  • DEC VT100 : Il primo terminale in vetro compatibile ANSI molto popolare è stato VT100 di Digital Equipment Corporation. Dimostrando di ANSI de jure fuori standard nel mercato, ha stabilito un de facto standard che è ancora importante oggi.

    A volte si vede questo chiamato il protocollo VT102, che essendo una versione successivamente ridotta, e quindi più popolare, del VT100 più tutte le opzioni di espansione disponibili integrate.

    I protocolli del terminale DEC sono una serie retrocompatibile, che si estende dal primo modello compatibile ANSI introdotto nel 1978 (VT100) fino ai modelli della serie VT500 prodotti da Boundless Technologies dopo aver acquistato il terminal da DEC nel 1995. (Boundless è ormai fuori servizio, ma i loro terminali saltano fuori di tanto in tanto sul mercato dell'usato.)

  • xterm : una sorta di amalgama di ANSI e degli standard VT qualunque. Ogni volta che si utilizza un emulatore di terminale GUI similextermo uno dei suoi derivati, di solito si utilizza anche ilxtermprotocollodelterminale, in genere il più modernoxterm-coloro lexterm-color256varianti.

  • Linux : la console Linux utilizza anche una variante estesa del protocollo terminale ANSI, nello stesso spirito deixtermprotocolli. La maggior parte delle sue estensioni ha a che fare con le differenze tra un PC e un terminale di vetro. Ad esempio, la tastiera IBM ha alcuni tasti non su un DEC VT-qualunque cosa. (E viceversa.)

    Alcuni sistemi Unix hanno anche il proprio protocollo terminale di console. C'è la scoansivariante ANSI X3.64 per gli Unix SCO, per esempio.

Un tipico programma di emulazione di terminale è una specie di ibrido e non emula esattamente un singolo modello di terminale. Potrebbe supportare il 96% di tutte le sequenze di escape DEC VT fino al VT320, ma anche estensioni come il colore ANSI (una funzione VT525) e un numero arbitrario di righe e colonne. Il 4% dei codici che non comprende potrebbe non mancare se i tuoi programmi non necessitano di quelle funzionalità, anche se hai detto curses(o qualsiasi altra cosa) che vuoi che i programmi lo utilizzino per usare il protocollo VT320. Un tale programma potrebbe pubblicizzarsi come compatibile VT320, quindi, anche se in senso stretto, non lo è. ⁵

Terminali non ANSI

Ci sono alcuni altri standard importanti che a volte ti imbatti ancora:

  • Wyse : uno dei primi produttori indipendenti di terminali in vetro, Wyse ha iniziato a fabbricare terminali nei primi anni '80 prima che il calcolo delle workstation iniziasse a sostituire i minicomputer. Sebbene i terminali Wyse fossero in grado di emulare il VT100 e altri protocolli terminali popolari, avevano anche i loro codici nativi.

  • IBM 3270 : sebbene questo non sia strettamente un tipo di terminale "Unix", la necessità di connettere i sistemi Unix ai mainframe IBM ha portato alla creazione di programmi di emulazione di terminale serie IBM 3270, che è ancora possibile trovare in uso. Anche gli emulatori per i successiviterminali della serie IBM 5250 sono abbastanza comuni, il più delle volte utilizzati in questi giorni per la connessione aiminicomputer AS / 400 e System i .

  • Tektronix 4014 : Prima che PC e workstation sostituissero ampiamente i terminali di vetro e rendessero quindi la grafica bitmap una caratteristica standard, c'erano costosi terminali grafici che disegnavano grafica sullo schermo in risposta a comandi di testo simili alle sequenze di escape sopra descritte. Probabilmente il più popolare di questi era la serie Tektronix 4010.

    Erano abbastanza divertenti da usare. Potresti scrivere un programma che disegna un elemento grafico, ma invece di eseguirlo semplicemente per disegnare sul tuo terminale locale, puoi reindirizzare il suo output su un file:

    $ ./my4014program > my-neat-graphic
    

    Potresti quindi inviare quel file a qualcun altro e loro potrebbero catfarlo sul loro terminale Tek per vedere l'immagine senza avere il tuo programma. Parte del fascino era la lentezza di questi terminali nel disegno, in modo da poter vedere la grafica accumularsi per diversi secondi.

Lavorare con l'emulazione terminale Unix oggi

Puoi scoprire quale standard terminale stai chiedendo alle biblioteche come cursesutilizzare guardando la TERMvariabile d'ambiente:

$ echo $TERM
xterm-color

Quando si sshpassa a un altro sistema, la TERMvariabile viene trasportata in modo che la casella Unix remota sappia come comunicare con il proprio terminale locale.

Poiché molti di questi protocolli sono varianti ANSI X3.64 e poiché gli onnipresenti standard di codifica dei caratteri ASCII e UTF-8 si occupano di così tanto altro, una TERMvariabile errata non è in genere catastrofica. Le cose che tendono a rompersi sono tasti estesi come Home e Page Up, combinazioni di tasti Alt-qualunque e caratteristiche di visualizzazione tipografica come colore, grassetto, ecc.


Note:

  1. Più comunemente, ncurses .

    Ci sono anche veri e propri concorrenti cursesdell'API, come S-Lang .

  2. AT&T ha promulgato terminfocome sostituto del termcapdatabase di BSD ed è stato in gran parte riuscito a sostituirlo, ma ci sono ancora programmi là fuori che usano ancora il vecchio termcapdatabase. È una delle molte differenze tra BSD e AT&T che puoi ancora trovare sui sistemi moderni.

    Il mio macOS box non ha /etc/termcap, ma ha /usr/share/terminfo, mentre un'installazione standard di FreeBSD è l'opposto, anche se questi due sistemi operativi sono spesso abbastanza simili a livello di riga di comando.

  3. minicom, xterm, mintty, GNOME Terminal , Terminal.app , etc.

  4. I programmi Unix scritti correttamente non emettono direttamente queste sequenze di escape . Invece, usano una delle librerie sopra menzionate, dicendole di "spostare il cursore in posizione (1,1)" o qualsiasi altra cosa, e la libreria emette i codici di controllo del terminale necessari in base TERMall'impostazione della variabile di ambiente. Ciò consente al programma di funzionare correttamente, indipendentemente dal tipo di terminale su cui lo si esegue.

  5. I vecchi terminali di testo avevano molte strane funzionalità che non erano molto utilizzate dai programmi, quindi molti popolari programmi di emulazione di terminali semplicemente non implementano queste funzionalità. Le omissioni comuni sono il supporto per la grafica sixel e le modalità di testo a doppia larghezza / doppia altezza.

    Il manutentore di ha xtermscritto un programma chiamato vttestper testare emulatori di terminali VT come xterm. Puoi eseguirlo contro altri emulatori di terminale per scoprire quali funzionalità non supportano.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.