Skip to main content

Текстовые терминалы на Linux - 14.1 Getty (используется в / etc / inittab)

Команды терминала Linux. Урок 2. Чтение текстовых файлов (Июнь 2026)

Команды терминала Linux. Урок 2. Чтение текстовых файлов (Июнь 2026)
Anonim

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

Введение в Getty

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

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

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

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

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

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

  • mingetty
  • fbgetty
  • fgetty
  • rungetty

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

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

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

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

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

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

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

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

* Текстовый терминал How-To Index

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

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

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

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

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

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

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

S1: 23: respawn: / sbin / getty -L 19200 ttyS1 vt102

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

Автоматическое обнаружение ошибок четности Agetty

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

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

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

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

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

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

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

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

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

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

getty (часть getty_ps)

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

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

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

тень = да

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

Убедитесь, что нет другого Гетти или же uugetty config для последовательного порта, к которому подключен ваш терминал, например (/etc/default/{uu}getty.ttySN или же /etc/conf.{uu}getty.ttySN), так как это, вероятно, будет мешать Гетти на терминале. Удалите такие конфликтующие файлы, если они завершатся.

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

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

Mgetty

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

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

Вот пример простой строки, которую вы ввели / И т.д. / inittab: