GNU/Linux >> Tutoriels Linux >  >> Linux

Quel protocole/norme est utilisé par les terminaux ?

Je me demandais comment le "GUI" d'une application en ligne de commande est communiqué sur un réseau. La plupart du temps, c'est assez simple (texte brut/saisie) mais parfois c'est plus complexe (aptitude).

Est-il défini par une sorte de norme afin que n'importe qui puisse écrire son propre terminal et que toutes les implémentations de terminaux se comportent de la même manière (couleurs, positionnement, etc.) ?

Réponse acceptée :

Les programmes de console utilisent généralement curses ou l'un de ses successeurs¹ pour créer les types d'interfaces utilisateur textuelles dont vous parlez.

Ces bibliothèques utilisent l'une des deux bases de données, appelées termcap et terminfo .² Ces bases de données contiennent des cartes qui indiquent à la bibliothèque quels codes envoyer pour obtenir les actions souhaitées avec un grand nombre de types de terminaux divers. La grande majorité des types de terminaux que vous trouverez définis dans ces bases de données n'ont pas survécu à l'époque des terminaux réels, et n'ont donc plus qu'un intérêt historique.

Terminaux ANSI

Les émulateurs de terminaux Unix modernes³ utilisent le protocole ANSI X3.64 ou l'une de ses variantes ultérieures :

  • ANSI X3.64 :Norme de contrôle des « terminaux vitrés » — par opposition aux télétypes — elle est basée sur des séquences spéciales de caractères que le terminal distant interprète. Par exemple, si la machine Unix veut dire à un terminal compatible ANSI X3.64 de déplacer son curseur dans le coin supérieur gauche de l'écran, elle envoie les caractères ESC [ 1 ; 1 H . Les deux premiers caractères indiquent au terminal d'attendre une séquence de contrôle, les 1 sont la ligne et la colonne, et H est la commande signifiant "déplacer le curseur".⁴

    Anecdote :de nombreux PC BBS utilisaient également des codes ANSI. (C'est encore le cas, en fait.)

  • DEC VT100 :Le premier terminal en verre compatible ANSI vraiment populaire était le VT100 de Digital Equipment Corporation. En prouvant le de jure de l'ANSI standard sur le marché, il a établi un de facto norme qui est encore importante aujourd'hui.

    Parfois, vous voyez cela appelé le protocole VT102, qui est une version ultérieure à coût réduit - et donc plus populaire - du VT100 plus toutes les options d'extension disponibles intégrées.

    Les protocoles de terminaux DEC sont une série rétrocompatible, s'étendant du premier modèle compatible ANSI introduit en 1978 (le VT100) jusqu'aux modèles de la série VT500 produits par Boundless Technologies après avoir acheté l'activité de terminaux de DEC en 1995. (Boundless est maintenant en faillite, mais leurs terminaux apparaissent encore de temps en temps sur le marché de l'occasion.)

  • xterm :Une sorte d'amalgame de l'ANSI et des normes VT. Chaque fois que vous utilisez un émulateur de terminal graphique comme xterm ou l'un de ses dérivés, vous utilisez généralement aussi le xterm protocole terminal, généralement le plus moderne xterm-color ou xterm-color256 variantes.

  • Linux :La console Linux utilise également une variante étendue du protocole de terminal ANSI, dans le même esprit que le xterm protocoles. La plupart de ses extensions ont à voir avec les différences entre un PC et un terminal en verre. Par exemple, le clavier IBM a des touches qui ne sont pas sur un DEC VT, peu importe. (Et vice versa.)

    Certains systèmes Unix ont également leur propre protocole de terminal de console. Il y a le scoansi Variante ANSI X3.64 pour SCO Unix, par exemple.

Un programme d'émulation de terminal typique ressemble à un bâtard et n'émule pas exactement un seul modèle de terminal. Il peut prendre en charge 96% de toutes les séquences d'échappement DEC VT jusqu'au VT320, mais également prendre en charge des extensions telles que la couleur ANSI (une fonctionnalité VT525) et un nombre arbitraire de lignes et de colonnes. Les 4 % de codes qu'il ne comprend pas ne peuvent pas être manqués si vos programmes n'ont pas besoin de ces fonctionnalités, même si vous avez dit curses (ou autre) que vous voulez que les programmes qui l'utilisent utilisent le protocole VT320. Un tel programme pourrait se présenter comme compatible VT320, même si, à proprement parler, il ne l'est pas.⁵

En relation :Mise à jour de TNS Entry sur plusieurs terminaux ?

Terminaux non ANSI

