web-dev-qa-db-fra.com

Quel type de terminal est-ce que j'utilise?

J'ai testé cela avec Ubuntu 12.04 et Debian 7. Quand je le fais

echo $TERM

Je reçois

xterm

Mais si j'utilise le menu déroulant "aide"> "à propos de", il indique gnome terminal 3.4.1.1.

Est-ce à dire que j'utilise simplement gnome-terminal? Ou tout simplement xterm? Ou est-ce que gnome-terminal est une extension de xterm? Je suis confus.

53
mulllhausen

Quel est $TERM pour?

Le $TERM La variable est utilisée par les applications pour tirer parti des capacités de ce terminal.

Par exemple, si un programme souhaite afficher du texte en couleur, il doit d'abord savoir si le terminal que vous utilisez prend en charge le texte en couleur, puis si c'est le cas, comment faire du texte en couleur.

La façon dont cela fonctionne est que le système conserve une bibliothèque de terminaux connus et de leurs capacités. Sur la plupart des systèmes, c'est dans /usr/share/terminfo (il y a aussi termcap, mais son héritage n'est plus beaucoup utilisé).

Disons donc que vous avez un programme qui veut afficher du texte rouge. Il fait essentiellement un appel à la bibliothèque terminfo qui dit "donnez-moi la séquence d'octets que je dois envoyer pour le texte rouge pour le terminal xterm". Ensuite, il suffit de prendre ces octets et de les imprimer.
Vous pouvez essayer vous-même en faisant tput setf 4; echo hi. Cela obtiendra la capacité setf terminfo et lui passera un paramètre de 4, qui est la couleur que vous souhaitez.


Pourquoi le terminal gnome se trouve sur lui-même:

Supposons maintenant que vous ayez un nouvel émulateur de terminal brillant qui vient d'être publié, et la bibliothèque terminfo du système n'a pas encore de définition pour cela. Lorsque votre application cherche à faire quelque chose, elle échoue car le terminal n'est pas connu.

La façon dont votre terminal contourne ce problème consiste à mentir sur son identité. Donc votre terminal gnome dit "je suis xterm".

Xterm est un terminal très basique qui existe depuis l'aube de X11, et donc la plupart des émulateurs de terminaux prennent en charge ce qu'il prend en charge. Donc, par gnome terminal disant que c'est un xterm, il est plus probable d'avoir une définition dans la bibliothèque terminfo.

L'inconvénient de mentir sur votre type de terminal est que le terminal peut en fait prendre en charge beaucoup plus que xterm (par exemple, de nombreux nouveaux terminaux prennent en charge 256 couleurs, tandis que les anciens terminaux n'en prenaient en charge que 16). Vous avez donc un compromis, obtenez plus de fonctionnalités ou avez plus de compatibilité. La plupart des terminaux opteront pour plus de compatibilité et choisiront donc de s'annoncer comme xterm.

Si vous souhaitez outrepasser cela, de nombreux terminaux proposent un moyen de configurer le comportement. Mais vous pouvez aussi simplement faire export TERM=gnome-terminal.

50
Patrick

La variable d'environnement TERM indique le type de terminal , pas l'application terminal . TERM a un objectif spécifique: il indique aux applications exécutées dans ce terminal comment interagir avec le terminal.

Les applications interagissent avec les terminaux en écrivant des séquences d'échappement - des séquences de caractères qui incluent des caractères non imprimables et ont des effets tels que déplacer le curseur, effacer une partie de l'écran, changer la couleur actuelle, etc. Dans l'ancien temps, différentes marques de terminaux physiques avaient différents ensembles de séquences d'échappement. Par conséquent, le système d'exploitation maintient une base de données des types de terminaux et de leurs caractéristiques. La base de données traditionnelle est termcap ("TERMinal CAPabilities"); de nombreux systèmes et applications modernes sont passés à terminfo . Les deux bases de données sont indexées par le nom du type de terminal et les applications les interrogent à l'aide du nom du type de terminal à partir des variables d'environnement TERM.

De nos jours, la plupart des terminaux utilisent un ensemble standard de séquences d'échappement avec quelques ensembles d'extensions courants, donc vous ne verrez pas beaucoup de valeurs différentes de TERM. La plupart des émulateurs de terminaux GUI sont compatibles avec xterm , le terminal X traditionnel (qui est toujours utilisé et maintenu).

Les émulateurs de terminaux qui diffèrent de xterm peuvent ajouter leur propre entrée à la base de données de terminaux sous leur propre nom. Cependant, cela ne correspond pas bien aux coquilles distantes. Un programme s'exécutant sur la machine A mais qui s'affiche sur la machine B, par exemple parce qu'il a été lancé via ssh de B vers A, doit interroger la base de données du terminal sur la machine A. Les méthodes de connexion à distance telles que ssh reportent le TERM variable d'environnement, mais cela n'est utile que lorsque la base de données de terminaux de B a également une entrée pour l'utilisateur de valeur sur A. Par conséquent, de nombreux émulateurs de terminaux s'en tiennent à TERM=xterm qui est à peu près universellement connu.

La différenciation entre les terminaux ne vient pas de la manière dont les applications interagissent avec eux, mais de la façon dont les terminaux interagissent avec l'utilisateur et s'intègrent dans leur environnement. Par exemple, Gnome Terminal semble bon sur Gnome et fournit des onglets et d'autres subtilités; Konsole a l'air bien sur KDE et fournit des onglets et d'autres subtilités; urxvt a une petite mémoire requise; Console2 fonctionne sur Windows; screen et tmux fournissent des sessions qui peuvent être attachées à différents terminaux parents; etc. Étant donné qu'aucune de ces fonctionnalités ne fait la différence pour les applications exécutées dans le terminal, la plupart des émulateurs de terminal utilisent TERM=xterm.

Pour savoir quel terminal un Shell l'exécute, regardez le parent du Shell:

ps -p$PPID

La variable d'environnement TERM ne signifie pas le terminal que vous utilisez.

Citant gnu.org :

La variable d'environnement TERM contient un identifiant pour les capacités de la fenêtre de texte. Vous pouvez obtenir une liste détaillée de ces fonctionnalités en utilisant la commande> "infocmp", en utilisant "man 5 terminfo" comme référence.

Lors de la production de texte avec des directives de couleur incorporées, msgcat examine la variable TERM. Aujourd'hui, les fenêtres de texte prennent généralement en charge au moins 8 couleurs. Souvent, cependant, la fenêtre de texte prend en charge 16 couleurs ou plus, même si la variable TERM est définie sur un identifiant dénotant seulement 8 couleurs prises en charge. Il peut être utile de définir la variable TERM sur une valeur différente dans les cas suivants:

xterm est dans la plupart des cas construit avec le support de 16 couleurs. Il peut également être construit avec un support pour 88 ou 256 couleurs (mais pas les deux). Vous pouvez essayer de définir TERM sur xterm-16color, xterm-88color ou xterm-256color. rxvt

rxvt est souvent construit avec le support de 16 couleurs. Vous pouvez essayer de définir TERM sur rxvt-16color. konsole

konsole est également souvent construit avec un support pour 16 couleurs. Vous pouvez essayer de définir TERM sur konsole-16color ou xterm-16color.

Après avoir défini TERM, vous pouvez le vérifier en appelant "msgcat --color = test" et en voyant si la sortie ressemble à une carte de couleurs raisonnable. La variable d'environnement TERM contient un identifiant pour les capacités de la fenêtre de texte. Vous pouvez obtenir une liste détaillée de ces fonctionnalités en utilisant la commande "infocmp", en utilisant "man 5 terminfo" comme référence.

12
mavillan