Часть настроек физического терминала сохраняется в энергонезависимой памяти и устанавливается при его включении. Кроме того, или как вариант, терминал можно конфигурировать посылкой escape-последовательностей на него из компьютера, но эти настройки обычно будут теряться при выключении терминала. Так что, если вы знаете, как устанавливать и сохранять конфигурацию внутри терминала, это вероятно самый лучший способ.
Другая часть установки позволяет компьютеру узнать какой терминал вы подсоединили к нему и как терминал был установлен. Переменная среды TERM содержит имя терминала и по этому имени программы ищут возможности терминала в каталоге terminfo. См. ``Terminfo и Termcap (коротко)''.
Программы, называемые "stty" и "setserial", конфигурируют последовательный порт компьютера (включая программное обеспечение драйверов его устройств). Эти программы (если необходимо) должны выполняться при каждом запуске компьютера, так как настройки теряются при выключении компьютера.
Имеется очень много опций, которые вы можете выбрать. Некоторые опции касаются только терминала и не должны устанавливатья в компьютере.
Например: вы хотите видеть черные символы на свелом фоне? (Это легче для глаз, чем черный фон.) Клавиша должна повторять (при удержании ее нажатой) ввод символов? Экран должен переносить слова, когда строка доходит до правого края экрана?
Опции "интерфейса связи" должны быть установлены одинаково и на компьютере, и на терминале: скорость обмена, контроль по четности, биты/символ и управление потоком данных. Если они не совместимы, то удовлетворительная последовательная связь не будет установлена (или даже вообще связи между терминалом и компьютером не будет).
Нужно установить вручную на каждом терминале (или используя некоторый вид специальных кассет на каждом терминале). Главный компьютер конфигурируется добавлением команд в некоторые файлы на жестком диске, которые выполняются при каждом запуске компьютера (или когда люди входят в систему).
Хотя все это может показаться чрезмерно сложным, заставить терминал работать зачастую довольно просто. Раздел ``Быстрая установка" описывает простой путь настройки терминала. Но чтобы дисплей показывал картинку получше и был более производительным, может быть придется выполнить большее количество работы.
Как только коммуникационный интерфейс установлен, остальная часть настройки терминалов может иногда производиться отправкой команд на терминал с компьютера. Если у вас много терминалов, то вероятно лучше было бы написать (или поместить) скрипт shell, который будет делать это автоматически. Это может (или не может) быть команда, коорую вы можете посылать терминалу, чтоб он сохранил текущую установку в энергонезависимой памяти так, чтобы она восстановилась при следующем включении терминала.
Если у вас есть руководство по вашему терминалу, то вам нужно также проконсультироваться с ним.
Вы можете посылать команды настройки терминала, используя программы "tput" и "setterm". См. ``Изменение установок терминала". вы могли бы только посылать на терминал строку инициализации из записи terminfo, если хотите таким способом инициализировать терминал. Если вы не планируете посылать такие последовательности с компьютера на терминал каждом раз при включении терминала, то вы должны так или иначе сохранить установки в энергонезависимой памяти терминала.
Чтобы установить терминал, вы обычно должны ввести его в режим установки, нажав клавишу "установка" (или подобную). Появится меню, из которого вы можете выйти в другие меню. По мере перемещения по меню на дисплей могут (или не могут) выведиться другие меню. Посмотрите на клавиатуре метки над верхней строкой цифровых клавиш. Если они существуют, эти метки могут показывать, что эти клавиши делают в режиме установки. Старые терминалы могут иметь только одно меню "установки". Еще более старые имеют физические переключатели. В некоторых случаях не все переключатели хорошо помечены. Они могут даже быть DIP переключателями, скрытыми в разных местах безо всяких пометок.
Если ваш терминал настривается не переключателями, то ваша установка должна быть сохранена в энергонезависимой памяти терминала так, чтобы она задействовалась при следующем включении терминала. Если вы не сможете сохранить ее, то новая установка будет потеряна при выключении терминала.
Прежде, чем вы перейдете к проблеме установки терминала, удостоверьтесь, что знаете, как сохранять установки. Для некоторых старых терминалах, только в руководстве написано, как их сохранить.
(Конечно вы можете делать это с любого рабочего терминала, соединенного с компьютером.)
Чтобы установить компьютер для обслуживания терминалов надо подредактировать различные файлы.
К счастью, на компьютере надо изменить только один файл: /etc/inittab. Добавьте новую команду(ы) getty в этот файл рядом с существующими командой(ами) getty. getty запустит процесс регистрации в системе на последовательном порту(ах) по вашему выбору и сообщит компьютеру какой тип терминала вы имеете через переменную среды TERM (см. Serial-HOWTO 4.1 & 7.2 и/или напечатайте "man getty").
Если вы не используете управляющие линии модема (например, если вы используете только минимальное число 3 проводников: передающий, приемный и землю), то вы должны сообщить об этом getty, используя флажок "local".
Формат его зависит от типа getty, который вы используете.
Для установки последовательных портов имеется и команда "stty", и команда "setserial". Некоторые (или все) необходимые stty установки могут быть выполнены через getty и потребности использовать setserial может не возникнуть, так что вам эти команды могут и не понадобиться. Эти две команды (stty и setserial) устанавливают различные аспекты последовательного порта. stty делает больше, в то время как setserial работает на более низком уровне типа адресов порта и прерываний. Чтобы "сохранить" установки, эти команды должны написаны в некоторых файлах (скриптах shell), которые выполняются при каждом запуске компьютера. вы можете также использовать команды stty и setserial в командной строке, но такие установки будут потеряны при выключении компьютера.
Setserial может изменять и номер прерывания (IRQ), и адрес порта. Он может сообщить вам, какие у вас имеются чипы UART. Может установить продолжительность работы порта после его закрытия (для того чтобы вывести оставшиеся в его буферах символы в основное ОЗУ). Это необходимо на медленных скоростях 1200 или ниже. Чтобы setserial работал, должен быть загружен модуль serial (для ядра Linux). Если вы используете больше чем 2 последовательных порта, вы должны использовать setserial, чтобы назначить уникальный адрес IRQ.
Чтобы изменить (или добавить) команду setserial, редактируют скрипт оболочки, который запускает setserial. Где он находится, зависит от вашего дистрибутива. Он может быть в /etc/rc.d в файле "rc.local" или "rc.serial". В Debian дистрибутиве это был файл 0setserial в /etc/rc.boot, но в конечном счете он должен измениться на файл в /etc/init.d .
Stty производит большинство настроек последовательного порта. Чтобы посмотреть, как сейчас настроен терминала (или консоль), введите в командной строке: stty -a. Для других терминалов (типа ttyS1) напечатайте: stty -a </dev/ttyS1. Вот некоторые пункты настроек stty: скорость (в бит в сек), контроль по четности, биты/байт, число стоповых битов, обрезать 8-ой бит?, сигналы управления модемом, управление потоком данных, сигнал прерывания, маркеры конца строки, изменение регистра букв, дополнение, подача звукового сигнала при переполнении буфера, ECHO, позволить фоновым задачам писать на терминал?, определите специальные (управляющие) символы (например, по нажатию какой клавиши будет происходить прерывание). См. для подробностей руководство (напечатайте: man stty). Для использования некоторых специальных символов см. ``Специальные (управляющие) символы"
В некоторых реализациях getty, команды, которые обычно можно было бы давать от stty, помещаются в файл конфигурации getty: /etc/gettydefs. Даже без этого файла конфигурации, строки с командами getty может быть достаточно, чтобы настроить все, что нужно и не нуждаться в stty.
Можно написать программы C, которые изменяют конфигурацию stty, и т.д.
Просмотр соответствующей документации может быть полезен для лучшего понимания использования команды stty (и содержит список возможных параметров). Полезно почитать Serial-Programming-HOWTO. man termios содержит описание структуры языка C (типа termios), который сохраняет настройку stty в компьютерной памяти. Многие из названий флагов в этой структуре языка C - почти те же самые (и делают те же самые вещи), что и параметры команды stty.
Чтобы stty устанавливала терминал каждый раз при запуске компьютера, вы должны поместить команду stty в файл, который выполняется при каждом запуске компьютера (загрузке Linux). Этот файл должен быть выполнен перед запуском getty. Имеются много таких файлов. Если команда помещается в более, чем одно место, и вы знаете (или помните) только одно из тех мест, то вероятен конфликт. Так что обратитесь к документу (возможно руководству вашего терминала), где это написано.
Хорошее место для помещения этой команды - тот же самый файл, который запускает setserial, когда система загружается. См. ``Откуда запускать setserial?". Казалось бы самое лучшее поместить его после команды setserial так, чтобы операции низкого уровня выполнялись первыми. В дистрибутиве Debian имеется скрипт /etc/init.d/bootmisc.sh, но в настоящее время он выполняется прежде 0setserial. Примерная строка: stty crtscts < /dev/ttyS1.
См. ``terminfo и termcap (подробно)" для более детального обсуждения termcap. Многие прикладные программы, которые вы выполняете используют базу данных terminfo (прежде termcap). Она имеет записи для каждой модели или типа (вроде vt100) терминала и сообщает, что терминал может делать, какие коды посылать для выполнения различных действий, и какие коды послать терминалу, чтобы проинициализировать его.
Так как многие терминалы (и PC также) могут эмулировать другие терминалы и имеют различные "режимы" операций, то может иметься несколько записей terminfo, которые можно выбрать для данного физического терминала. Они обычно будут иметь похожие названия. Последний параметр getty должен быть именем терминала terminfo (или эмулятора терминала), который вы используете (такой как vt100).
terminfo - выполняет больше, чем только определяет то, что способен делать терминал и какие коды послать терминалу, чтобы заставить его что-то сделать. Он также определяет, на что будет походить "полужирный" текст, вид курсора, будут ли символы черными, белыми или некоторого другого цвета и т.д. В терминологии PC они называются "параметрами". Они также определяют коды инициализации, которые посылаются терминалу (аналогично init строкам модемов). Если вам не нравится как выглядит изображение на экране, вы можете отредактировать (и затем устанавливать) файл terminfo (или termcap).
Эти установки:
Она должна быть установлена одинаково и на терминале, и на компьютере. Скорость - биты в секунду (бит/сек или скорость в бодах). Скорость 9,600 - часто достаточно быстра, но если более быстрая скорость более эффективна и не приводит к ошибкам, используйте ее.
На терминале можно установить две скорости: передачи и приема, иногда обозначаемые T и R. Обычно они оба установлены одинаковыми.
Обычные скорости - 300, 600, 1200, 2400, 4800, 9600, 19200, ... Старые терминалы могут даже иметь быстродействие 2, чтобы иметь совместимость с телетайпами 1920- ых, которые формировали последовательности байтов механическими средствами без электроники.
Для определения см. ``Контроль по четности, объясненный". Контроль по четности часто запрещен по умолчанию. Чтобы разрешить контроль по четности, вы должны и разрешить его, и выбирать проверку на четность или на нечетность. Вероятно, неважно ккую проверку вы выберете. Для терминалов иногда настраивают проверку на четность и для передачи, и для получения. вы должны установить обе эти проверки одинаковыми, так как stty в компьютере не разрешает устанавливать их по-другому.
Должны ли вы использовать контроль по четности? Хотя в действительности контроль по четности не необходим, его неплохо бы включить. Если вы отключили контроль по четности, то вы можете получить неправильные символы в нескольких местах, и начнете исправляьт орфографические ошибки, которых на самом деле нет. Однако контроль по четности требует затрат. Во-первых, его несколько сложнее установить, так как значения по умолчанию обычно отключают контроль по четности. Во-вторых, контроль по четности замедлит быстродействие, с которым байты пересылаются по кабелю, так как на каждый байт добавляется еще один бит. Возможно, что эффективное быстродействие замедлится.
Например, функции физических терминалов обычно ограничиваются механическим печатанием текста. Увеличение скорости передачи приводит лишь к появлению большего количества сигналов останова, чтобы уровнять скорость передачи со скоростью механической печати. Из-за этого нет большой разницы в передачи с контролем по четности и без таковой. Такая ситуация типична для большинства терминалов.
Одна возможность состоит в установке терминала без контроля по четности. Далее, если замечаются ошибки контроля по четности, то контроль можно вкдючить. Чтобы определить возможные ошибки при отстутсвии контроля по четности, поищите любые орфографические ошибки, которых вы не делали. Если вы найдете такую ошибку, обновите экран (повторно передайте его из компьютера). Если ошибка исчезнет, то это вероятно ошибка контроля по четности. Если появляется слишком много таких ошибок (больше одной на куждую сотню экранов), тогда нужны корректирующие действия типа: разрешить контроль по четности и/или уменьшить быстродействие и/или использовать кабель покороче/получше.
Разрешение контроля по четности не уменьшит число ошибок, но сообщит вам, что ошибка произошла.
Противоположная стратегия состоит в первоначальном разрешениии контроля по четности. Далее, если ошибок контроля по четности (ошибочные символы на экране) не замечено (за приемлемый период времени, скажем, за месяц или два), то контроль можно безопасно заблокировать.
Это - размер символа (число информационных разрядов на символ).
Для ASCII это - 7 бит, но ISO использует 8 битов. Если вы собираетесь использовать только символы ASCII, то выберите 7-бит, так как быстрее передать 7 битов, чем 8. Некоторые старые терминалы отображают только 7-разрядные символы.
Выбор осуществляется между "аппаратным" (например rts/cts + dtr/dsr) и "программным" (Xon/Xoff) управлением потоком данных. Хотя аппаратное управление может быть быстрее (если в кабеле есть два дополнительных провода для этого и если терминал поддерживает этот тип управления), в большинстве случаев Xon/Xoff тоже должен хорошо работать. Некоторые люди сообщают, что они решили какие-то проблемы, используя аппаратное управление потоком данных, но программное управление потоком данных прекрасно работает в других инсталляциях (и у меня лично).
Если вы используете программное (Xon/Xoff) управление потоком данных и имеете пользователей, которые не знают об этом, то они могут случайно послать Xoff главной ЭВМ и заблокировать свой терминал. Пока он заблокирован, они могут пытаться тщетно разблокировать его, нажимая клавиши. Затем, когда будет послан Xon для восстановления связи, все, что печаталось при этих попытках начинает выполненяться, возможно с непредвиденными результатами. При аппаратном управлений потоком данных такого не происходит. См. ``Управление потоком данных" для объяснения принципов управления потоком данных.
Файл конфигурации /etc/ttytype используется для отображения устройств /dev/ttySn на имена терминалов в terminfo. tset использует его, но если переменная среды TERM уже установлена правильно, то этот файл не нужен. Так как Linux getty устанавливает TERM для каждого tty, то вы не нуждаетесь в этом файле. В других Unix-подобных системах типа FreeBSD, файл /etc/ttys отображает tty в несколько большее, типа соответствия команды getty и категории соединения (такие как "dialup"). Пример строки Linux ttytype: vt220 ttyS1
По умолчанию, root не может входить в систему с терминала. Чтобы разрешить ему это, вы должны создать (или отредактировать) файл /etc/securetty по man-странице "securetty". Чтобы ограничить вход в систему некоторым пользователям и/или некоторым терминалам и т.п. редактируют /etc/login.access (он заменяет старый /etc/usertty файл??). /etc/login.def определяет, должен ли использоваться /etc/securetty и его можно отредактировать так, что /etc/securetty станет ненужным (или не используемым). /etc/porttime задает временные промежутки, в которые некоторые tty и пользователи могут использовать компьютер. Если фиксируются слишком много неудачных попыток входа в систему каким-либо пользователем, то этому пользователю в следующий раз может быть запрещен вход в систему. На man-странице "faillog" изложена информация по управлению этим процессом.
Иногда команды нужно выполнять только для некоторых типов терминалов. Сделать это для команды stty несложно, так как она использует оператор переадресации потока < , чтобы определить, для которого терминала выдана команда. Но как быть с псевдонимами или функциями оболочки? вы можете захотеть сделать функцию для команды ls, так чтобы она выдавала распечатку каталогов в цвете только на цветных терминалах или консолях. Для одноцветных терминалов вы хотите использовать функцию с тем же самым именем (но с другим телом функции), которая использует символы как замену цветовым кодам. Где помещать такие определения функций, которые должны быть различными для различных терминалов?
Вы можете поместить их внутри конструкции "if" в файле /etc/profile, который выполняется каждый раз при входе пользователя в систему. Условное выражение "if" определяет некоторые функции и т.д. только в том случае, если терминал имеет определенный тип. Вот пример работы с dircolors :
if [ $TERM = linux ];
then eval `dircolors`;
elif [ $TERM = vt220 ];
then ls () { command ls -F $* } declare -xf ls
else echo "From /etc/profile: Unknown terminal type $TERM"
fi