Lorsque j'ouvre une window de terminal avec l'émulateur de terminal GNOME dans l'interface graphique du bureau, la valeur de la variable d'environnement shell TERM est la valeur xterm
.
Si j'utilise CTL + ALT + F1 pour basculer vers une window TTY de la console et que echo $TERM
la valeur est définie sur linux
.
Ma motivation pour requestr est que dans mon file ~/.bashrc
une variable est utilisée pour déterminer si un shell couleur est fourni ou juste un bon vieux monochrome.
# 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 coquilles changent en mode couleur (quelque chose que j'aimerais avoir toujours dans les deux).
Où se situent les valeurs TERM
par défaut, et où est le meilleur endroit pour modifier leurs valeurs par défaut, si possible? Il n'y a rien dans l'interface graphique de l'émulateur de terminal pour sélectionner ou définir la valeur TERM par défaut.
Je n'ai pas pensé à append la ligne d' export TERM=xterm-color
en haut de mon file ~/.bashrc
mais mon instinct me dit que ce n'est pas la meilleure solution et que mes searchs sur Google ne m'ont pas encore conduit à une bonne réponse.
Je cours Ubuntu 15.04 Desktop Edition (Debian Based).
Sur les terminaux virtuels et les terminaux réels, la variable d'environnement TERM
est définie par le programme qui enstring pour se login
et est héritée tout au long du shell interactif qui s'exécute une fois connecté. Où, précisément, cela arrive varie d'un système à l'autre, et selon le type de terminal.
Les terminaux réels, en série, peuvent varier en fonction de ce qui se trouve à l'autre bout du fil. Donc classiquement, le programme getty
est invoqué avec un argument qui spécifie le type de terminal, ou est passé le programme TERM
partir des données de configuration du service d'un gestionnaire de services.
init
système 5, on peut voir ceci dans les inputs /etc/inittab
, qui liront quelque chose comme
S0: 3: respawn: / sbin / agetty ttyS0 9600 vt100-nav
Le dernier argument de agetty
dans cette ligne, vt100-nav
, est le type de terminal défini pour /dev/ttyS0
. Donc /etc/inittab
est l'endroit où changer le type de terminal pour de vrais terminaux sur de tels systèmes.
/usr/lib/systemd/system/[email protected]
unité ( /lib/systemd/system/[email protected]
sur les systèmes non-fusionnés), qui lit
Environnement = TERM = vt100
définir la variable TERM
dans l'environnement passé à agetty
. Ce file 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 model d'unité de service. (Pour le modifier uniquement pour les terminaux individuels, il faut instancier manuellement le model.)
init
prend le type de terminal du troisième champ de l'input de chaque terminal dans la database /etc/ttys
et définit TERM
dans l'environnement avec lequel il exécute getty
. Donc /etc/ttys
est l'endroit où l'on modifie le type de terminal pour les vrais terminaux sur les BSD. Les terminaux virtuels du kernel, comme vous l'avez noté, ont un type fixe. Contrairement à NetBSD, qui peut faire varier le type de terminal virtuel du kernel à la volée, Linux et les autres BSD ont un seul type de terminal fixe implémenté dans le programme d'émulation de terminal embedded du kernel. Sous Linux, ce type correspond à linux
depuis la database terminfo. (L'émulation de terminal du kernel de FreeBSD est un sous-set xterm
limité depuis la version 9.)
mingetty
ou vc-get-tty
(à partir du packageage 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 operating system que le programme a été compilé pour. /usr/lib/systemd/system/[email protected]
unité ( /lib/systemd/system/[email protected]
sur les systèmes non-fusionnés), qui lit
Environnement = TERM = Linux
définir la variable TERM
dans l'environnement passé à agetty
.
Pour les terminaux virtuels du kernel, on ne change pas le type de terminal. Le programme d'émulation de terminal dans le kernel ne change pas, après tout. Il est incorrect de changer le type. En particulier, cela va bousiller le slider / modification de la reconnaissance de séquence CSI. Les séquences CSI linux
envoyées par l'émulateur de terminal kernel Linux sont différentes des séquences CSI xterm
ou vt100
envoyées par les programmes d' vt100
de terminal GUI en mode DEC VT.
Votre émulateur de terminal GUI est l'un des nombreux programmes, du SSH dæmon à l' screen
, qui utilise des pseudo-terminaux. Le type de terminal dépend de ce que le programme d'émulation de terminal exécute sur le côté maître du pseudo-terminal et comment il est configuré. La plupart des émulateurs de terminal GUI démarrent le programme côté esclave avec une variable TERM
dont la valeur correspond à leur émulation de terminal côté maître. Des programmes tels que le server SSH essaieront de "passer" le type de terminal qui se trouve à l'extrémité client de la connection. Habituellement, il existe un menu ou une option de configuration pour choisir parmi les émulations de terminal.
La bonne façon de détecter les capacités de couleur n'est pas de connecter une list de types de terminaux dans votre script. Il y a énormément de types de terminaux qui prennent en charge la couleur.
La bonne façon est de regarder ce que termcap / terminfo dit à propos de votre type de terminal.
couleur = 0 si tput Co> / dev / null 2> & 1 puis test "` tput Co` "-gt 2 && color = 1 elif tput colors> / dev / null 2> & 1 puis test "` tput colors` "-gt 2 && color = 1 Fi
S'il vous plaît voir https://askubuntu.com/a/614714/398785 pour ma réponse détaillée sur pourquoi je pense TERM=xterm-color
est la mauvaise approche et .bashrc
Ubuntu est obsolète. Je vous recommand d'utiliser TERM=xterm-256color
(qui est la valeur par défaut depuis gnome-terminal 3.16, mais aussi d'utiliser les anciens terminaux gnome) et ajustez votre .bashrc
conséquence.