What is getty linux

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.

Contents

Installation

This article or section needs language, wiki syntax or style improvements. See Help:Style for reference.

agetty is the default getty in Arch Linux, as part of the util-linux package. It 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. 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 .

  • mingetty — A minimal getty which allows automatic logins.

mingettyAUR || mingettyAUR

  • fbgetty — A console getty like mingetty, which supports framebuffers.

http://projects.meuh.org/fbgetty/ || fbgettyAUR

  • mgetty — A versatile program to handle all aspects of a modem under Unix.

http://mgetty.greenie.net/ || mgettyAUR

Add additional virtual consoles

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 you wish to start one temporarily, you can start a getty service at the desired TTY by typing:

Automatic login to virtual console

Configuration relies on systemd 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.

Virtual console

Create a drop-in snippet for getty@tty1.service with the following contents:

If you do not want full automatic login, but also do not want to type your username, you can replace —autologin username with —skip-login —login-options username .

If you want to use a tty other than tty1, see systemd FAQ.

Serial console

Create the following file (and leading directories):

Nspawn console

To configure auto-login for a systemd-nspawn container, override console-getty.service :

If machinectl login my-container method is used to access the container, also add —autologin username to container-getty@.service template that manages pts/9 pseudo ttys:

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 :

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 /etc/systemd/system/getty@tty1.service.d/noclear.conf :

This overrides only TTYVTDisallocate for agetty on TTY1, and leaves the global service file /usr/lib/systemd/system/getty@.service untouched. See Systemd#Editing provided units.

Источник

What is getty linux

agetty has several non-standard features that are useful for hard-wired and for dial-in lines: o Adapts the tty settings to parity bits and to erase, kill, end-of-line and uppercase characters when it reads a login name. The program can handle 7-bit characters with even, odd, none or space parity, and 8-bit characters with no parity. The following special characters are recognized: @ and Control-U (kill); #, DEL and back space (erase); carriage return and line feed (end of line). o Optionally deduces the baud rate from the CONNECT messages produced by Hayes(tm)-compatible modems. o Optionally does not hang up when it is given an already opened line (useful for call-back applications). o Optionally does not display the contents of the /etc/issue file. o Optionally displays an alternative issue file instead of /etc/issue . o Optionally does not ask for a login name. o Optionally invokes a non-standard login program instead of /bin/login . o Optionally turns on hard-ware flow control o Optionally forces the line to be local with no need for carrier detect.

This program does not use the /etc/gettydefs (System V) or /etc/gettytab (SunOS 4) files.

ARGUMENTS

Under System V, a «-» port argument should be preceded by a «—«. baud_rate. A comma-separated list of one or more baud rates. Each time agetty receives a BREAK character it advances through the list, which is treated as if it were circular.

Baud rates should be specified in descending order, so that the null character (Ctrl-@) can also be used for baud rate switching. term The value to be used for the TERM environment variable. This overrides whatever init(8) may have set, and is inherited by login and the shell.

OPTIONS

