Який тип терміналу я використовую?


51

Я перевірив це як з Ubuntu 12.04, так і з Debian 7. Коли я це роблю

echo $TERM

я отримав

xterm

Але якщо я використовую випадаюче меню "help"> "about", воно говорить gnome terminal 3.4.1.1.

Це означає, що я використовую лише gnome-термінал? Або просто xterm? Або gnome-terminal є розширенням xterm? Я збентежений.

Відповіді:


49

Для чого $TERM?

$TERMМінлива призначена для використання в додатках , щоб скористатися можливостями цього терміналу.

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

Це працює в тому, що система зберігає бібліотеку відомих терміналів та їх можливостей. У більшості систем це є /usr/share/terminfo(також існує термінальна версія, але це вже не використовується багато).

Тож скажемо, у вас є програма, яка хоче відображати червоний текст. По суті, він робить дзвінок до бібліотеки terminfo, який говорить " дайте мені послідовність байтів, які я повинен надіслати для червоного тексту для терміналу xterm ". Тоді він просто бере ці байти і роздруковує їх.
Ви можете спробувати це самостійно, роблячи tput setf 4; echo hi. Це отримає можливість setfterminfo та передасть йому параметр 4, який є потрібним кольором.


Чому термінал gnome бреше про себе:

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

Те, як ваш термінал обійде це, шляхом брехні про те, хто це. Тож ваш термінал gnome говорить " я xterm ".

Xterm - це дуже базовий термінал, який існує з самого світанку X11, і тому більшість емуляторів терміналів підтримують те, що він підтримує. Отже, термінал gnome, який каже, що це xterm, швидше за все має визначення у бібліотеці terminfo.

Мінусом брехні про тип вашого терміналу є те, що термінал може насправді підтримувати набагато більше, ніж xterm (наприклад, багато нових терміналів підтримують 256 кольорів, тоді як старі термінали підтримують лише 16). Таким чином, ви маєте компроміс, отримуєте більше функцій або більше сумісності. Більшість терміналів вибирають для більшої сумісності і, таким чином, вирішать рекламувати себе як xterm.

Якщо ви хочете це змінити, багато термінали запропонують певний спосіб налаштування поведінки. Але ви також можете просто зробити export TERM=gnome-terminal.


4
Рекомендувати комусь експортувати $ TERM справді здається, як втирання солі у відкриту рану ...
jasonwryan

1
так. Я здогадуюсь, що розробники gnome-терміналу залишилися $TERMз xtermповажної причини
mulllhausen

4
@mulllhausen Ця причина добре пояснена у моїй відповіді ...
Патрік,

27

TERMЗмінна середовища вказує терміналу типу , а НЕ термінал додатки . TERMмає конкретну мету: він повідомляє програмам, що працюють в цьому терміналі, як взаємодіяти з терміналом.

Програми взаємодіють із терміналами, записуючи евакуаційні послідовності - послідовності символів, які включають недруковані символи та мають такі ефекти, як переміщення курсору, стирання частини екрана, зміна поточного кольору тощо. За старих часів різні марки фізичних терміналів мали різні набори послідовностей втечі. Тому операційна система підтримує базу даних типів терміналів та їх характеристики. Традиційна база даних Termcap ( «термінальний Можливостей»); багато сучасних систем та додатків перейшли на терміно . Обидві бази даних індексуються іменем типу терміналу, і програми запитують їх, використовуючи ім'я типу терміналу від TERMзмінних середовища.

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

Емулятори терміналів, які відрізняються від xterm, можуть додавати свій власний запис у базу даних терміналів під своїм іменем. Однак це не добре поєднується з віддаленими оболонками. Програма, що працює на машині A, але відображається на машині B, наприклад, тому, що вона була запущена через ssh з B до A, потребує запиту термінальної бази даних на машині A. Видалені методи входу, такі як ssh переносять TERMзмінну середовища, але це корисно лише тоді, коли в базі даних терміналів B також є запис для користувача значення на А. Тому багато емуляторів терміналів дотримуються TERM=xtermцього, загалом відомо.

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

Щоб дізнатися, яким терміналом оболонка керує ним, подивіться на батьківську оболонку:

ps -p$PPID

Біг, ps -p$PPIDздається, не підказує мені, на якому терміналі я працюю. Або принаймні не так, як я розумію. Чи є у вас приклад вихід / відповідь?
користувач3731622

@user Вихід - це купа чисел і криптовалютних скорочень, за якими слідує командний рядок. За більшості обставин командний рядок - це той, який запустив емулятор терміналу, в якому працює оболонка.
Жил 'ТАК - перестань бути злим'

12

Змінна середовище 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 теж часто будується з підтримкою 16 кольорів. Ви можете спробувати встановити TERM на konsole-16color або xterm-16color.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.