Конфигурирование аппаратных терминалов
Категория: Последовательные устройства | Автор: admin | 12-10-2009, 02:34 | Просмотров: 3360

За последнее десятилетие рабочие станции и X-терминалы постепенно вторглись на территорию, где когда-то единолично правили бал текстовые терминалы. Но даже консольные программы на графическом дисплее используют те же драйверы и файлы конфигурации, что и реальные терминалы, поэтому системный администратор должен понимать, как они работают.

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

 

Процесс регистрации

 

В процессе регистрации задействовано несколько программ. Во время начальной загрузки запускается демон init. Одна из его задач — породить процесс, обычно getty (но не в Solaris), на каждом терминальном порте, который определяется в файле /etc/ttys или /etc/inittab (в зависимости от системы). Процесс getty устанавливает исходные характеристики порта (в частности, скорость передачи и контроль четности) и выводит на экран регистрационное приглашение.

Последовательность событий при полной регистрации следующая:

  • пользователь вводит регистрационное имя по приглашению процесса getty;

  • процесс getty запускает программу login, передавая ей в качестве аргумента указанное имя учетной записи;

  • программа login запрашивает пароль и сверяет имя и пароль пользователя с записями в файле /etc/passwd*;

  • программа login выводит на экран "сообщение дня", хранящееся в файле /etc/motd;

  • программа login устанавливает переменную среды TERM и запускает интерпретатор команд;

  • интерпретатор выполняет соответствующие файлы запуска";

  • интерпретатор выводит на экран приглашение командной строки и ожидает ввода информации.

Когда пользователь выходит из системы, управление возвращается демону init, который пробуждается и порождает новый процесс getty для порта терминала.

Файлы в каталоге /etc управляют характеристиками, связанными с каждым портом терминала. Сюда входит наличие регистрационного пригла­шения и процесса getty на порте, ожидаемая скорость передачи в бодах и тип терминала, а также многое другое.

К сожалению, подход фирм-поставщиков к вопросу конфигурирования терминалов различен. В табл. 7.6 перечислены файлы, используемые в тестовых системах.

 

Таблица 7.6. Файлы конфигурации терминалов

Система

Включение/ Выключение

Тип терминале

Параметры

Монитор

Solaris

HP-UX

Red Hat

FreeBSD

_sactab

/etc/inittab

/etc/inittab

/etc/ttys

_sactab

/etc/ttytype

/etc/ttytype

/etc/ttys

zsmon/pmtab /etc/gettydefs /etc/gettydefs /etc/gettytab

ttymon getty

getty

getty

 

Файлы /etc/ttys и /etc/ttytab

 

В системах на базе ядра 4.3BSD (и более поздних версий) информация о типе порта и терминала объединена в один файл, который называется ttytab или ttys (FreeBSD). Формат записей этого файла таков:

устройство программа тип_терммнала {on|off) [secure]

 

Поля разделяются пробелами. В поле программа указывается управляющий процесс, запускаемый демоном init, если данный порт включен. В частности, для программы getty, которая обычно упоминается в этом поле, задается аргумент, который определяет скорость передачи и конфигурацию последовательного порта.

В поле тип_терминала указывается элемент базы данных termcap или terminfo (см. ниже). Когда пользователь входит в систему, переменная среды TERM устанавливается равной значению этого поля.

С помощью ключевых слов on и off включается и отключается регистрация на данном порте (т.е. эти слова определяют, можно ли запускать программу). Если присутствует ключевое слово secure, то с такого терминала может входить в систему пользователь root. Во многих организациях вход суперпользователя в систему с терминалов, установленных в машинных залах и подключаемых через коммутируемый канал, не разрешается.

Вот несколько элементов файла /etc/ttys:

console

none

unknown

off

secure

ttyd0

"/usr/libexec/getty std.9600"

dialup

off

secure

ttydl

"/usr/libexec/getty std.9600"

dialup

off

secure

ttyd2

"/usr/libexec/getty std.9600"

dialup

off

secure

 

Аргумент команды getty содержит ссылку на элемент одного из следующих файлов: inittab, gettytab или gettydefs (в зависимости от системы).

Демон init читает файл ttys или ttytab всего один раз. Если изменяется файл конфигурации, необходимо дать демону явное указание прочесть файл повторно. Для этого ему посылается сигнал отбоя (HUP). Демон init — всегда процесс номер один, поэтому обычно подходит команда

 

# kill -1 1

 

выполняемая от имени пользователя root. Смотрите, не ошибитесь и не пропустите дефис!

 

Файл /etc/ttytype

 

В некоторых системах информация о типе терминала отделяется от файла /etc/ttys и хранится в файле /etc/ttytype. Формат его записей следующий:

 

тип_териинала устройство

 

