6

Значение оболочки $ TERM в Ubuntu по умолчанию равно "xterm" для входа в консоль. Как я могу изменить его, чтобы он по умолчанию был "xterm-color"? Я спрашиваю, потому что, похоже, это самый простой способ включить цветную подсказку.

Я знаю, что вы можете сбросить значение TERM в .bashrc или другом сценарии входа, но я бы предпочел просто принудительно установить значение TERM в более разумное значение по умолчанию.

2 ответа2

9

Переменная TERM хранит имя записи в базе данных terminfo, которая помогает ОС определять способ отображения информации на вашем терминале. То, что он по умолчанию, полностью зависит от того, как вы вошли в систему.


Обычно "консоль" означает, что вы физически находитесь за компьютером и входите в один из текстовых виртуальных терминалов (VT1-6).

  • TERM по умолчанию установлен на linux (это может отличаться в разных дистрибутивах; vt100 - безопасная альтернатива)

    • Чтобы изменить это, в Ubuntu 9.10 вам нужно настроить команду getty, определенную в /etc/init/tty1.conf. Это изменит настройку для /dev/tty1 (VT1), и вам потребуется внести те же изменения в /etc/init/tty2.conf, ..tty3.conf и т.д., Чтобы получить и другие виртуальные терминалы.

      # original getty command in /etc/init/tty1.conf
      exec /sbin/getty -8 38400 tty1
      
      # new command; sets default TERM on /dev/tty1 to "foobar"
      exec /sbin/getty -8 38400 tty1 foobar
      

Если вы вошли в X/Gnome/KDE (VT7, 8 или 9), вы не используете консоль, по крайней мере, в этом контексте. Технически это вход в X и использование псевдотерминала через приложение эмулятора терминала - это то, что дает вам окно, которое показывает вашу оболочку и командную строку.

  • TERM изначально устанавливается вашим эмулятором терминала. Его можно изменить в файлах запуска вашей оболочки (~/.bashrc, ~/.profile и т.д.).

    • xterm, rxvt, xterm-color, xterm-256color - все это общие значения

    • Чтобы изменить это значение, обратитесь к документации для вашего эмулятора терминала. Например, если вы используете rxvt-unicode (он же urxvt), вы должны использовать параметр командной строки -tn termname termname.


Если вы вошли в систему удаленно (через SSH или удаленный X), вы определенно не используете консоль ни в каком контексте; Опять же, вы используете псевдо-терминал.

  • TERM наследуется программой, которая запустила SSH:
    • SSH от виртуального терминала linux приводит к удаленному TERM linux ;
    • SSH из командной строки в эмуляторе терминала X-windows приводит к удаленному TERM любого значения TERM, установленного до команды SSH;
    • SSH из системы Windows, использующей PuTTY, по умолчанию равен xterm, но это можно изменить в конфигурации PuTTY;
    • и любые из приведенных выше настроек могут быть переопределены файлами запуска оболочки удаленного пользователя.
2

Много полезной информации здесь:

man 7 term

Значение TERM по умолчанию будет устанавливаться для каждой строки с помощью /etc /inittab (Linux и System-V-подобные UNIX) или /etc /ttys (BSD UNIX). Это почти всегда будет достаточно для рабочих станций и микрокомпьютерных консолей.

Следующая проблема заключается в том, что в Ubuntu 9.10 нет файлов /etc/inittab или /etc/ttys .

man inittab

Upstart init(8) демон не использует этот файл, а вместо этого считывает свою конфигурацию из файлов в /etc /init. Смотрите init(5) для более подробной информации.

Заглянув в /etc /init, вы можете найти файлы tty * .conf. Они управляются exec'ing getty. Итак, тогда:

man getty

термин Значение, которое будет использоваться для переменной среды TERM. Это переопределяет то, что init(8) могло установить, и наследуется логином и оболочкой.

Это хорошая информация. Теперь мы знаем, что значение TERM по умолчанию исходит от init(8)

... после всего этого мне не удалось выяснить, как изменить значение TERM по умолчанию, используемое init.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .