Wenn ich ein Terminalfenster mit dem GNOME-Terminalemulator in der Desktop-GUI öffne, wird die Umgebungsvariable TERM der Shell standardmäßig auf den Wert gesetzt xterm
.
Wenn ich CTL+ ALT+ benutze F1, um zu einem Konsolen-TTY-Fenster zu wechseln und echo $TERM
der Wert auf gesetzt ist linux
.
Meine Motivation zu fragen ist, dass in meiner ~/.bashrc
Datei eine Variable verwendet wird, um zu bestimmen, ob eine Farbschale bereitgestellt wird oder nur ein gutes altmodisches Monochrom.
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color) color_prompt=yes;;
esac
Sowohl in der Konsolen-Shell als auch in der Gnome Terminal-Emulator-Shell, wenn ich tippe
export TERM=xterm-color
source /.bashrc
beide Muscheln wechseln in den Farbmodus (etwas, was ich mir immer in beiden gewünscht hätte).
Wo werden die Standardwerte TERM
festgelegt und wo können die Standardwerte am besten geändert werden, wenn dies überhaupt möglich ist? In der Benutzeroberfläche des Terminalemulators scheint es nichts zu geben, das den Standard-TERM-Wert auswählen oder festlegen könnte.
Ich habe überlegt, nur die Zeile export TERM=xterm-color
an den Anfang meiner ~/.bashrc
Datei zu setzen, aber mein Bauchgefühl sagt, dass dies nicht die beste Lösung ist und meine Google-Suche mich noch nicht zu einer guten Antwort geführt hat.
Ich verwende Ubuntu 15.04 Desktop Edition (Debian-basiert).
Antworten:
An vielen Orten, je nachdem
Auf virtuellen Terminals und realen Terminals wird die
TERM
Umgebungsvariable von dem Programm festgelegt, mit dem die Verkettung erfolgtlogin
, und wird bis zur interaktiven Shell vererbt, die nach der Anmeldung ausgeführt wird. Wo genau dies geschieht, hängt von System zu System und von der Art des Terminals ab.Reale, serielle Anschlüsse können je nach dem, was sich am anderen Ende des Kabels befindet, vom Typ abweichen. Herkömmlicherweise wird das
getty
Programm mit einem Argument aufgerufen, das den Terminaltyp angibt, oder es wird dasTERM
Programm von den Dienstkonfigurationsdaten eines Dienstmanagers übergeben.init
Systemen kann man dies in/etc/inittab
Einträgen sehen, die etwas in der Art von lesen Das letzte Argumentagetty
in dieser Zeilevt100-nav
ist der Terminaltyp, für den festgelegt wurde/dev/ttyS0
. So/etc/inittab
ist , wo für echte Terminals auf solchen Systemen den Terminaltyp zu ändern./usr/lib/systemd/system/[email protected]
Unit-Datei (/lib/systemd/system/[email protected]
auf nicht zusammengeführten Systemen) sehen, die liest Festlegen derTERM
Variablen in der Umgebung, an die übergeben wirdagetty
. In dieser Service Unit-Datei können Sie den Terminaltyp für reale Terminals auf solchen Systemen ändern. Beachten Sie, dass dies für alle realen Terminals gilt, die diese Service-Unit-Vorlage verwenden. (Um es nur für einzelne Terminals zu ändern, muss die Vorlage manuell instanziiert werden.)init
den Terminaltyp aus dem dritten Feld des Eintrags jedes Terminals in der/etc/ttys
Datenbank und legtTERM
diesen in der Umgebung fest, mit der es ausgeführt wirdgetty
. So/etc/ttys
ist , wo man den Terminaltyp für reale Anschlüsse an den BSDs ändert.Wie Sie bereits bemerkt haben, haben virtuelle Kernel-Terminals einen festen Typ. Im Gegensatz zu NetBSD, das den virtuellen Terminaltyp des Kernels im laufenden Betrieb variieren kann, verfügen Linux und die anderen BSDs über einen einzigen festen Terminaltyp, der im integrierten Terminalemulationsprogramm des Kernels implementiert ist. Unter Linux stimmt dieser Typ mit
linux
der terminfo-Datenbank überein . (Die Kernel-Terminal-Emulation von FreeBSD istxterm
seit Version 9 eine eingeschränkte Untermenge.)mingetty
odervc-get-tty
(aus dem nosh-Paket) verwenden, "weiß" das Programm, dass nur mit einem virtuellen Terminal gesprochen werden kann, und sie verdrahten die "bekannten" virtuellen Terminaltypen, die dem Betriebssystem entsprechen, für das das Programm kompiliert wurde./usr/lib/systemd/system/[email protected]
Unit-Datei (/lib/systemd/system/[email protected]
auf nicht zusammengeführten Systemen) sehen, die liest Festlegen derTERM
Variablen in der Umgebung, an die übergeben wirdagetty
.Für virtuelles Kernel - Terminals, eine nicht den Terminaltyp verändern. Das Terminal-Emulator-Programm im Kernel ändert sich schließlich nicht. Es ist falsch , den Typ zu ändern. Dies wird insbesondere die Erkennung von Cursor- / Bearbeitungstasten-CSI-Sequenzen vermasseln. Die
linux
CSI - Sequenzen durch den Terminal - Emulator Linux - Kernel gesendet werden , anders als diexterm
odervt100
CSI - Sequenzen von GUI - Terminal - Emulator Programmen in Dezember VT - Modus gesendet.Ihr GUI-Terminal-Emulator ist eines von vielen Programmen, von SSH bis hin zu
screen
Pseudo-Terminals. Der Terminaltyp hängt davon ab, welches Terminalemulatorprogramm auf der Masterseite des Pseudoterminals ausgeführt wird und wie es konfiguriert ist. Die meisten GUI-Terminalemulatoren starten das Programm auf der Slave-Seite mit einerTERM
Variablen, deren Wert mit ihrer Terminalemulation auf der Master-Seite übereinstimmt. Programme wie der SSH-Server versuchen, den Terminaltyp auf dem Client-Ende der Verbindung zu "passieren". Normalerweise gibt es ein Menü oder eine Konfigurationsoption, um zwischen Terminalemulationen zu wählen.Die packende Hand
Die richtige Methode zum Erkennen der Farbfähigkeit besteht nicht darin , eine Liste der Terminaltypen in Ihrem Skript festzuklemmen. Es gibt sehr viele Terminaltypen, die Farben unterstützen.
Der richtige Weg ist, sich anzusehen, was termcap / terminfo über Ihren Terminaltyp aussagt.
Weitere Lektüre
TERM
. nosh Führer . Software.quelle
[ -x /usr/bin/tput ] && /usr/bin/tput setaf 1 >&/dev/null && color_prompt=yes
. (ncurses 5.9)tput Co
gibt „unbekannt term capability“ in Jessie und Xenial.tput colors
undtput setaf 1
beide scheinen zu funktionieren, obwohl ich zugebe, ich verstehe nicht warum .Unter https://askubuntu.com/a/614714/398785 finden Sie eine ausführliche Antwort darauf, warum ich
TERM=xterm-color
den falschen Ansatz halte und Ubuntus.bashrc
obsolet ist. Ich empfehle, dass Sie mit gehenTERM=xterm-256color
(was die Standardeinstellung seit Gnome-Terminal 3.16 ist, aber auch sicher mit älteren Gnome-Terminals zu verwenden ist) und Ihr.bashrc
entsprechend anpassen .quelle
.bashrc
sei obsolet). "Ubuntus .bashrc ist veraltet."xterm-256color
Ursachenhtop
zu vermasseln das Layout wie dies in Ubuntu 18.04.