Lorsque j'ouvre une fenêtre de terminal avec l'émulateur de terminal GNOME dans l'interface graphique du bureau, la variable d'environnement shell TERM prend la valeur par défaut xterm
.
Si j'utilise CTL+ ALT+ F1pour basculer vers une fenêtre TTY de la console et que echo $TERM
la valeur est définie sur linux
.
Ma motivation pour demander est qu'à l'intérieur de mon ~/.bashrc
fichier une variable est utilisée pour déterminer si une coque de couleur est fournie ou juste un bon monochrome à l'ancienne.
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color) color_prompt=yes;;
esac
Dans le shell de la console et le shell de l'émulateur Gnome Terminal si je tape
export TERM=xterm-color
source /.bashrc
les deux coques passent en mode couleur (quelque chose que j'aimerais qu'il se passe toujours dans les deux).
Où les TERM
valeurs par défaut sont-elles définies s'il vous plaît et où est le meilleur endroit pour modifier leurs valeurs par défaut, si possible? Il ne semble y avoir rien dans l'interface graphique de l'émulateur de terminal pour sélectionner ou définir la valeur TERM par défaut.
J'ai envisagé d'ajouter simplement la ligne export TERM=xterm-color
en haut de mon ~/.bashrc
fichier, mais mon instinct indique que ce n'est pas la meilleure solution et mes recherches sur Google ne m'ont pas encore conduit à une bonne réponse.
J'utilise Ubuntu 15.04 Desktop Edition (basé sur Debian).
Réponses:
Dans beaucoup d'endroits, selon
Sur les terminaux virtuels et les terminaux réels, la
TERM
variable d'environnement est définie par le programme qui s'enchaînelogin
et est héritée tout au long du shell interactif qui s'exécute une fois que l'on s'est connecté. Lorsque cela se produit précisément, cela varie d'un système à l'autre et selon le type de terminal.Les terminaux réels et série peuvent varier en type, selon ce qui se trouve à l'autre extrémité du fil. Donc, classiquement, le
getty
programme est invoqué avec un argument qui spécifie le type de terminal, ou reçoit leTERM
programme à partir des données de configuration de service d'un gestionnaire de services.init
systèmes van Smoorenburg , on peut le voir dans les/etc/inittab
entrées, qui liront quelque chose dans le sens de Le dernier argument deagetty
cette lignevt100-nav
, est le type de terminal défini pour/dev/ttyS0
. Il/etc/inittab
s'agit donc de savoir où changer le type de terminal pour les terminaux réels sur de tels systèmes./usr/lib/systemd/system/[email protected]
fichier d'unité (/lib/systemd/system/[email protected]
sur les systèmes non fusionnés), qui lit définition de laTERM
variable dans l'environnement passée àagetty
. Ce fichier d'unité de service est l'endroit où changer le type de terminal pour les terminaux réels sur de tels systèmes. Notez qu'il s'applique à tous les terminaux réels qui utilisent ce modèle d'unité de service. (Pour le modifier uniquement pour les terminaux individuels, il faut instancier manuellement le modèle.)init
prend le type de terminal dans le troisième champ de l'entrée de chaque terminal dans la/etc/ttys
base de données et définitTERM
celui de l'environnement avec lequel il s'exécutegetty
. C'est donc/etc/ttys
là que l'on change le type de terminal pour les terminaux réels sur les BSD.Les terminaux virtuels du noyau, comme vous l'avez noté, ont un type fixe. Contrairement à NetBSD, qui peut faire varier le type de terminal virtuel du noyau à la volée, Linux et les autres BSD ont un seul type de terminal fixe implémenté dans le programme d'émulation de terminal intégré du noyau. Sous Linux, ce type correspond
linux
à la base de données terminfo. (L'émulation de terminal noyau de FreeBSD est unxterm
sous-ensemble limité depuis la version 9.)mingetty
ouvc-get-tty
(à partir du package nosh) le programme "sait" qu'il ne peut parler qu'à un terminal virtuel, et ils câblent les types de terminaux virtuels "connus" appropriés au système d'exploitation pour lequel le programme a été compilé./usr/lib/systemd/system/[email protected]
fichier d'unité (/lib/systemd/system/[email protected]
sur les systèmes non fusionnés), qui lit définition de laTERM
variable dans l'environnement passée àagetty
.Pour les terminaux virtuels du noyau, on ne change pas le type de terminal. Le programme d'émulation de terminal dans le noyau ne change pas, après tout. Il est incorrect de modifier le type. En particulier, cela vissera la reconnaissance de séquence CSI du curseur / touche d'édition. Les
linux
séquences CSI envoyées par l'émulateur de terminal du noyau Linux sont différentes des séquences CSIxterm
ouvt100
envoyées par les programmes d'émulation de terminal GUI en mode DEC VT.Votre émulateur de terminal GUI est l'un des nombreux programmes, du démon SSH à
screen
, qui utilise des pseudo-terminaux. Le type de terminal dépend du programme d'émulation de terminal qui s'exécute du côté maître du pseudo-terminal et de sa configuration. La plupart des émulateurs de terminaux GUI démarrent le programme côté esclave avec uneTERM
variable dont la valeur correspond à leur émulation de terminal côté maître. Des programmes tels que le serveur SSH tenteront de "passer" le type de terminal qui se trouve à l'extrémité client de la connexion. Habituellement, il existe un menu ou une option de configuration à choisir parmi les émulations de terminal.La main saisissante
La bonne façon de détecter la capacité de couleur n'est pas de câbler une liste de types de terminaux dans votre script. Il existe énormément de types de terminaux qui prennent en charge la couleur.
La bonne façon est de regarder ce que termcap / terminfo dit sur votre type de terminal.
Lectures complémentaires
TERM
. Guide de nosh . Logiciels.la source
[ -x /usr/bin/tput ] && /usr/bin/tput setaf 1 >&/dev/null && color_prompt=yes
. (ncurses 5.9)tput Co
Renvoie également une "capacité terminfo inconnue" dans Jessie et Xenial.tput colors
et lestput setaf 1
deux semblent fonctionner bien que j'avoue que je ne comprends pas pourquoi .Veuillez consulter /ubuntu//a/614714/398785 pour ma réponse détaillée sur les raisons pour lesquelles je pense que
TERM=xterm-color
c'est la mauvaise approche et celle d'Ubuntu.bashrc
est obsolète. Je vous recommande d'aller avecTERM=xterm-256color
(qui est la valeur par défaut depuis gnome-terminal 3.16, mais également sûr à utiliser avec les anciens gnome-terminaux), et d'ajuster votre en.bashrc
conséquence.la source
.bashrc
est obsolète). ".Bashrc d'Ubuntu est obsolète."xterm-256color
causeshtop
de gâcher sa mise en page comme celui - ci dans Ubuntu 18.04.