GNU/Linux >> Znalost Linux >  >> Linux

Jaký protokol/standard používají terminály?

Zajímalo by mě, jak se „GUI“ aplikace příkazového řádku komunikuje přes síť. Většinou je to docela jednoduché (prostý text / vstup), ale někdy je to složitější (aptitude).

Je to definováno nějakým standardem, aby si každý mohl napsat svůj vlastní terminál a aby se všechny implementace terminálu chovaly stejným způsobem (barvy, umístění atd.)?

Přijatá odpověď:

Programy konzoly obvykle používají kletby nebo některé z jejich následovníků¹ k vytváření typů textových uživatelských rozhraní, o kterých mluvíte.

Tyto knihovny používají jednu ze dvou databází nazvaných termcap a terminfo .² Tyto databáze obsahují mapy, které knihovně říkají, jaké kódy má odeslat, aby získala požadované akce s velkým počtem různých typů terminálů. Naprostá většina typů terminálů, které najdete definované v těchto databázích, nepřežila dobu skutečných terminálů, a proto jsou nyní zajímavé pouze z historického hlediska.

Terminály ANSI

Moderní terminálové emulátory Unix³ používají protokol ANSI X3.64 nebo jednu z jeho pozdějších variant:

  • ANSI X3.64 :Standard pro ovládání „skleněných terminálů“ — na rozdíl od dálnopisů — je založen na speciálních sekvencích znaků, které vzdálený terminál interpretuje. Například, pokud chce Unixový box sdělit terminálu kompatibilnímu s ANSI X3.64, aby přesunul kurzor do levého horního rohu obrazovky, odešle znaky ESC [ 1 ; 1 H . První dva znaky říkají terminálu, aby očekával kontrolní sekvenci, jedničky jsou řádek a sloupec a H je příkaz, který znamená „přesunout kurzor“.⁴

    Drobnosti:mnoho PC BBS také používalo kódy ANSI. (Vlastně stále.)

  • DEC VT100 :První skutečně populární skleněný terminál kompatibilní s ANSI byl VT100 společnosti Digital Equipment Corporation. Prokázáním de jure ANSI standardem na trhu, vytvořila de facto standard, který je důležitý i dnes.

    Někdy se tomu říká protokol VT102, což je pozdější levnější – a proto populárnější – verze VT100 se všemi dostupnými vestavěnými možnostmi rozšíření.

    Terminálové protokoly DEC jsou řadou zpětně kompatibilních, rozšiřujících se od prvního modelu kompatibilního s ANSI představeného v roce 1978 (VT100) až po modely řady VT500 vyráběné společností Boundless Technologies poté, co v roce 1995 koupili terminálový obchod od společnosti DEC. (Boundless je nyní mimo provoz, ale jejich terminály se stále čas od času objevují na trhu s použitými produkty.)

  • xterm :Jakýsi amalgám ANSI a VT - bez ohledu na normy. Kdykoli používáte emulátor terminálu GUI, jako je xterm nebo některou z jeho odvozenin, obvykle také používáte xterm terminálový protokol, typicky modernější xterm-color nebo xterm-color256 varianty.

  • Linux :Konzole Linux také používá rozšířenou variantu terminálového protokolu ANSI ve stejném duchu jako xterm protokoly. Většina jeho rozšíření souvisí s rozdíly mezi PC a skleněným terminálem. Například klávesnice IBM má některé klávesy, které nejsou na DEC VT-cokoliv. (A naopak.)

    Některé unixové systémy mají také svůj vlastní konzolový terminálový protokol. Je tam scoansi Například varianta ANSI X3.64 pro SCO Unixy.

Typický program emulátoru terminálu je něco jako kříženec a neemuluje přesně žádný model terminálu. Může podporovat 96 % všech escape sekvencí DEC VT až po VT320, ale také podporovat rozšíření, jako je barva ANSI (funkce VT525) a libovolný počet řádků a sloupců. 4 % kódů, kterým nerozumí, nemusí chybět, pokud vaše programy tyto funkce nepotřebují, i když jste řekli curses (nebo cokoli jiného), že chcete, aby programy, které jej používají, používaly protokol VT320. Takový program se může propagovat jako kompatibilní s VT320, ale, i když, přísně vzato, není.⁵

Související:Aktualizace TNS Entry přes více terminálů?

Terminály mimo ANSI

Existuje několik dalších pozoruhodných standardů, se kterými se stále můžete setkat:

  • Wyse :Jeden z prvních nezávislých výrobců skleněných terminálů, Wyse začal vyrábět terminály na počátku 80. let, než výpočetní technika pro pracovní stanice začala vytlačovat minipočítače. Přestože terminály Wyse dokázaly emulovat VT100 a další oblíbené terminálové protokoly, měly také své vlastní nativní kódy.

  • IBM 3270 :Ačkoli se nejedná o striktně „unixový“ typ terminálu, potřeba připojit unixové systémy k sálovým počítačům IBM vedla k vytvoření programů emulátoru terminálu řady 3270, které můžete stále používat. Emulátory pro pozdější terminály řady IBM 5250 jsou také poměrně běžné, v dnešní době se nejčastěji používají pro připojení k AS/400 a minipočítačům System i.

  • Tektronix 4014 :Před tím, než PC a pracovní stanice z velké části nahradily skleněné terminály, a tak učinily bitmapovou grafiku standardní funkcí, existovaly drahé grafické terminály, které kreslily grafiku na obrazovku v reakci na textové příkazy podobné výše popsaným únikovým sekvencím. Pravděpodobně nejoblíbenější z nich byla řada Tektronix 4010.

    Bylo docela zábavné je používat. Mohli byste napsat program, který by nakreslil grafiku, ale místo toho, abyste jej jednoduše spustili pro kreslení na místním terminálu, můžete jeho výstup přesměrovat do souboru:

    $ ./my4014program > my-neat-graphic
    

    Tento soubor byste pak mohli poslat někomu jinému a ten by mohl cat na jejich Tek terminálu, abyste viděli grafiku, aniž byste měli svůj program. Část kouzla spočívala v tom, jak pomalé byly tyto terminály při kreslení, takže jste mohli sledovat, jak se grafika vytváří během několika sekund.

Práce s emulací terminálu Unix dnes

Můžete zjistit, jaký terminálový standard požadujete od knihoven, jako je curses k použití, když se podíváte na TERM proměnná prostředí:

$ echo $TERM
xterm-color

Když ssh do jiného systému, TERM proměnná je přenášena s sebou, takže vzdálený unixový box ví, jak komunikovat s vaším místním terminálem.

Protože tolik z těchto protokolů jsou varianty ANSI X3.64 a protože všudypřítomné standardy kódování znaků ASCII a UTF-8 se starají o mnohem víc, nesprávný TERM proměnná není typicky katastrofická. Věci, které mají tendenci se lámat, jsou rozšířené klávesy, jako je Home a Page Up, kombinace kláves Alt-cokoliv a typografické prvky zobrazení, jako je barva, tučné písmo atd.

Poznámky pod čarou:

  1. Nejčastěji jde o ncurses.

    Existují také přímí konkurenti curses API, jako je S-Lang.

  2. Společnost AT&T zveřejnila terminfo jako náhrada za termcap BSD databáze a byla z velké části úspěšná při jejím nahrazení, ale stále existují programy, které stále používají starý termcap databáze. Je to jeden z mnoha rozdílů mezi BSD a AT&T, které stále můžete najít na moderních systémech.

    Můj macOS box nemá /etc/termcap , ale má /usr/share/terminfo , zatímco standardní instalace FreeBSD je opačný postup, i když jsou tyto dva operační systémy na úrovni příkazového řádku často velmi podobné.

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

  4. Řádně napsané unixové programy nevysílají tyto escape sekvence přímo. Místo toho použijí jednu z výše zmíněných knihoven a řeknou jí, aby „přesunul kurzor na pozici (1,1)“ nebo cokoli jiného, ​​a knihovnu vyšle potřebné řídicí kódy terminálu na základě vašeho TERM nastavení proměnné prostředí. To umožňuje programu správně pracovat bez ohledu na typ terminálu, na kterém jej spouštíte.

  5. Staré textové terminály měly spoustu podivných funkcí, které programy příliš nevyužívaly, takže mnoho oblíbených programů emulátoru terminálu tyto funkce jednoduše neimplementuje. Mezi běžné nedostatky patří podpora šestihranné grafiky a textových režimů s dvojnásobnou šířkou/dvojnásobnou výškou.

    Správce xterm napsal program nazvaný vttest pro testování emulátorů terminálu VT, jako je xterm . Můžete jej spustit proti jiným emulátorům terminálu a zjistit, které funkce nepodporují.

Související:Rekurzivní glob?
Linux
  1. 15 Vysvětlení běžně používaných síťových portů

  2. Jak otestovat, jaký Shell používám v terminálu?

  3. Jaký typ terminálu podporovat při implementaci emulátoru terminálu?

  1. Které terminálové emulátory podporují režim ovládání Tmux?

  2. Co je File Transfer Protocol (FTP)

  3. Co jsou vyhrazené uživatelské účty v MySQL

  1. Proč máme v LINUXu 3 typy X-výběrů?

  2. Jaké porty aplikace používá

  3. Co jsou pseudo terminály (pty/tty)?