Il existe quelques autres normes notables que vous rencontrez encore parfois :

  • Wyse :L'un des premiers producteurs indépendants de terminaux en verre, Wyse a commencé à fabriquer des terminaux au début des années 1980 avant que l'informatique de poste de travail ne commence à remplacer les mini-ordinateurs. Bien que les terminaux Wyse aient pu émuler le VT100 et d'autres protocoles de terminaux populaires, ils avaient également leurs propres codes natifs.

  • IBM 3270 :Bien qu'il ne s'agisse pas strictement d'un type de terminal "Unix", la nécessité de connecter les systèmes Unix aux mainframes IBM a conduit à la création de programmes d'émulation de terminal de la série IBM 3270, que vous pouvez toujours trouver en cours d'utilisation. Les émulateurs pour les derniers terminaux de la série IBM 5250 sont également assez courants, le plus souvent utilisés de nos jours pour se connecter aux mini-ordinateurs AS/400 et System i.

  • Tektronix 4014 :Avant que les PC et les stations de travail ne remplacent largement les terminaux en verre et ne fassent ainsi des graphiques bitmap une fonctionnalité standard, il existait des terminaux graphiques coûteux qui dessinaient des graphiques sur l'écran en réponse à des commandes textuelles similaires aux séquences d'échappement décrites ci-dessus. La plus populaire d'entre elles était probablement la série Tektronix 4010.

    Ils étaient assez amusants à utiliser. Vous pouvez écrire un programme qui dessine un graphique, mais au lieu de simplement l'exécuter pour dessiner sur votre terminal local, vous pouvez rediriger sa sortie vers un fichier :

    $ ./my4014program > my-neat-graphic
    

    Vous pourriez ensuite envoyer ce fichier à quelqu'un d'autre, et il pourrait cat sur leur terminal Tek pour voir le graphique sans avoir votre programme. Une partie du charme était la lenteur de ces terminaux à dessiner, de sorte que vous pouviez voir le graphique s'accumuler sur plusieurs secondes.

Travailler avec l'émulation de terminal Unix aujourd'hui

Vous pouvez savoir quelle norme de terminal vous demandez aux bibliothèques comme curses à utiliser en regardant le TERM variable d'environnement :

$ echo $TERM
xterm-color

Lorsque vous ssh à un autre système, le TERM est transportée afin que la machine Unix distante sache comment communiquer avec votre terminal local.

Étant donné qu'un grand nombre de ces protocoles sont des variantes ANSI X3.64 et que les normes de codage de caractères omniprésentes ASCII et UTF-8 s'occupent de tant d'autres choses, un TERM incorrect variable n'est généralement pas catastrophique. Les choses qui ont tendance à casser sont les touches étendues comme Accueil et Page précédente, les combinaisons de touches Alt-toutes les touches et les fonctionnalités d'affichage typographique comme la couleur, le gras, etc.

Notes de bas de page :

  1. Le plus souvent, ncurses.

    Il existe également des concurrents absolus des curses API, comme S-Lang.

  2. AT&T a promulgué terminfo en remplacement du termcap de BSD base de données, et il a largement réussi à le remplacer, mais il existe encore des programmes qui utilisent encore l'ancien termcap base de données. C'est l'une des nombreuses différences entre BSD et AT&T que vous pouvez encore trouver sur les systèmes modernes.

    Ma boîte macOS n'a pas /etc/termcap , mais il a /usr/share/terminfo , alors qu'une installation standard de FreeBSD est l'inverse, même si ces deux systèmes d'exploitation sont souvent assez similaires au niveau de la ligne de commande.

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

  4. Les programmes Unix correctement écrits n'émettent pas directement ces séquences d'échappement. Au lieu de cela, ils utilisent l'une des bibliothèques mentionnées ci-dessus, en lui disant de "déplacer le curseur vers la position (1,1)" ou autre, et la bibliothèque émet les codes de contrôle de terminal nécessaires en fonction de votre TERM paramètre de variable d'environnement. Cela permet au programme de fonctionner correctement, quel que soit le type de terminal sur lequel vous l'exécutez.

  5. Les anciens terminaux texte avaient beaucoup de fonctionnalités étranges qui n'étaient pas beaucoup utilisées par les programmes, de sorte que de nombreux programmes d'émulation de terminal populaires n'implémentent tout simplement pas ces fonctionnalités. Les omissions courantes sont la prise en charge des graphiques sixel et des modes de texte double largeur/double hauteur.

    Le mainteneur de xterm a écrit un programme appelé vttest pour tester les émulateurs de terminaux VT tels que xterm . Vous pouvez l'exécuter sur d'autres émulateurs de terminaux pour découvrir les fonctionnalités qu'ils ne prennent pas en charge.

Connexes :glob récursif ?
Linux
  1. 15 ports réseau couramment utilisés expliqués

  2. Comment tester quel shell j'utilise dans un terminal ?

  3. Quels émulateurs de terminaux prennent en charge le mode de contrôle Tmux ?

  4. Que signifie Etc ?

  5. Que sont les pseudo-terminaux (pty/tty) ?

3 terminaux Linux que vous devez essayer

Qu'est-ce que SSH ?

De quel terminal s'agit-il ?

SystemD - A quoi sert SystemD ?

Pourquoi avons-nous 3 types de sélections X dans LINUX ?

Quels ports sont utilisés par une application