Z jakiego protokołu / standardu korzystają terminale?

25

Zastanawiałem się, jak „GUI” aplikacji wiersza polecenia jest komunikowane przez sieć. W większości przypadków jest to dość proste (zwykły tekst / wprowadzanie tekstu), ale czasami jest bardziej złożone (aptitude).

Czy jest to zdefiniowane przez jakiś standard, aby każdy mógł napisać własny terminal i aby wszystkie implementacje terminala zachowywały się w ten sam sposób (kolory, pozycjonowanie itp.)?

Olivier Lalonde
źródło

Odpowiedzi:

46

Programy konsolowe zwykle używają przekleństw lub jednego z ich następców¹ do tworzenia różnego rodzaju tekstowych interfejsów użytkownika, o których mówisz.

Te biblioteki używają jednej z dwóch baz danych, zwanych termcapi terminfo.². Te bazy danych zawierają mapy, które informują bibliotekę, jakie kody wysłać, aby uzyskać pożądane działania przy dużej liczbie różnych typów terminali. Zdecydowana większość typów terminali, które znajdziesz w tych bazach danych, nie przetrwała dni prawdziwych terminali , a zatem mają teraz jedynie znaczenie historyczne.

Terminale ANSI

Nowoczesne emulatory terminali Unix³ wykorzystują protokół ANSI X3.64 lub jeden z jego późniejszych wariantów:

  • ANSI X3.64 : Standard kontrolowania „szklanych terminali” - w przeciwieństwie do teletypów - opiera się na specjalnych sekwencjach znaków, które interpretuje terminal zdalny. Na przykład, jeśli pole Unix chce powiedzieć terminalowi zgodnemu z ANSI X3.64, aby przesunął kursor do lewego górnego rogu ekranu, wysyła znakiESC [ 1 ; 1 H. Pierwsze dwa znaki mówią terminalowi, że oczekuje sekwencji kontrolnej, 1 to rząd i kolumna, aHpolecenie oznacza „przesuń kursor”.

    Ciekawostki: wiele PC BBS również używało kodów ANSI. ( Właściwie to nadal .)

  • DEC VT100 : Pierwszym naprawdę popularnym terminalem szklanym kompatybilnym z ANSI był VT100 firmy Digital Equipment Corporation. Sprawdzając standard de jure firmy ANSI na rynku, ustanowił on de facto standard, który jest nadal ważny.

    Czasami jest to nazywane protokołem VT102, który jest późniejszą, a przez to bardziej popularną, wersją VT100 plus wszystkie wbudowane opcje rozszerzenia.

    Protokoły końcowe DEC są seriami kompatybilnymi wstecz, począwszy od pierwszego modelu zgodnego z ANSI, wprowadzonego w 1978 roku (VT100), aż po modele serii VT500 wyprodukowane przez Boundless Technologies po zakupie terminalu od DEC w 1995 r. (Boundless jest obecnie nie działa, ale ich terminale wciąż pojawiają się na używanym rynku).

  • xterm : Rodzaj amalgamatu ANSI i VT-niezależnie od standardów. Ilekroć używasz emulatora terminala GUIxtermlub jednego z jego pochodnych, zwykle używasz równieżxtermprotokołu terminala, zazwyczaj bardziej nowoczesnegoxterm-colorlubxterm-color256wariantów.

  • Linux : konsola Linux używa również rozszerzonego wariantu protokołu terminala ANSI, w tym samym duchu coxtermprotokoły. Większość jego rozszerzeń ma związek z różnicami między komputerem a szklanym terminalem. Na przykład klawiatura IBM ma niektóre klawisze, których nie ma w DEC VT. (I wzajemnie.)

    Niektóre systemy uniksowe mają również własny protokół terminala konsoli. Na przykład scoansiistnieje wariant ANSI X3.64 dla Uniksów SCO.

Typowy program emulujący terminal jest czymś w rodzaju kundla i nie emuluje dokładnie żadnego pojedynczego modelu terminala. Może obsługiwać 96% wszystkich sekwencji ucieczki DEC VT w górę przez VT320, ale obsługuje także rozszerzenia takie jak kolor ANSI (funkcja VT525) oraz dowolną liczbę wierszy i kolumn. 4% kodów, których nie rozumie, może nie zostać pominiętych, jeśli twoje programy nie potrzebują tych funkcji, nawet jeśli powiedziałeś curses(lub cokolwiek), że chcesz, aby programy korzystały z protokołu VT320. Taki program może reklamować się jako zgodny z VT320, a nawet, ściśle mówiąc, nie jest

Terminale inne niż ANSI

Istnieje jeszcze kilka innych godnych uwagi standardów, z którymi się czasem zdarza:

  • Wyse : Jeden z pierwszych niezależnych producentów szklanych terminali, Wyse zaczął produkować terminale na początku lat osiemdziesiątych, zanim obliczenia stacji roboczych zaczęły zastępować minikomputery. Chociaż terminale Wyse były w stanie emulować VT100 i inne popularne protokoły terminali, miały także własne kody natywne.

  • IBM 3270 : Chociaż nie jest to typ terminala „uniksowego”, potrzeba połączenia systemów uniksowych z komputerami mainframe IBM doprowadziła do stworzenia programów emulujących terminal serii IBM 3270, które wciąż można znaleźć w użyciu. Emulatory dla późniejszychterminali serii IBM 5250 są również dość powszechne, najczęściej używane obecnie do łączenia zminikomputerami AS / 400 i System i .

  • Tektronix 4014 : Zanim komputery PC i stacje robocze w dużej mierze przesunęły szklane terminale, a tym samym uczyniły grafikę bitmapową standardową funkcją, istniały drogie terminale graficzne, które rysowały grafikę na ekranie w odpowiedzi na polecenia tekstowe podobne do sekwencji ucieczki opisanych powyżej. Prawdopodobnie najpopularniejszą z nich była seria Tektronix 4010.

    Używanie ich było całkiem przyjemne. Możesz napisać program, który narysował grafikę, ale zamiast po prostu uruchomić go w celu rysowania na lokalnym terminalu, możesz przekierować jego wyjście do pliku:

    $ ./my4014program > my-neat-graphic
    

    Następnie możesz wysłać ten plik do kogoś innego, a on może catto zrobić na terminalu Tek, aby zobaczyć grafikę bez posiadania programu. Częścią uroku było to, jak powolnie rysowały się te terminale, abyś mógł obserwować narastanie grafiki przez kilka sekund.

Dzisiejsza praca z emulacją terminala Unix

Możesz dowiedzieć się, jakiego standardu terminala chcesz cursesużywać w bibliotekach, patrząc na TERMzmienną środowiskową:

$ echo $TERM
xterm-color

Kiedy przechodzisz sshdo innego systemu, TERMzmienna jest przenoszona, więc zdalna skrzynka uniksowa wie, jak komunikować się z lokalnym terminalem.

Ponieważ tak wiele z tych protokołów to warianty ANSI X3.64 i ponieważ wszechobecne standardy kodowania znaków ASCII i UTF-8 zajmują się tak wiele innymi, niepoprawna TERMzmienna nie jest zazwyczaj katastrofalna. Rzeczy, które zwykle się psują, to rozszerzone klawisze, takie jak Home i Page Up, kombinacje klawiszy Alt-cokolwiek i funkcje wyświetlania typograficznego, takie jak kolor, pogrubienie itp.


Przypisy:

  1. Najczęściej ncurses .

    cursesInterfejs API ma również bezpośrednich konkurentów , takich jak S-Lang .

  2. AT&T ogłosił terminfojako zamiennik termcapbazy danych BSD i w dużej mierze udało się ją zastąpić, ale wciąż istnieją programy, które nadal używają starej termcapbazy danych. Jest to jedna z wielu różnic między BSD a AT&T, które wciąż można znaleźć w nowoczesnych systemach.

    Moje pudełko macOS nie ma /etc/termcap, ale ma /usr/share/terminfo, podczas gdy standardowa instalacja FreeBSD jest odwrotna, chociaż te dwa systemy operacyjne są często dość podobne na poziomie wiersza poleceń.

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

  4. Prawidłowo napisane programy uniksowe nie emitują bezpośrednio tych sekwencji specjalnych . Zamiast tego używają jednej z wyżej wymienionych bibliotek, mówiąc jej, aby „przesunęła kursor do pozycji (1,1)” lub cokolwiek, a biblioteka emituje niezbędne kody sterujące terminala w oparciu o TERMustawienia zmiennej środowiskowej. Dzięki temu program działa poprawnie bez względu na typ terminala, na którym go uruchomisz.

  5. Stare terminale tekstowe miały wiele dziwnych funkcji, które nie były zbyt często używane przez programy, więc wiele popularnych programów emulujących terminale po prostu nie implementuje tych funkcji. Typowymi pominięciami są obsługa trybów tekstowych Sixel i podwójnej szerokości / podwójnej wysokości.

    Opiekun xtermnapisał program vttestdo testowania emulatorów terminali VT, takich jak xterm. Możesz uruchomić go z innymi emulatorami terminali, aby dowiedzieć się, które funkcje nie obsługują.

Warren Young
źródło