GNU/Linux >> Linux Esercitazione >  >> Linux

Quale protocollo/standard viene utilizzato dai terminali?

Mi chiedevo come viene comunicata la "GUI" di un'applicazione a riga di comando 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.)?

Risposta accettata:

I programmi per console in genere utilizzano curses o uno dei suoi successori¹ per creare il tipo di interfaccia utente testuale di cui stai parlando.

Queste librerie utilizzano uno dei due database, chiamato termcap e terminfo .² Questi database contengono mappe che indicano alla biblioteca 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 giorni dei terminali reali, quindi ora sono solo di interesse storico.

Terminali ANSI

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

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

    Curiosità:anche molti PC BBS utilizzavano codici ANSI. (Lo faccio ancora, in realtà.)

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

    A volte lo vedi chiamato protocollo VT102, che è una versione successiva a costi ridotti, e quindi più popolare, del VT100 più tutte le opzioni di espansione disponibili integrate.

    I protocolli dei terminali DEC sono una serie retrocompatibile, che va dal primo modello compatibile con ANSI introdotto nel 1978 (il VT100) fino ai modelli della serie VT500 prodotti da Boundless Technologies dopo aver acquistato l'attività del terminale da DEC nel 1995. (Boundless è ora non è più disponibile, ma i loro terminali compaiono ancora sul mercato dell'usato di tanto in tanto.)

  • xtermine :Una sorta di amalgama di ANSI e gli standard VT-qualunque. Ogni volta che utilizzi un emulatore di terminale GUI come xterm o uno dei suoi derivati, di solito stai usando anche il xterm protocollo terminale, tipicamente il più moderno xterm-color o xterm-color256 varianti.

  • Linux :La console Linux utilizza anche una variante estesa del protocollo terminale ANSI, nello stesso spirito di xterm protocolli. La maggior parte delle sue estensioni hanno a che fare con le differenze tra un PC e un terminale in 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 della console. C'è lo scoansi Variante ANSI X3.64 per SCO Unix, ad esempio.

Un tipico programma di emulazione di terminale è una specie di bastardo e non emula esattamente nessun singolo modello di terminale. Potrebbe supportare il 96% di tutte le sequenze di escape DEC VT fino al VT320, ma supportare anche estensioni come il colore ANSI (una funzionalità VT525) e un numero arbitrario di righe e colonne. Il 4% di codici che non comprende potrebbe non essere perso se i tuoi programmi non hanno bisogno di queste funzionalità, anche se hai detto a curses (o qualsiasi altra cosa) che si desidera che i programmi che lo utilizzino utilizzino il protocollo VT320. Un programma del genere potrebbe pubblicizzarsi come compatibile con VT320, quindi, anche se, a rigor di termini, non lo è.⁵

Correlati:aggiornamento di TNS Entry su più terminali?

Terminali non ANSI

Ci sono alcuni altri standard degni di nota che a volte ti imbatti ancora:

  • Wyse :Wyse, uno dei primi produttori indipendenti di terminali in vetro, iniziò a produrre terminali all'inizio degli anni '80 prima che le workstation computing iniziassero a sostituire i minicomputer. Sebbene i terminali Wyse fossero in grado di emulare il VT100 e altri protocolli terminali popolari, avevano anche i propri 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 IBM serie 3270, che puoi ancora trovare in uso. Anche gli emulatori per i terminali successivi della serie IBM 5250 sono abbastanza comuni, utilizzati più spesso in questi giorni per la connessione a minicomputer AS/400 e System i.

  • Tektronix 4014 :prima che i PC e le workstation sostituissero in gran parte i terminali in vetro e quindi rendessero la grafica bitmap una caratteristica standard, esistevano costosi terminali grafici che disegnavano grafica sullo schermo in risposta a comandi di testo simili alle sequenze di escape descritte sopra. Probabilmente la più popolare di queste è stata la serie Tektronix 4010.

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

    $ ./my4014program > my-neat-graphic
    

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

Lavorare con l'emulazione di terminale Unix oggi

Puoi scoprire quale standard di terminale stai chiedendo a librerie come curses da utilizzare guardando il TERM variabile d'ambiente:

$ echo $TERM
xterm-color

Quando ssh a un altro sistema, il TERM la variabile viene portata avanti in modo che la scatola Unix remota sappia come comunicare con il tuo 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 molto altro, un TERM errato la variabile non è tipicamente catastrofica. Le cose che tendono a rompersi sono i tasti estesi come Home e Pagina su, Alt-qualunque combinazione di tasti e funzioni di visualizzazione tipografica come colore, grassetto, ecc.

Note a piè di pagina:

  1. Più comunemente, ncurses.

    Ci sono anche veri concorrenti delle curses API, come S-Lang.

  2. AT&T ha promulgato terminfo in sostituzione di termcap di BSD database, ed è riuscito in gran parte a sostituirlo, ma ci sono ancora programmi là fuori che usano ancora il vecchio termcap Banca dati. È una delle tante differenze tra BSD e AT&T che puoi ancora trovare sui sistemi moderni.

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

  3. minicom , xterm , mintty , Terminale GNOME, Terminal.app, ecc.

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

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

    Il manutentore di xterm ha scritto un programma chiamato vttest per testare emulatori di terminale VT come xterm . Puoi eseguirlo su altri emulatori di terminale per scoprire quali funzionalità non supportano.

Relazionato:globo ricorsivo?
Linux
  1. Qual è il tuo trucco da terminale Linux preferito?

  2. Qual è il tuo emulatore di terminale Linux preferito?

  3. Qual è il tuo trucco da terminale Linux preferito?

  4. Che tipo di terminale supportare se si implementa un emulatore di terminale??

  5. Perché abbiamo 3 tipi di selezioni X in LINUX?

3 terminali Linux che devi provare

Qual è il tuo emulatore di terminale preferito?

Cos'è SSH?

Che terminale è questo?

SystemD - A cosa serve SystemD?

Cosa significa mdev in ping(8)?