Что даёт %I 38400 для переменной окружения TERM?

Искал, как настроить автологин на нужный TTY. Нашёл. Там используется /sbin/agetty через сервис systemd. Так вот, там такая запись:

ExecStart=-/sbin/agetty --autologin username --noclear %I 38400 linux

В общем, то что жирным выделено уходит в переменную окружения TERM. Нужно только понять, что это даёт. Гуглинг что-то не помог мне.

Я вообще ни разу ниигде не находил, чтобы было описание того, что и как должно быть записано в стандартные переменные окружения. Типа man TERM, может есть какие-то ресурсы, где можно посмотреть?


Ответы (1 шт):

Автор решения: Fat-Zer

ExecStart=-/sbin/agetty --autologin username --noclear %I 38400 linux

см. man agetty:

  • %I — это параметр, который systemd должен заменить на имя конкретного tty устройства для которого запускается agetty, обычно это tty[0-6]. Но можно запустить логин и, например, на последовательном порте (ttyS0, или ttyUSB0).
  • 38400 — это «скорость» терминала в бодах, для виртуальных терминалов /dev/tty* это не имеет ни какого практического значения. Для «настоящего» терминала на последовательном интерфейсе это установит скорость последовательного порта.
  • linux — это тип терминала, просто значение, в которое устанавливается переменная TERM.

Собственно само значение TERM, как говорит POSIX используется «некоторыми программами» чтобы определить, какие дополнительные возможности терминала они могут задействовать. Вообще говоря, сам формат этого значения и его интерпретация остаются полностью на совести конкретных программ.

На практике, обычно, значение TERM — это имя терминала из базы terminfo, а конкретно имя файла в /usr/share/terminfo/*/*. В нём в частности определяется, например, доступны ли на терминале цвета, сколько цветов, как именно вывести текст в определённом месте экрана и т.п. Обычно эти данные используют программы с псевдографическим интерфейсом, в частности, основанные на (n)curses.

В общем TERM — это одна из тех доисторических вещей, доставшихся в наследство с тех времён, когда компьютеры были большими, а «терминал» представлял из себя отдельное устройство, подключаемое через последовательный интерфейс. Выносить такие операции, как «вывести строчку в позицию (X,Y) экрана» на уровень драйвера не имело смысла, а каждый терминал реализовывал эту операцию по-своему, с помощью специальных управляющих команд, передаваемых в общем потоке данных. Сегодня, если не делаешь что-то необычное, например, подключаешь внешний терминал из 70—80-х годов XX века через последовательный порт, то это значение не должно представлять интереса.

→ Ссылка