Как устроен экран входа в Linux

Введение в архитектуру терминалов и процесс входа

Когда ядро Linux завершает инициализацию оборудования и запускаются базовые системные службы, на экране появляется привычное приглашение login:. Ключевую роль в этом процессе играет демон agetty — низкоуровневый компонент, управляющий сессиями виртуальных и последовательных терминалов. Вместо монотонного изучения справочных руководств разберем на практических примерах архитектуру его взаимодействия с systemd, кастомизацию системного баннера /etc/issue и создание drop-in оверрайдов для тонкого контроля параметров терминала.

Базовые принципы agetty и аудит состояния службы в systemd

Для начала выясним точное расположение исполняемого файла демона в файловой структуре ОС с помощью стандартной команды which agetty.

Поиск бинарного файла agetty в системе

Основная задача agetty сводится к открытию порта виртуальной консоли или COM-интерфейса, настройке базовых режимов драйвера TTY (скорости передачи, четности, кодировок) и вызову подсистемы авторизации. Ознакомимся с доступной версией программы и ее ключевыми функциональными флагами:
⚙️ [Ключевые опции запуска]

-a, --autologin : производит автоматическую аутентификацию под указанной учетной записью в обход интерактивного запроса логина.
-J, --noclear : отключает принудительную очистку буфера терминала перед выводом приглашения, благодаря чему на экране остаются логи загрузки ядра.
-f, --issue-file : переопределяет стандартный путь к файлу приветственного баннера, отображаемого пользователю.
-o, --login-options : задает специфические параметры командной строки, передаваемые непосредственно утилите login.
-n, --skip-login : отменяет ввод идентификатора пользователя и немедленно переходит к следующей фазе аутентификации.
-8, --8bits : переводит канал терминала в режим полноценной обработки 8-битных символов.

Проверка версии и ключей командной строки agetty

В дистрибутивах на базе systemd контроль терминальных сессий возложен на специализированные шаблоны служб. Проверим активность и состояние фонового процесса для первой виртуальной консоли (tty1), запустив systemctl status [email protected] --no-pager.
В выводе наглядно видно, что экземпляр службы находится в активном состоянии и непрерывно ожидает подключения пользователя.

Проверка статуса юнита getty@tty1 через systemctl

Персонализация консольного баннера приветствия через /etc/issue

Перед отрисовкой строки login: терминал выводит содержимое специального информационного файла. Ознакомимся с его конфигурацией по умолчанию, выполнив команду cat /etc/issue.
В представленном тексте директива \n служит для динамической подстановки сетевого имени компьютера (hostname), тогда как макрос \l подставляет имя текущего терминала (tty).

Просмотр базового файла /etc/issue

Любым правкам системных файлов должно предшествовать создание резервной копии. Сохраним первоначальный баннер вызовом sudo cp /etc/issue /etc/issue.bak.

Резервное копирование оригинального файла issue

Теперь сгенерируем информативный баннер, отражающий технические параметры системы и время обращения к консоли: выполним echo -e '\n=== Welcome to Ubuntu Server (tty: \l) ===\nOS: \s \r (\m) | Time: \t\n' | sudo tee /tmp/custom_issue.
В сформированном шаблоне задействован набор управляющих последовательностей: идентификатор терминала (\l), наименование дистрибутива (\s), версия ядра (\r), процессорная архитектура (\m) и текущие системные часы (\t).

Формирование кастомного баннера во временном файле

Убедимся в отсутствии ошибок экранирования и синтаксиса в созданном файле, отобразив его через cat /tmp/custom_issue.

Проверка разметки временного файла баннера

Тонкая настройка agetty: создание drop-in оверрайдов для systemd

Перед модификацией параметров первого TTY проинспектируем исходную конфигурацию юнита с помощью команды systemctl cat [email protected].
Команда выведет структуру базового файла шаблона /usr/lib/systemd/system/[email protected], где заданы параметры среды и стандартная строка ExecStart.

Анализ стандартной конфигурации шаблона getty@tty1

Прямое редактирование файлов пакета в /usr/lib считается грубой ошибкой администрирования, так как любое системное обновление перезапишет изменения. Для безопасного переопределения директив создадим каталог drop-in настроек: sudo mkdir -p /etc/systemd/system/[email protected].

Создание директории оверрайдов systemd

Чтобы предотвратить стирание журнала загрузки флагом --noclear и скорректировать допустимые скорости соединения, сформируем конфигурационный фрагмент: echo -e '[Service]\nExecStart=\nExecStart=-/sbin/agetty -o "-p -- \\u" --noclear -s %I 115200,38400,9600 vt220' | sudo tee /etc/systemd/system/[email protected]/noclear.conf.
Первая пустая строка ExecStart= критически важна: в терминологии systemd она очищает массив ранее назначенных команд перед объявлением новой инструкции запуска.

Запись параметров запуска в файл noclear.conf

Применим изменения в конфигурации служб, заставив менеджер инициализации перечитать файлы на диске: systemctl daemon-reload.

Перезагрузка конфигурации демона systemd

Проверим корректность наложения drop-in конфигурации на базовый юнит повторным вызовом systemctl cat [email protected].
В нижней части вывода отобразится содержимое noclear.conf, что подтверждает успешное применение наших параметров.

Контроль объединенной конфигурации службы getty@tty1

Аудит терминальных линий, последовательных портов и сессий

Для получения сводки по всем активным экземплярам терминальных служб отфильтруем список запущенных юнитов: systemctl list-units --type=service 'getty@*' --no-pager.
В полученном списке отображается работающая служба [email protected], непрерывно обслуживающая первичную консоль системы.

Фильтрация запущенных экземпляров getty в systemd

В сценариях с облачными виртуальными машинами и сетевыми шлюзами взаимодействие нередко осуществляется через COM-порты. Проверим статус шаблонов для последовательных консолей командой systemctl list-unit-files 'serial-getty*' --no-pager.
Результат показывает, что шаблон [email protected] зарегистрирован в дистрибутиве, но по умолчанию пребывает в отключенном статусе (disabled).

Проверка состояния юнит-файлов serial-getty

Для комплексной оценки текущей пользовательской активности и распределения TTY-терминалов обратимся к утилите w.
Команда мгновенно предоставляет срез состояния сервера: время непрерывной работы, среднюю нагрузку на процессор (load average), список авторизованных учетных записей и привязанные к ним терминальные линии.

Анализ пользовательских сессий через команду w

Мы детально исследовали механику работы agetty — фундаментального связующего звена между виртуальными терминалами Linux и подсистемой аутентификации. Освоив форматирование информационных баннеров и механизм drop-in переопределений systemd, вы сможете адаптировать поведение консоли сервера под любые эксплуатационные требования.