Какой тип терминала я использую?

Какой тип терминала я использую?

Я тестировал это как с Ubuntu 12.04, так и с Debian 7. Когда я это делаю

echo $TERM

я получил

xterm

Но если я использую выпадающее меню «Справка» > «О программе», то там написано gnome terminal 3.4.1.1.

Означает ли это, что я использую только gnome-terminal? Или только xterm? Или gnome-terminal — это расширение xterm? Я в замешательстве.

решение1

Для чего $TERM?

Переменная $TERMпредназначена для использования приложениями возможностей этого терминала.

Например, если программа хочет отобразить цветной текст, она должна сначала выяснить, поддерживает ли используемый вами терминал цветной текст, а затем, если поддерживает, как сделать так, чтобы текст отображался цветным.

Это работает так: система хранит библиотеку известных терминалов и их возможностей. В большинстве систем это есть /usr/share/terminfo(есть также termcap, но это наследие, которое больше не используется).

Итак, предположим, у вас есть программа, которая хочет отобразить красный текст. По сути, она делает вызов библиотеки terminfo, которая говорит: "дайте мне последовательность байтов, которую я должен отправить для красного текста для терминала xterm". Затем он просто берет эти байты и выводит их.
Вы можете попробовать это сами, выполнив tput setf 4; echo hi. Это позволит получить setfвозможность terminfo и передать ей параметр 4, который является нужным вам цветом.


Почему терминал gnome лжет о себе:

Теперь предположим, что у вас есть какой-то блестящий новый эмулятор терминала, который только что был выпущен, и системная библиотека terminfo еще не имеет определения для него. Когда ваше приложение пытается найти, как что-то сделать, оно потерпит неудачу, потому что терминал неизвестен.

Ваш терминал обходит это, лгая о том, кто он. Так что ваш терминал gnome говорит: "Я икстерм".

Xterm — это очень простой терминал, который существует с самого начала X11, и поэтому большинство эмуляторов терминала поддерживают то, что он поддерживает. Так что, если терминал gnome говорит, что это xterm, скорее всего, у него есть определение в библиотеке terminfo.

Недостатком лжи о типе вашего терминала является то, что терминал может на самом деле поддерживать гораздо больше, чем xterm (например, многие новые терминалы поддерживают 256 цветов, в то время как старые терминалы поддерживали только 16). Таким образом, у вас есть компромисс: вы получаете больше функций или большую совместимость. Большинство терминалов выберут большую совместимость и, таким образом, будут рекламировать себя как xterm.

Если вы хотите переопределить это, многие терминалы предложат способ настройки поведения. Но вы также можете просто сделать export TERM=gnome-terminal.

решение2

Переменная окружения TERMуказывает терминалтип, а не терминалприложение. TERMимеет определенную цель: он сообщает приложениям, работающим на этом терминале, как взаимодействовать с терминалом.

Приложения взаимодействуют с терминалами, записывая escape-последовательности — последовательности символов, которые включают непечатаемые символы и имеют такие эффекты, как перемещение курсора, стирание части экрана, изменение текущего цвета и т. д. В старые времена разные марки физических терминалов имели разные наборы escape-последовательностей. Поэтому операционная система ведет базу данных типов терминалов и их характеристик. Традиционная база данных — этоtermcap(«ВОЗМОЖНОСТИ ТЕРМИНАЛА»); многие современные системы и приложения перешли натерминфо. Обе базы данных индексируются по имени типа терминала, и приложения запрашивают их, используя имя типа терминала из TERMпеременных среды.

В настоящее время большинство терминалов используютстандартный набор последовательностей выходас несколькими общими наборами расширений, поэтому вы не увидите много разных значений TERM. Большинство эмуляторов терминала с графическим интерфейсом совместимы сxterm, традиционный X-терминал (который до сих пор используется и обслуживается).

Эмуляторы терминала, отличающиеся от xterm, могут добавлять собственную запись в базу данных терминала под своим именем. Однако это не очень хорошо сочетается с удаленными оболочками. Программа, работающая на машине A, но отображающаяся на машине B, например, потому что она была запущена через ssh с B на A, должна запросить базу данных терминала на машине A. Методы удаленного входа, такие как ssh, переносят переменную TERMокружения, но это полезно только тогда, когда в базе данных терминала B также есть запись для значения user на A. Поэтому многие эмуляторы терминала придерживаются TERM=xtermтого, что практически общеизвестно.

Различия между терминалами в целом определяются не тем, как приложения взаимодействуют с ними, а тем, как терминалы взаимодействуют с пользователем и вписываются в свою среду. Например, Gnome Terminal хорошо выглядит в Gnome и предоставляет вкладки и другие приятные мелочи; Konsole хорошо выглядит в KDE и предоставляет вкладки и другие приятные мелочи; urxvt имеет небольшие требования к памяти; Console2 работает в Windows; screen и tmux предоставляют сеансы, которые можно прикреплять к разным родительским терминалам; и так далее. Поскольку ни одна из этих функций не влияет на приложения, работающие в терминале, большинство эмуляторов терминала используют TERM=xterm.

Чтобы узнать, в каком терминале запущена оболочка (при условии, что оболочка запущена непосредственно в терминале), посмотрите на родительский элемент оболочки:

ps -p$PPID

решение3

Переменная окружения TERM не обозначает используемый вами терминал.

Цитата gnu.org:

Переменная окружения TERM содержит идентификатор возможностей текстового окна. Вы можете получить подробный список этих возможностей, используя команду > 'infocmp', используя 'man 5 terminfo' в качестве ссылки.

При создании текста со встроенными директивами цвета msgcat смотрит на переменную TERM. Текстовые окна сегодня обычно поддерживают не менее 8 цветов. Однако часто текстовое окно поддерживает 16 или более цветов, даже если переменная TERM установлена ​​на идентификатор, обозначающий только 8 поддерживаемых цветов. Может быть стоит установить переменную TERM на другое значение в следующих случаях:

xtermв большинстве случаев построен с поддержкой 16 цветов. Он также может быть построен с поддержкой 88 или 256 цветов (но не обоих). Вы можете попробовать установить TERM в xterm-16color, xterm-88color или xterm-256color. rxvt

rxvtчасто создается с поддержкой 16 цветов. Вы можете попробовать установить TERM в rxvt-16color. konsole

консольtoo часто создается с поддержкой 16 цветов. Вы можете попробовать установить TERM в konsole-16color или xterm-16color.

После установки TERM вы можете проверить его, вызвав 'msgcat --color=test' и посмотрев, выглядит ли вывод как разумная цветовая карта. Переменная окружения TERM содержит идентификатор возможностей текстового окна. Вы можете получить подробный список этих возможностей, используя команду 'infocmp', используя 'man 5 terminfo' в качестве ссылки.

решение4

Думаю, стоит отметить, что вы можете узнать ответ на свой первоначальный вопрос, запустив ps -p $$, т.е. узнать, что такое процесс с текущим pid. Пример вывода:

    PID TTY          TIME CMD
3045221 pts/17   00:00:00 bash

что совершенно ясно относительно того, какой это терминал.

Связанный контент