Здесь устройство — это сокращенное имя файла устройства, соответствующего порту, а тип терминала задается так же, как он описан выше в файле /etc/ttys. Вот пример файла ttytype:

wyse console

dialup ttyi0

dialup ttyil

vt320 ttyi2

h19 ttyi3

dialout ttyi4

 

Файл /etc/gettytab

 

Файл gettytab предназначен для связывания символьных имен (таких как std.9600, использованное выше) с информацией о конфигурации порта — скоростью передачи, контролем четности и строкой регистрационного приглашения. Например:

# Стандартная запись, задающая начальные параметры

# для других записей; используется в случае, когда

# программа getty вызывается без указания записи.

default:

:ap:lm=rn%h login72 :sp#9600:

#Записи, задающие фиксированную скорость

2 |std.9600|9600-baud:

:sp#9600:

h|std.38400|38400-baud:

:sp#38400:

 

Формат здесь аналогичен формату файлов /etc/printcap и /etc/termcap. Строки с именами, разделенными вертикальной чертой, содержат имена, под которыми известна каждая конфигурация. В остальных полях задаются параметры последовательного порта.

В большинстве систем в файле gettytab уже имеются записи для различных терминалов. Описание формата, общего для всех указанных файлов, приведено в параграфе 23.3. Информацию о конкретных переменных можно почерпнуть из документации.

 

Файл /etc/inittab

 

В Solaris, HP-UX и Red Hat демон init поддерживает различные "уровни выполнения", которые определяют, какие системные ресурсы задействуются. Существует восемь уровней выполнения: от 0 до 6 плюс уровень s для однопользовательского режима. При выходе из однопользовательского режима демон init приглашает пользователя ввести номер уровня выполнения, если только в файле /etc/inittab нет поля initdefault (см. ниже). Затем демон просматривает файл inittab и ищет все строки, соответствующие указанному уровню.

Уровни выполнения обычно устанавливаются таким образом, чтобы у пользователя был один уровень, на котором доступна только системная консоль, и другой уровень, на котором доступны все терминалы. Можно определять уровни выполнения так, как того требует конкретная система, но мы рекомендуем не слишком отклоняться от значений, заданных по умолчанию.

Записи файла inittab имеют следующий формат:

идентификатор:уровни_выполнения:действие:процесс

 

Приведем пример:

: :sysinit:/etc/setclk </dev/console >/dev/console 2>&1

со:234:respawn:/etc/getty console console

ll:234:respawn:/etc/getty ttyll 9600

12:234:off:/etc/getty ttyl2 9600

В этом формате идентификатор — одно- или двухсимвольная строка, идентифицирующая данную запись. Поле идентификатора может быть пустым, как в первой строке приведенного выше примера. Для терминалов в качестве идентификатора обычно используют номер терминала.

Поле уровни выполнения — это номера уровней выполнения, к которым относится данная запись. Если уровни не заданы (как в первой строке), то запись действительна для всех уровней. В поле действие определяется, как следует трактовать поле процесс, наиболее распространенные значения приведены в табл. 7.7.

 

Таблица 7.7. Возможные значения поля действие файла /etc/inittab

Значение

Ждать?

Интерпретация

initdefault

boot

bootwait

once

wait

respawn

powerfail

powerwait

sysinit

off

Нет

Да

Нет

Да

Нет

Нет

Да

Да

Задает исходный уровень выполнения

Процесс выполняется при первом чтении файла inittab

Процесс выполняется при первом чтении файла inittab

Запускает процесс однократно

Запускает процесс однократно

Всегда поддерживает процесс в работающем состоянии

Процесс выполняется при получении демоном init сигнала сбоя питания

Процесс выполняется при получении демоном init сигнала сбоя питания

Процесс выполняется перед обращением к консоли

Завершает процесс, если он выполняется

 

Если одно из значений в поле уровни_выполнения совпадают с номером текущего уровня, а значение поля действие говорит об акатуальности записи, то демон init с помощью интерпретатора sh выполняет команду, заданную в поле процесс (или прекращает ее выполнение). В столбце «Ждать?» табл. 7.7 указано, в каких случаях демон init перед продолжением ожидает завершения команды.

В приведенном выше примере в первой строке устанавливаются системные часы, во второй и третьей строках порождаются процессы getty, а последняя строка обеспечивает отсутствие процесса getty на порте tty12.

Команда telinit -q заставляет демон init повторно прочитать файл inittab.

 

Файл /etc/gettydefs

 

Как и файл gettytab, файл gettydefs определяет различные варианты конфигурации портов, используемые процессом getty. В системе, как правило, присутствует только один из этих файлов. Файл gettydefs выглядит следующим образом:

console# B9600 HUPCL # B9600 SANE IXANY #login: #console

