Во многих местах, в зависимости
На виртуальных терминалах и реальных терминалах TERM
переменная окружения задается программой, к которой она привязана login
, и наследуется на всем пути до интерактивной оболочки, которая выполняется после входа в систему. Где именно это происходит, зависит от системы и в зависимости от типа терминала.
Реальные, последовательные клеммы могут различаться по типу, в зависимости от того, что находится на другом конце провода. Поэтому обычно getty
программа вызывается с аргументом, который указывает тип терминала, или передается TERM
программе из данных конфигурации службы диспетчера служб.
Виртуальные терминалы ядра, как вы заметили, имеют фиксированный тип. В отличие от NetBSD, который может на лету изменять тип виртуального терминала ядра, Linux и другие BSD имеют один фиксированный тип терминала, реализованный в встроенной в ядро программе эмуляции терминала. В Linux этот тип совпадает linux
с базой данных terminfo. (Эмуляция терминала ядра FreeBSD является ограниченным xterm
подмножеством начиная с версии 9.)
Для виртуальных терминалов ядра нельзя изменить тип терминала. В конце концов, программа эмулятора терминала в ядре не меняется. Это неправильно , чтобы изменить тип. В частности, это испортит курсор / ключ редактирования распознавания последовательности CSI. Последовательности linux
CSI, отправляемые эмулятором терминала ядра Linux, отличаются от последовательностей xterm
или vt100
CSI, отправляемых программами эмулятора терминала GUI в режиме DEC VT.
Ваш эмулятор терминала с графическим интерфейсом - одна из многих программ, от SSH-демона до screen
, которая использует псевдо-терминалы. Тип терминала зависит от того, какая программа эмулятора терминала запущена на главной стороне псевдотерминала и как она настроена. Большинство эмуляторов терминала GUI запускают программу на ведомой стороне с TERM
переменной, значение которой соответствует их эмуляции терминала на ведущей стороне. Такие программы, как сервер SSH, будут пытаться «пройти» через тип терминала, который находится на стороне клиента соединения. Обычно есть эмуляция терминала или меню или опция конфигурации.
Захватывающая рука
Правильный способ определения цветовых возможностей - не фиксировать список типов терминалов в вашем скрипте. Существует огромное количество типов терминалов, которые поддерживают цвет.
Правильный путь - посмотреть, что termcap / terminfo говорит о типе вашего терминала.
цвет = 0
если tput Co> / dev / null 2> & 1
тогда
test "` tput Co` "-gt 2 && color = 1
elif tput colors> / dev / null 2> & 1
тогда
test "` tput colors` "-gt 2 && color = 1
фи
дальнейшее чтение
- Джонатан де Бойн Поллард (2018).
TERM
, Руководство Nosh . Softwares.