In molti posti, a seconda
Sui terminali virtuali e terminali reali, la TERM
variabile d'ambiente è impostata dal programma a cui è concatenata login
e viene ereditata fino in fondo alla shell interattiva che viene eseguita una volta effettuato l'accesso. Dove, precisamente, ciò accade varia da sistema a sistema e in base al tipo di terminale.
I terminali reali, seriali, possono variare nel tipo, in base a ciò che si trova all'altra estremità del filo. Quindi, convenzionalmente, il getty
programma viene invocato con un argomento che specifica il tipo di terminale o viene passato al TERM
programma dai dati di configurazione del servizio di un gestore servizi.
I terminali virtuali del kernel, come hai notato, hanno un tipo fisso. A differenza di NetBSD, che può variare al volo il tipo di terminale virtuale del kernel, Linux e gli altri BSD hanno un singolo tipo di terminale fisso implementato nel programma di emulazione terminale incorporato del kernel. Su Linux, quel tipo corrisponde linux
al database terminfo. (L'emulazione del terminale del kernel di FreeBSD è un xterm
sottoinsieme limitato dalla versione 9.)
- Sui sistemi che utilizzano
mingetty
o vc-get-tty
(dal pacchetto nosh) il programma "sa" che può parlare solo con un terminale virtuale, e cablano i tipi di terminali virtuali "noti" appropriati al sistema operativo per cui è stato compilato il programma.
- Su sistemi systemd, si può vedere questo nel
/usr/lib/systemd/system/getty@.service
file di unità ( /lib/systemd/system/getty@.service
su sistemi non uniti), che leggeAmbiente = TERM = linux
impostando la TERM
variabile nell'ambiente passato a agetty
.
Per i terminali virtuali del kernel, non si cambia il tipo di terminale. Dopotutto, il programma di emulazione terminale nel kernel non cambia. Non è corretto cambiare il tipo. In particolare, ciò rovinerà il riconoscimento della sequenza CSI del tasto cursore / modifica. Le linux
sequenze CSI inviate dall'emulatore di terminale del kernel Linux sono diverse dalle sequenze CSI xterm
o vt100
inviate dai programmi di emulazione del terminale GUI in modalità DEC VT.
L'emulatore di terminale GUI è uno dei tanti programmi, dal SSH dæmon a screen
, che utilizza pseudo-terminali. Qual è il tipo di terminale dipende da quale programma di emulazione di terminale è in esecuzione sul lato master dello pseudo-terminale e da come è configurato. La maggior parte degli emulatori di terminali GUI avvia il programma sul lato slave con una TERM
variabile il cui valore corrisponde all'emulazione del terminale sul lato master. Programmi come il server SSH tenteranno di "passare" il tipo di terminale che si trova sul lato client della connessione. Di solito c'è un menu o un'opzione di configurazione per scegliere tra emulazioni di terminale.
La mano avvincente
Il modo giusto per rilevare la capacità di colore non è cablare un elenco di tipi di terminali nello script. Esistono moltissimi tipi di terminali che supportano il colore.
Il modo giusto è guardare cosa dice termcap / terminfo sul tuo tipo di terminale.
colore = 0
se tput Co> / dev / null 2> & 1
poi
test "` tput Co` "-gt 2 && color = 1
elif tput colors> / dev / null 2> & 1
poi
test "` tput colors` "-gt 2 && color = 1
fi
Ulteriori letture
- Jonathan de Boyne Pollard (2018).
TERM
. Guida di nosh . Software.