19200# B19200 HUPCL # B19200 SANE IXANY #login: #9600

9600# B9600 HUPCL # B9600 SANE IXANY HUPCL #login: #4800

4800# B4800 HUPCL # B4800 SANE IXANY HUPCL #login: #2400

2400# B2400 HUPCL # B2400 SANE IXANY HUPCL #login: #1200

1200# B1200 HUPCL # B1200 SANE IXANY HUPCL #login: #300

300# B300 HUPCL # B300 SANE IXANY TAB3 HUPCL #login: 9600

 

Запись этого файла имеет такой формат:

метка# начальные_флаги # конечные_флаги # приглашение #следующий

 

Процесс getty проводит сравнение своего второго аргумента с записью, идентифицируемой полем метка. Если процесс вызывается без второго аргумента, то для подобного сравнения используется первая запись файла. В поле начальные_флаги перечисляются флаги системного вызова ioctl, задающие конфигурацию порта до выполнения программы login. В поле конечные_флаги указаны флаги, которые необходимо установить после завершения программы login.

Должна существовать запись, которая задает быстродействие соединения и в начальных, и в конечных флагах. Список возможных флагов отличается в зависимости от системы; обратитесь к разделу документации, касающемуся файла gettydefs (обычно имена флагов те же, что задаются в С-программах).

Поле приглашение служит для описания регистрационного приглашения, которое может включать символы табуляции и новой строки. В поле следующий указывается метка записи файла gettydefs, которую необходимо подставить вместо текущей при получении сигнала прерывания. Это было полезно десятилетия тому назад, когда модемы не корректировали скорость передачи автоматически и нужно было согласовывать скорость вручную с помощью серии сигналов прерывания. Сегодня это анахронизм. Для аппаратного терминала поле следующий должно содержать метку текущей записи.

При каждом изменении файла gettydefs следует выполнять команду getty -с gettydefs, которая проверяет синтаксис файла на предмет правильности всех записей.

 

Конфигурирование терминалов в Solaris

 

Вместо традиционных для UNIX процессов getty, которые наблюдают за работой всех портов и выдают регистрационные приглашения, в Solaris существует запутанная иерархическая система Service Access Facility (система сервисного доступа), которая используется для управления мониторами терминалов, мониторами портов и многими другими устройствами, принося в плане функциональных возможностей мало пользы и много осложнений.

Для настройки последовательного порта на выдачу регистрационного приглашения необходимо сначала сконфигурировать "монитор", наблюдающий за статусом порта (программа ttymon). Затем нужно сконфигурировать монитор порта, который следит за статусом монитора терминала. Например, чтобы настроить монитор порта ttyb на скорость 9600 бод и вывод регистрационного приглашения на терминал типа VT100, требуется выполнить следующие команды:

sacadm -а -р myttymon -t ttymon -с /usr/lib/saf/ttymon -v 1

pmadm -a -p myttymon -s b -i root -fu -v 1 -m "’ttyadm -d

/dev/term/b -1 9600 -T vtl00 -s /usr/bin/login'"

 

Файл /etc/ttydefs служит в основном для того же, для чего в других системах используется файл gettydefs, т.е. для установки скорости передачи и контроля четности.

Более подробную информацию о настройке этих мониторов можно найти на страницах документации, посвященных утилитам saf, pacadm, pmadm, ttyadm и ttymon, а также в главе о терминалах справочника Solaris AnswerBook.

 

Поддержка терминалов: базы данных termcap и terminfo

 

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

В одних системах эта база данных называется termcap, а в других она имеет иной формат и называется terminfo. Иногда для обеспечения максимальной совместимости в системе присутствуют обе базы данных. Они обычно располагаются в каталоге /etc или /usr/share.

Такие базы данных содержат сведения о сотнях различных терминалов. Пользователю практически никогда не приходится составлять собственные описания терминалов. Тем не менее, некоторые поставщики систем настаивают, например, на переименовании терминала "xterm", поэтому может понадобиться добавить новое имя для существующей записи.

Для того чтобы определить, какая разновидность терминала используется, UNIX-программы проверяют значение переменной среды TERM. Дополнительную информацию об этом терминале можно затем найти в базе данных termcap или terminfo. Кроме того, можно поместить элемент базы данных termcap непосредственно в переменную среды TERMCAP. Как правило, установка переменных TERMCAP и TERM производится во время регистрации.

Сегодня, когда аппаратные терминалы почти не используются, лишь несколько типов терминалов представляют практический интерес. Правило гласит: "Все программы эмулируют терминал DEC VT100, если не доказано обратное".



 (голосов: 1)
Версия для печати | Комментариев: 0
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.


 
Логин
Пароль
 

 
Locations of visitors to this page