-l login_program Invoke the specified login_program instead of /bin/login. This allows the use of a non-standard login program (for example, one that asks for a dial-up password or that uses a different password file). -H login_host Write the specified login_host into the utmp file. (Normally, no login host is given, since agetty is used for local hardwired connections and consoles. However, this option can be useful for identifying terminal concentrators and the like. -m Try to extract the baud rate the CONNECT status message produced by Hayes(tm)-compatible modems. These status messages are of the form: » «. agetty assumes that the modem emits its status message at the same speed as specified with (the first) baud_rate value on the command line.

Читайте также:  Эмулятор raspberry pi для linux

Since the -m feature may fail on heavily-loaded systems, you still should enable BREAK processing by enumerating all expected baud rates on the command line. -n Do not prompt the user for a login name. This can be used in connection with -l option to invoke a non-standard login process such as a BBS system. Note that with the -n option, agetty gets no input from user who logs in and therefore won’t be able to figure out parity, character size, and newline processing of the connection. It defaults to space parity, 7 bit characters, and ASCII CR (13) end-of-line character. Beware that the program that agetty starts (usually /bin/login) is run as root. -t timeout Terminate if no user name could be read within timeout seconds. This option should probably not be used with hard-wired lines. -L Force the line to be a local line with no need for carrier detect. This can be useful when you have a locally attached terminal where the serial line does not set the carrier detect signal. -w Wait for the user or the modem to send a carriage-return or a linefeed character before sending the /etc/issue (or other) file and the login prompt. Very useful in connection with the -I option.

EXAMPLES

For a hard-wired line or a console tty:
/sbin/agetty 9600 ttyS1

For a directly connected terminal without proper carriage detect wiring: (try this if your terminal just sleeps instead of giving you a password: prompt.)
/sbin/agetty -L 9600 ttyS1 vt100

For a old style dial-in line with a 9600/2400/1200 baud modem:
/sbin/agetty -mt60 ttyS1 9600,2400,1200

For a Hayes modem with a fixed 115200 bps interface to the machine: (the example init string turns off modem echo and result codes, makes modem/computer DCD track modem/modem DCD, makes a DTR drop cause a dis-connection and turn on auto-answer after 1 ring.)
/sbin/agetty -w -I ‘ATE0Q1&D2&C1S0=1\015’ 115200 ttyS1

ISSUE ESCAPES

b Insert the baudrate of the current line. d Insert the current date. s Insert the system name, the name of the operating system. l Insert the name of the current tty line. m Insert the architecture identifier of the machine, eg. i486 n Insert the nodename of the machine, also known as the hostname. o Insert the NIS domainname of the machine. O Insert the DNS domainname of the machine. r Insert the release number of the OS, eg. 1.1.9. t Insert the current time. u Insert the number of current users logged in. U Insert the string «1 user» or » users» where is the number of current users logged in. v Insert the version of the OS, eg. the build-date etc. Example: On my system, the following /etc/issue file:

FILES

The text in the /etc/issue file (or other) and the login prompt are always output with 7-bit characters and space parity.

The baud-rate detection feature (the -m option) requires that the modem emits its status message after raising the DCD line.

Источник

Текстовые терминалы в Linux

14.1 Getty (используется в/etc/inittab)

Введение в Getty

Чтобы запустить процесс входа в систему через последовательный порт (и подключенный к нему терминал) при запуске компьютера (или переключении уровней запуска), в файл/etc/inittab должна быть вставлена ​​команда getty. Запуск getty из командной строки может вызвать проблемы (см. Если getty запускается из командной строки: программы останавливаются, чтобы понять почему). Getty получает TTY (терминал) собирается. Каждому терминалу нужна своя команда getty. В каждом файле/etc/inittab также есть хотя бы одна команда getty для консоли. Найдите это и поместите команды getty для реальных терминалов рядом с ним. Этот файл может содержать примеры строк getty для текстовых терминалов, которые закомментированы, поэтому все, что вам нужно сделать, это раскомментировать их (удалить начальный #) и изменить несколько аргументов.

Допустимые аргументы зависят от того, какой getty вы используете:
Для getts с прямым подключением лучше всего подходят два:

  • agetty (иногда его называют getty): очень легко настроить. Нет конфигурационных файлов. Смотри agetty
  • getty (часть getty_ps)

Два gettys лучше всего подходят для коммутируемых модемов (избегайте для напрямую подключенных терминалов):

  • mgetty: лучший для модемов; работает и для терминалов, но уступает
  • uugetty: только для модемов; часть пакета getty_ps

Простые gettys для использования, если вы не используете настоящий текстовый терминал. Большинство пользователей Linux используют один из них на своем мониторе:

Ваш дистрибутив Linux может поставляться с ps_getty или agetty для текстовых терминалов. Некоторые дистрибутивы не предоставляют ни того, ни другого. К сожалению, они часто просто называют его «getty», поэтому вам может понадобиться определить, какой из них у вас есть, так как аргументы, которые вы указали после него в/etc/inittab, отличаются. Debian использует agetty (в пакете util-linux). RedHat и Fedora использовали ps_getty, который находится по адресу: ps_getty

В качестве последнего средства, чтобы попытаться определить, какой у вас getty, вы можете проверить его исполняемый код (обычно в/sbin). ps_getty имеет/etc/gettydefs, встроенный в этот код. Чтобы найти его, перейдите в/sbin и введите:
strings getty | grep getty
Если getty на самом деле agetty, то приведенное выше ничего не даст. Однако, если вы наберете agetty:
getty -h
должны отобразить опции [-hiLmw].

Читайте также:  Как связаться со службой поддержки windows

Если у вас нет нужного вам getty, проверьте другие дистрибутивы и программу alien для конвертации пакетов RPM и Debian. Исходный код может быть загружен с Getty Software.

Если вы не используете линии управления модемом (например, если вы используете только минимальное количество из 3 проводников: передача, прием и общая сигнальная земля), вы должны сообщить об этом getty, используя флаг «local». Формат этого зависит от того, какой getty вы используете.

Getty выходит после входа в систему (и может возродиться)

После входа в систему вы заметите (используя «top», «ps -ax» или «ptree»), что процесс getty больше не выполняется. Что с ним случилось? Почему getty перезапускается снова, если ваша оболочка убита? Вот почему

После того как вы введете свое имя пользователя, getty берет его и вызывает программу входа в систему, сообщая вам ваше имя пользователя. Процесс getty заменяется процессом входа в систему. Процесс входа запрашивает ваш пароль, проверяет его и запускает любой процесс, указанный в вашем файле паролей. Этот процесс часто является оболочкой bash. Если это так, bash запускается и заменяет процесс входа в систему. Обратите внимание, что один процесс заменяет другой, и что процесс оболочки bash изначально запускался как процесс getty. Последствия этого будут объяснены ниже.

Теперь в файле/etc/inittab getty должен возродиться (перезапуститься), если его убили. Так говорится в строке, которая вызывает getty. Но если оболочка bash (или процесс входа в систему) убита, getty респаунится (перезапускается). Зачем? Ну, и процесс входа в систему и bash являются заменой для getty и наследовать

* Указатель с текстовым терминалом

сигнальные соединения устанавливаются их предшественниками. Фактически, если вы наблюдаете детали, вы заметите, что процесс замены будет иметь тот же идентификатор процесса, что и исходный процесс. Таким образом, bash является замаскированным видом с тем же идентификатором процесса. Если bash убит, это как если бы getty был убит (хотя getty больше не работает). Это приводит к возрождению getty.

При выходе из системы все процессы на этом последовательном порте уничтожаются, включая оболочку bash. Это также может произойти (если включено), если сигнал зависания отправляется на последовательный порт при падении напряжения DCD модемом. Выйти или выйти из DCD приведет к возрождению getty. Можно заставить getty возродиться, вручную убив bash (или войдя в систему), либо нажав клавишу k и т. Д., Находясь в «top» или с помощью команды «kill». Скорее всего, вам придется убить его с помощью сигнала 9 (который нельзя игнорировать).

Если getty запускается из командной строки: программы останавливаются

Обычно вы должны запускать getty из /etc/inittab , а не из командной строки, иначе некоторые программы, запущенные на терминале, могут быть неожиданно приостановлены (остановлены). Вот почему (перейдите к следующему разделу, если почему не важно для вас). Если вы запустите getty, скажем, для ttyS1 из командной строки другого терминала, скажем, tty1, то у него будет tty1 в качестве «управляющего терминала», хотя фактическим терминалом, на котором он работает, является ttyS1. Таким образом, он имеет неправильный управляющий терминал. Но если он запускается внутри файла inittab, то в качестве управляющего терминала он будет иметь ttyS1 (правильно).

Несмотря на то, что управляющий терминал неверен, вход в ttyS1 работает нормально (поскольку вы указали ttyS1 в качестве аргумента для getty). Стандартный вход и выход устанавливаются на ttyS1, хотя управляющий терминал остается на tty11. Другие программы, запущенные на ttyS1, могут наследовать этот стандартный ввод/вывод (который подключен к ttyS1), и все в порядке. Но некоторые программы могут ошибаться, пытаясь прочитать данные со своего управляющего терминала (tty1), что неправильно. Теперь tty1 может подумать, что эти программы выполняются в фоновом режиме с помощью tty1, поэтому попытка чтения из tty1 (это должно было быть ttyS1) приводит к остановке процесса, который пытался прочитать. (Фоновый процесс не может читать с управляющего терминала.). На экране может появиться сообщение наподобие « [1] + Остановлено ». В этот момент вы застряли, поскольку не можете взаимодействовать с процессом, который пытается связаться с вами через неправильный терминал. Конечно, чтобы уйти от этого, вы можете перейти к другому терминалу и убить процесс и т. Д.

agetty (может быть назван getty)

Пример строки в/etc/inittab:

S1 от ttyS1. 23 означает, что getty запускается при входе на уровни запуска 2 или 3. respawn означает, что если getty (или процесс, который заменил его, такой как bash) будет убит, getty автоматически запустится (респаун) снова./sbin/getty – это команда getty. -L означает Локальный (игнорировать сигналы управления модемом). -h (не показано в этом примере) включает аппаратное управление потоком (аналогично stty crtscts). 19200 – это скорость передачи данных. ttyS1 означает/dev/ttyS1 (COM2 в MS-DOS). vt102 – это тип терминала, и этот getty установит для переменной среды TERM это значение. Там нет файлов конфигурации. Введите “init q” в командной строке после редактирования getty, и вы должны увидеть приглашение для входа в систему.

Автоопределение проблем паритета в Agetty

Программа agetty попытается автоматически определить четность, установленную внутри терминала (в том числе без четности). Он не поддерживает 8-битные байты данных плюс 1-битная четность. Смотрите 8-битные байты данных (плюс четность). Если вы используете stty для установки четности, agetty автоматически сбросит его, так как изначально он хочет, чтобы бит четности проходил так, как если бы это был бит данных. Это потому, что ему нужно получить последний бит (возможно, бит четности) при вводе имени входа, чтобы он мог автоматически определять четность. Таким образом, если вы используете паритет, включите его только внутри текстового терминала и дайте agetty автоматически обнаружить его и установить на компьютере. Если ваш терминал поддерживает полученную четность, запрос на вход в систему будет выглядеть искаженным, пока вы не введете что-то, чтобы getty могла обнаружить

Читайте также:  Собрать ядро линукс для новичков

четности. Неправильная подсказка удержит посетителей и т. Д. От попыток войти в систему. Это может быть именно то, что вы хотите.

Иногда возникает проблема с автоматическим определением четности. Это происходит потому, что после того, как вы сначала ввели свое имя для входа, agetty запускает программу входа, чтобы завершить вход в систему. К сожалению, программа входа в систему не может определить четность, поэтому, если программе getty не удалось определить четность, то логин не сможет определить это тоже. Если первая попытка входа в систему не удалась, вход в систему позволит вам повторить попытку и т. Д. (Все с неправильной четностью). В конце концов, после нескольких неудачных попыток входа в систему (или после истечения времени ожидания) agetty снова запустится и начнёт повторять последовательности входа снова. После того, как getty снова запустится, он сможет определить паритет со второй попытки, поэтому все может работать нормально.

При неправильной четности программа входа не может правильно прочитать введенный вами текст, и вы не можете войти в систему. Если ваш терминал поддерживает полученную четность, вы по-прежнему будете видеть искаженный экран. Если getty не может определить четность, файл/etc/issue обычно выводится на экран непосредственно перед запросом, поэтому на экране могут появиться более искаженные слова.

Почему agetty не может определить четность по первой напечатанной букве? Вот пример: предположим, что он обнаруживает 8-битный байт со своим битом четности 0 (бит старшего разряда) и с нечетным числом 1-бит. Что это за соотношение? Ну, нечетное число 1 бит означает, что это нечетная четность.Но это также может быть 8-битный символ без четности. Пока нет способа определить, какой именно. Но пока мы исключили возможность даже паритета. Таким образом, обнаружение паритета происходит в процессе устранения.

Если следующий набранный байт аналогичен первому, а также исключает возможность четности, определить четность все равно невозможно. Эта ситуация может продолжаться бесконечно, и в редких случаях вход в систему будет невозможен, пока вы не измените свое имя для входа. Если agetty находит бит четности 1, он будет считать, что это бит четности, а не старший бит 8-битного символа. Таким образом, предполагается, что вы не используете метасимволы (набор старших битов) в своем имени пользователя (то есть, что ваше имя находится в ASCII).

Попасть в «цикл входа в систему» ​​можно разными способами. Предположим, вы вводите только одну или две буквы для своего имени для входа, а затем нажимаете клавишу возврата. Если этих букв недостаточно для определения четности, то вход в систему выполняется до обнаружения четности. Иногда эта проблема возникает, если терминал не включен и/или не подключен при первом запуске agetty.

Если вы застряли в этом «цикле входа в систему», выходом из этого является несколько раз нажать клавишу возврата, пока вы не получите приглашение входа в систему getty. Другой способ – просто подождать минуту или около того для тайм-аута. Затем программа getty выведет на экран приглашение для входа в систему getty, и вы можете попытаться снова войти в систему.

8-битные байты данных (плюс четность)

К сожалению, agetty не может обнаружить это соотношение. По состоянию на конец 1999 года он не имеет возможности отключить автоматическое определение четности и, таким образом, обнаружит неправильную четность. В результате процесс входа в систему будет искажен, а четность будет установлена ​​неправильно. Таким образом, кажется невозможным использовать 8-битные байты данных с четностью.

getty (часть getty_ps)

(В основном это из старого Serial-HOWTO Грега Ханкинса).
Для этого getty нужно как поместить записи в файл конфигурации, так и добавить запись в/etc/inittab. Вот несколько примеров записей для вашего терминала, которые вы поместили в файл конфигурации/etc/gettydefs.

Обратите внимание, что DT38400, DT19200 и т. Д. Являются просто метками и должны совпадать с тем, что вы используете в/etc/inittab.

Если вы хотите, вы можете сделать getty print интересными вещами в баннере входа. В моих примерах у меня напечатаны имя системы и серийная строка. Вы можете добавить другие вещи: [blockquote

Когда вы закончите редактирование/etc/gettydefs, вы можете проверить правильность синтаксиса, выполнив:

Убедитесь, что нет другого конфигурационного файла getty или uugetty для последовательного порта, к которому подключен ваш терминал, например (/etc/default/ndomuu‹getty.ttySN или /etc/conf.ndomuu broadcastgetty.ttySN), так как это, вероятно, помешает запуску getty на терминале. Удалите такие конфликтующие файлы, если они выходят.

Отредактируйте ваш файл/etc/inittab, чтобы он запускал getty на последовательном порту (подставляя правильную информацию для вашей среды – порт, скорость и тип терминала по умолчанию):

На этом этапе вы должны увидеть приглашение для входа в систему на своем терминале. Возможно, вам придется нажать кнопку возврата, чтобы привлечь внимание терминала.

Mgetty

«М» обозначает модем. Эта программа в основном предназначена для модемов, и с середины 2000 года потребуется перекомпилировать ее, чтобы использовать ее для текстовых терминалов (если только вы не используете аппаратное управление потоком данных, а для этого обычно требуется кабель ручной работы). Документация по непосредственно подключенным терминалам приведена в разделе «Direct» руководства: mgetty.texi.

Посмотрите на последние строки /etc/mgetty/mgetty.config для примера настройки его для терминала. Если вы не скажете «toggle-dtr no», вам будет казаться, что у вас есть модем, и вы сбросите (отмените) вывод DTR на ПК в тщетной попытке перезагрузить несуществующий модем. В отличие от других gettys, mgetty не будет подключаться к терминалу, пока кто-нибудь не нажмет какой-либо ключ этого терминала, так что вы увидите? для терминала в верхней или PS, пока это не произойдет. Журналы в/var/log/mgetty/могут содержать несколько предупреждающих сообщений, которые применимы только к модемам, которые вы можете игнорировать.

Вот пример простой строки, которую вы помещаете в/etc/inittab:

Источник

Оцените статью