An vielen Orten, je nachdem
Auf virtuellen Terminals und realen Terminals wird die TERM
Umgebungsvariable von dem Programm festgelegt, mit dem die Verkettung erfolgt login
, 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 das TERM
Programm von den Dienstkonfigurationsdaten eines Dienstmanagers übergeben.
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 ist xterm
seit Version 9 eine eingeschränkte Untermenge.)
- Auf Systemen, die
mingetty
oder vc-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.
- Auf systemd-Systemen kann man dies in der
/usr/lib/systemd/system/getty@.service
Unit-Datei ( /lib/systemd/system/getty@.service
auf nicht zusammengeführten Systemen) sehen, die liestUmgebung = TERM = Linux
Festlegen der TERM
Variablen in der Umgebung, an die übergeben wird agetty
.
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 die xterm
oder vt100
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 einer TERM
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.
Farbe = 0
if tput Co> / dev / null 2> & 1
dann
test "` tput Co` "-gt 2 && color = 1
elif tput colors> / dev / null 2> & 1
dann
test "` tput colors` "-gt 2 && color = 1
fi
Weitere Lektüre
- Jonathan de Boyne Pollard (2018).
TERM
. nosh Führer . Software.