getty (Русский)
Состояние перевода: На этой странице представлен перевод статьи getty. Дата последней синхронизации: 14 февраля 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
getty — это общее название программы, которая управляет терминальной линией и подключенным к ней терминалом. Её цель — защитить систему от несанкционированного доступа. Как правило, каждый процесс getty запускается через systemd и управляет одной терминальной линией.
Установка
По умолчанию в Arch Linux используется agetty, который является частью пакета util-linux .
- mingetty — Минимальный getty, позволяющий автоматически входить в систему.
- fbgetty — Консольный getty, подобный mingetty, который поддерживает фреймбуфер.
- mgetty — Универсальная программа для работы со всеми аспектами модема под Unix.
Добавление дополнительных виртуальных консолей
В файле /etc/systemd/logind.conf измените опцию NAutoVTs=6 на желаемое число виртуальных консолей, которые будут доступны после загрузки системы.
При необходимости можно временно запустить новую виртуальную консоль путём запуска службы getty@ttyN.service напрямую.
Автоматический вход в виртуальную консоль
Настройка ведётся через drop-in файлы systemd для переопределения параметров по умолчанию, передаваемых в agetty.
Настройки для виртуальных и последовательных (serial) консолей отличаются. Скорее всего вам нужно настроить автоматический вход в систему на виртуальной консоли (имя устройства которой ttyN , где N — число). Конфигурация автоматического входа для последовательных консолей будет немного отличаться. Имена устройств последовательных консолей выглядят как ttySN , где N — число.
Совет: Подумайте об использовании функции автовхода в greetd. Он не будет выполнять автологин во второй раз при выходе из начальной сессии, а вместо этого покажет экран входа в систему.
Виртуальная консоль
Создайте drop-in файл для getty@tty1.service со следующим содержимым:
/etc/systemd/system/getty@tty1.service.d/autologin.conf
[Service] ExecStart= ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear --autologin пользователь - $TERM
- Опция Type=idle , присутствующая в стандартном getty@.service , задержит запуск службы до тех пор, пока не будут выполнены все задания (запросы на изменение состояния юнитов), чтобы не засорять приглашение к входу в систему загрузочными сообщениями. При автоматическом запуске X может оказаться полезным сразу запустить getty@tty1.service , добавив Type=simple в drop-in файл. И система инициализации, и startx могут быть заглушены, чтобы избежать перемешивания их сообщений во время загрузки.
- Приведённый выше фрагмент приведет к тому, что тип сеанса loginctl будет установлен на tty . При желании (например, при автоматическом запуске X можно вручную установить тип сеанса wayland или x11 путём добавления Environment=XDG_SESSION_TYPE=x11 или Environment=XDG_SESSION_TYPE=wayland в этот файл.
Если вам не нужен автовход, но вы не хотите вводить своё имя пользователя, смотрите #Запрос только пароля для пользователя по умолчанию.
Если вам нужен tty отличный от tty1, смотрите systemd FAQ.
Последовательная консоль
/etc/systemd/system/serial-getty@ttyS0.service.d/autologin.conf
[Service] ExecStart= ExecStart=-/sbin/agetty -o '-p -f -- \\u' --keep-baud --autologin пользователь 115200,57600,38400,9600 - $TERM
Консоль nspawn
Для настройки автовхода в контейнере systemd-nspawn создайте следующий drop-in файл:
/etc/systemd/system/console-getty.service.d/autologin.conf
[Service] ExecStart= ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear --keep-baud --autologin пользователь - 115200,38400,9600 $TERM
Если для доступа к контейнеру используется метод machinectl login мой-контейнер , также настройте шаблон container-getty@.service , который управляет pts/[0-9] :
/etc/systemd/system/container-getty@.service.d/autologin.conf
[Service] ExecStart= ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear --keep-baud --autologin пользователь - 115200,38400,9600 $TERM
Запрос только пароля для пользователя по умолчанию
Getty можно использовать для входа в систему с виртуальной консоли с пользователем по умолчанию, вводя пароль, но без необходимости вводить имя пользователя. Например, чтобы запросить пароль пользователя пользователь на tty1 :
/etc/systemd/system/getty@tty1.service.d/skip-username.conf
[Service] ExecStart= ExecStart=-/sbin/agetty -o '-p -- пользователь' --noclear --skip-login - $TERM
Отображение загрузочных сообщений на tty1
По умолчанию в Arch включена служба getty@tty1 . В файле службы уже прописан параметр —noclear , который не позволяет agetty очищать экран. Однако systemd очищает экран перед его запуском. Чтобы отключить это поведение, создайте следующий drop-in файл:
/etc/systemd/system/getty@tty1.service.d/noclear.conf
[Service] TTYVTDisallocate=no
- Удалите quiet из параметров ядра.
- Поздний запуск KMS может привести к стиранию первых нескольких сообщений. Смотрите Kernel mode setting (Русский)#Ранний запуск KMS или Kernel mode setting (Русский)#Отключение modesetting.
Смотрите также
- systemd (Русский)#Изменение цели загрузки по умолчанию
- The TTY demystified
- tty — Википедия
getty
A getty is the generic name for a program which manages a terminal line and its connected terminal. Its purpose is to protect the system from unauthorized access. Generally, each getty process is started by systemd and manages a single terminal line.
Installation
agetty is the default getty in Arch Linux, as part of the util-linux package.
- mingetty — A minimal getty which allows automatic logins.
- mgetty — A versatile program to handle all aspects of a modem under Unix.
Tips and tricks
Staircase effect
agetty modifies the TTY settings while waiting for a login so that the newlines are not translated to CR-LFs. This tends to cause a «staircase effect» for messages printed to the console.
It is entirely harmless, but in the event it persists once logged, you can fix this behavior with:
$ stty onlcr
See this forums discussion on the subject.
Add additional virtual consoles
Agetty manages virtual consoles and six of these virtual consoles are provided by default in Arch Linux. They are usually accessible by pressing Ctrl+Alt+F1 through Ctrl+Alt+F6 .
Open the file /etc/systemd/logind.conf and set the option NAutoVTs=6 to the number of virtual terminals that you want at boot.
If needed, it is possible to temporarily start a getty@ttyN.service service directly.
Automatic login to virtual console
Configuration relies on systemd unit drop-in files to override the default parameters passed to agetty.
Configuration differs for virtual versus serial consoles. In most cases, you want to set up automatic login on a virtual console, (whose device name is ttyN , where N is a number). The configuration of automatic login for serial consoles will be slightly different. Device names of the serial consoles look like ttySN , where N is a number.
Tip: Consider using greetd’s auto-login feature. It will not auto-login a second time if the initial session exits, but will show a login screen instead.
Virtual console
Create a drop-in file for getty@tty1.service with the following contents:
/etc/systemd/system/getty@tty1.service.d/autologin.conf
[Service] ExecStart= ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear --autologin username %I $TERM
- The option Type=idle found in the default getty@.service will delay the service startup until all jobs (state change requests to units) are completed in order to avoid polluting the login prompt with boot-up messages. When starting X automatically, it may be useful to start getty@tty1.service immediately by adding Type=simple into the drop-in file. Both the init system and startx can be silenced to avoid the interleaving of their messages during boot-up.
- See Silent boot#agetty for an example virtual console drop-in file which hides the login prompt completely.
- The above snippet will cause the loginctl session type to be set to tty . If desirable (for example if starting X automatically), it is possible to manually set the session type to wayland or x11 by adding Environment=XDG_SESSION_TYPE=x11 or Environment=XDG_SESSION_TYPE=wayland into this file.
If you do not want full automatic login, but also do not want to type your username, see #Prompt only the password for a default user in virtual console login.
If you want to use a tty other than tty1, see systemd/FAQ#How do I change the default number of gettys?.
Serial console
/etc/systemd/system/serial-getty@ttyS0.service.d/autologin.conf
[Service] ExecStart= ExecStart=-/sbin/agetty -o '-p -f -- \\u' --keep-baud --autologin username 115200,57600,38400,9600 - $TERM
Nspawn console
To configure auto-login for a systemd-nspawn container, override console-getty.service by creating a drop-in file:
/etc/systemd/system/console-getty.service.d/autologin.conf
[Service] ExecStart= ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear --keep-baud --autologin username - 115200,38400,9600 $TERM
If machinectl login my-container method is used to access the container, also adjust the container-getty@.service template that manages pts/[0-9] pseudo ttys:
/etc/systemd/system/container-getty@.service.d/autologin.conf
[Service] ExecStart= ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear --keep-baud --autologin username - 115200,38400,9600 $TERM
Prompt only the password for a default user in virtual console login
Getty can be used to login from a virtual console with a default user, typing the password but without needing to insert the username. For instance, to prompt the password for username on tty1 :
/etc/systemd/system/getty@tty1.service.d/skip-username.conf
[Service] ExecStart= ExecStart=-/sbin/agetty -o '-p -- username' --noclear --skip-login - $TERM
and then enable getty@tty1 .
Have boot messages stay on tty1
By default, Arch has the getty@tty1 service enabled. The service file already passes —noclear , which stops agetty from clearing the screen. However systemd clears the screen before starting it. To disable this behavior, create a drop-in file:
/etc/systemd/system/getty@tty1.service.d/noclear.conf
[Service] TTYVTDisallocate=no
- Make sure to remove quiet from the kernel parameters.
- Late KMS starting may cause the first few boot messages to clear. See NVIDIA#Early loading.
See also
- systemd#Change default target to boot into
- The TTY demystified
- Wikipedia:tty (unix)
Htop на выделенном VT
Htop — это интерактивная программа для наблюдения за процессами, созданная как альтернатива программе top . Каждый, кто работает за машиной с линуксом на борту, использовал её хотя бы один раз: будь то поиск процесса (и его последующее убийство) или тщательный мониторинг используемых ресурсов.

Для удобства это программу можно держать всегда запущенной: в отдельном окне терминала, в его вкладках или на каком-нибудь рабочем столе. Я же предлагаю запустить его на фиксированном VT, на который можно в любой момент переключиться. Преимущество такого подхода заключается в чистом окружении.
Это возможно (и правильно) сделать с помощью системы инициализации systemd :
● Вызов по требованию, либо загрузка зависимостью getty.target .
● Избегаем логина. Он нам не нужен.
How it works?
agetty — это такая программа, которая открывает порт tty, выдаёт prompt для аутентификации и передаёт последующее управление другой программе — login.
$ ls -l ` which agetty login `
-rwxr-xr-x 1 root root 44104 Sep 29 05: 21 / usr / bin / agetty
-rwxr-xr-x 1 root root 35968 Sep 29 05: 21 / usr / bin / login
Традиционные системы инициализации Linux конфигурируются на запуск фиксированного количества agetty при загрузке. В большинстве случаев пораждаются шесть инстансов для шести VT: от tty1 до tty6 соответственно.
В systemd используется другой подход.
● Первый — динамический . Инстанс сервиса getty@.service запускается по требованию. То есть только в том случае, если нам нужен какой-то конкретный VT. За это отвечает logind, который при переключении на ttyN запускает сервис autovt@ttyN.service , который является симлинком на getty@.service . Такая логика работает для tty2-tty6.
● Второй — статический . Конкретный инстанс сервиса getty@.service втягивается автоматически через getty.target , что даёт нам всегда запущенный getty на tty1.
Можете набрать в терминале команду systemctl cat getty@.service , чтобы получить содержимое этого сервиса. Рассматривать подробно мы его не собираемся, поскольку это для нас не столь важно.
Соответственно, если предположить, что у нас есть некий htop@.service , то и добавить его в автозагрузку можно двумя путями: либо сделать симлинк под именем autovt@ttyN.service — тогда при переключении на выбранный VT htop будет запускаться вместо getty, либо отключить getty@ttyN.service и вместо него включить htop@ttyN.service — это даёт нам всегда запущенный htop на фиксированном VT.
Пишем собственный getty-подобный юнит
Теперь переходим в /etc/systemd/system — это одна из директорий, имеющая наивысший приоритет, где располагаются юниты systemd, — и создаём собственный сервис:
$ touch htop @ .service
$ $EDITOR htop @ .service
Наличие суффикса ( @ ) означает, что стартует не сам по себе сервис, а один из его инстансов. А суффикс передаётся в него парамметром ( %i и %I ).
Выше уже было отмечено, что содержимое getty@.service для нас не столь важно. Всё так, потому что его можно занклюдить в наш сервис:
. include / usr / lib / systemd / system / getty @. service
Это избавляет нас от лишнего копирования кода, учитывая что наш сервис getty-подобный.
Секция User Переходим к секции User. Здесь описываются общие парамметры, применимые к любому типу юнита (а не конкретно к сервису).
Description = htop on % I
Documentation = man : htop ( 1 )
Здесь всё прозрачно: директива Description задаёт краткое описание юнита, а Documentation путь к документации. %I — имя инстанса. Важно заметить, что обе переменные, задающие имя инстанса, различны по значению: %I — тоже самое что и %i , но с отменённым экранированием нечитаемых символов.
Секция Service Эта секция задаёт конфигурацию конкретно сервиса. Иными словами, описывает способ запуска процесса.
Environment =
Environment = TERM = linux HOME =/ root
ExecStart =/ usr / bin / htop
StandardInput = tty — fail
StandardOutput = tty
Нужные унаследованные значения директив мы оставим в покое, а некоторые необходимо сбросить (задаём для них пустое значение) и определить самостоятельно. К таковым относятся Environment — задание переменных, и ExecStart — собственно, запуск процесса.
StandardInput = tty — fail
StandardOutput = tty
— это указание systemd запускать htop подсоединённым напрямую к терминалу.
Можно, кстати, добавить не мгновенный запуск, а с ожиданием ввода. Для этого создаём простой скрипт на баше:
echo «Press a key to launch $(basename «$1″) »
Всё что он делает — ожидает ввода и запускает параллельно какую-то программу (которой будет являться htop в нашем случае). Помещаем куда угодно, называем как угодно, делаем его исполняемым ( chmod +x ) и правим ExecStart в нашем сервисе:
ExecStart = / etc / systemd / scripts / run_wait / usr / bin / htop
Ограничиваем права Если необходимо наложить какие-либо ограничения на права, то сделать это, конечно же, нужно. Нельзя запускать приложение с правами root и давать доступ к нему кому попало.
Создаём копии нашего сервиса и скрипта к нему:
$ cd / etc / systemd
$ cp system / htop @ .service system / htop_secure @ .service
$ cp scripts / run_wait scripts / run_wait_su
И редактируем каждый из них. Для сервиса в секции Service изменяем значение Environment и задаём имя пользователя с его группой:
systemd: getty-подобный сервис для htop

2016-07-02 в 13:47, admin , рубрики: htop, linux, systemd, Настройка Linux
htop — это интерактивная программа для наблюдения за процессами; она — альтернатива программы top. Каждый, кто работает за машиной с линуксом на борту, хоть раз использовал её: будь то поиск процесса (и его последующее убийство) или тщательный мониторинг используемых ресурсов.

Для удобства это программу можно держать всегда запущенной: в отдельном окне терминала, в его вкладках или на каком-нибудь рабочем столе. Но есть ещё одно решение: запускать его на фиксированном VT, на который можно в любой момент переключиться. Преимущество такого подхода заключается в чистом окружении и независимости от иксов/терминала.
Это возможно (и правильно) сделать с помощью системы инициализации, потому что мы фактичесски хотим получить специальный getty-подобный сервис для htop.
Как запускаются VT1, . VT6?
agetty — это такая программа, которая открывает порт tty, выдаёт prompt для аутентификации и передаёт последующее управление другой программе — login .
$ which agetty login | xargs ls -l -rwxr-xr-x 1 root root 44104 Sep 29 05:21 /usr/bin/agetty -rwxr-xr-x 1 root root 35968 Sep 29 05:21 /usr/bin/login
Традиционные системы инициализации Linux конфигурируются на запуск фиксированного количества agetty при загрузке. В большинстве случаев рождаются шесть инстансов для шести VT: от tty1 до tty6 соответственно. В systemd используется другой подход.
- Первый — динамический. Инстанс сервиса getty@.service запускается по требованию. То есть только в том случае, если нам нужен какой-то конкретный VT. За это отвечает logind, который при переключении на ttyN запускает сервис autovt@ttyN.service , который является симлинком на getty@.service . Такая логика работает для tty2-tty6.
- Второй — статический. Конкретный инстанс сервиса getty@.service втягивается автоматически через getty.target , что даёт нам всегда запущенный getty на tty1.
systemctl cat getty@.service покажет содержимое этого сервиса. Рассматривать подробно мы его не собираемся, поскольку это для нас не столь важно.
Соответственно, если предположить, что у нас есть некий htop@.service , то и добавить его в автозагрузку можно двумя путями: либо сделать симлинк под именем autovt@ttyN.service — тогда при переключении на выбранный VT htop будет запускаться вместо getty, либо отключить getty@ttyN.service и вместо него включить htop@ttyN.service — это даёт нам всегда запущенный htop на фиксированном VT.
Пишем собственный getty-подобный юнит
Теперь переходим в /etc/systemd/system — одна из директорий, где располагаются юниты, — и создаём собственный сервис:
$ "$EDITOR" htop@.service
Наличие суффикса ( @ ) означает, что стартует не сам по себе сервис, а один из его инстансов. А суффикс передаётся в него парамметром ( %i и %I ).
Выше уже было отмечено, что содержимое getty@.service для нас не столь важно. Всё так, потому что его можно заинклюдить в наш сервис:
.include /usr/lib/systemd/system/getty@.service
Если учесть, что наш сервис getty-подобный, то эта конструкция избавляет нас от лишнего копирования кода.
Секция User
Здесь описываются общие парамметры, применимые к любому типу юнита.
[Unit] Description=htop on %I Documentation=man:htop(1)
Здесь всё прозрачно: директива Description задаёт краткое описание юнита, а Documentation путь к документации. %I — имя инстанса. Важно заметить, что обе переменные, задающие имя инстанса, различны по значению: %I — тоже самое, что и %i , но она не экранирует escape-последовательности.
Секция Service
Эта секция задаёт конфигурацию конкретно сервиса. Иными словами, описывает способ запуска процесса.
[Service] Environment= Environment=TERM=linux HOME=/root ExecStart= ExecStart=/usr/bin/htop StandardInput=tty-fail StandardOutput=tty
Необходимые унаследованные значения директив мы оставим в покое, а некоторые нам необходимо сбросить (задаём для них пустое значение) и определить самостоятельно. К таковым относятся Environment — задание переменных, и ExecStart , — собственно, запуск процесса.
StandardInput=tty-fail StandardOutput=tty
— это указание systemd запускать htop подсоединённым напрямую к терминалу.
Можно, кстати, добавить не мгновенный запуск, а с ожиданием ввода. Для этого создаём простой скрипт на баше:
#!/bin/bash echo "Press a key to launch $(basename "$1")" read exec "$@"
Всё что он делает — ожидает ввода и запускает какую-то программу (которой будет являться htop в нашем случае). Помещаем куда угодно, называем как угодно, делаем его исполняемым ( chmod +x ) и правим ExecStart в нашем сервисе:
ExecStart=/etc/systemd/scripts/run_wait /usr/bin/htop
Ограничиваем права
Если необходимо наложить какие-либо ограничения на права, то сделать это, конечно же, нужно.
Создаём копии нашего сервиса и скрипта к нему:
$ cd /etc/systemd $ cp system/htop@.service system/htop_secure@.service $ cp scripts/run_wait scripts/run_wait_su
И редактируем каждый из них. Для сервиса в секции Service изменяем значение Environment и задаём имя пользователя с его группой:
User=kalterfive Group=users Environment=TERM=linux
А в скрипте обращаемся к su(1) :
#!/bin/bash echo "Press a key to launch $(basename "$1")" read exec su -c "$@"
Установка сервиса
Теперь наш сервис готов, осталось только добавить его в автозагрузку:
$ systemctl daemon-reload $ systemctl disable getty@tty2.service $ systemctl enable htop@tty2.service
Первая команда обновляет менеджер конфигурации systemd, а вторая создаёт симлинк на наш сервис в getty.target.wants .
Заключение
Теперь перезагружаемся (либо вручную убиваем getty@ и включаем htop@ для инстанса tty2), переключаемся на второй VT и наблюдаем успешно запущенный htop. Продемонстрированный трюк задевает лишь малую часть systemd, как системы инициализации, от всего простора его возможностей, как универсального plumbing layer-а — набора программ для решения совершенно разных задач. Успехов!