Next Previous Contents

13. terminfo и termcap (подробно)

13.1 Введение

terminfo (прежде termcap) - база данных возможностей терминала и больше того. Для каждой (ну, почти) модели терминала он сообщает прикладным программам, что может выполнять терминал. Он сообщает то, какие escape-последовательности (или управляющие символы) посылать терминалу, чтобы делать вещи типа перемещения курсор в новое положение, стирания части экрана, пролистывания экрана, смены режима, изменения вида изображения (цветность, яркость, мигание, подчеркивание, негативное изображение и т.д.). После 1980 года многие терминалы стали поддерживать более сотни таких команд.

13.2 База данных terminfo

База данных terminfo компилируется и таким образом имеет исходную часть и скомпилированную часть. Старая база данных termcap имеет только исходную часть, но этот источник может быть и преобразован в источник terminfo, и затем скомпилирован одной командой. Чтобы увидеть, есть ли ваш терминал (скажем, vt100) в базы данных terminfo, напечатайте "locate vt100 ". Это команда может выдать /usr/lib/terminfo/v/vt100 или /usr/share/terminfo/v/vt100, которые являются возможными расположениями скомпилированных файлов terminfo. Некоторые старые программы могут ожидать, что они будут находитсья в каталоге /etc/terminfo.

Исходный текст, который вы используете, может постоянно находиться в /etc/termcap и/или в terminfo.src. См. man-страницы: terminfo (5) или termcap (5), в которых описан формат, требуемый для создания (или изменения) этих файлов. Файл terminfo.src может быть расположен в других мастах, или вовсе может не быть включен в ваш дистриьутив linux. Чтобы попробовать найти его, используйте команду locate. Можно скачать из Интернет (под именем termtypes.ti) из locke.ccil.org/~esr/terminfo

Компилятор terminfo(tic)

Данные в исходных файлах компилируются программой "tic", которая может преобразовывать формат termcap в/из формат terminfo.

Таким образом вы можете создавать скомпилированную базу данных terminfo из исходного текста termcap.

Программа установки, которая использовалась для установки Linux, вероятно установила скомпилированные файлы на ваш жесткий диск, так что вы не должны компилировать что-либо, если не изменяете /etc/termcap (или terminfo.src).

"tic" автоматически установит возникающие в результате компиляции файлы в каталог terminfo, готовые для использования прикладными программами.

Рассмотрим ваш terminfo

Это хорошая идея - рассмотреть вашу запись termcap/terminfo (исходный текст конечно) и прочитать комментарии. Быстрый способ посмотреть его без комментариев - только напечатайте "infocmp". Но комментарии могут сообщить вам нечто особое о терминале типа того, как вы должны установить его, чтобы он правильно работал с базой данных terminfo.

Удаление ненужных данных

Чтобы сохранять дисковое пространство, можно удалить всю базу данных, кроме типов терминалов, которые у вас есть. Не удаляйте ничего из Linux termcap или xterm, если вы используете X-Window. Терминал типа "dumb" используется когда прикладная программа не может выяснять какой терминал вы используете. Если бы программы установки устанавливали terminfo только для терминалов, которые вы имеете, и если бы вы могли бы получать termcap для недавно установленного терминала за доли секунд из Интернет, то это сберегло бы дисковое пространство вашего жесткого диска.

13.3 Инициализация

Часто в terminfo включены пара строк инициализации, которые могут быть посланы терминалу для его инициализации. Он могут изменять вид экрана, изменять режим, в коором работает терминал и/или заставить терминал эмулировать другой терминал. Строки инициализации автоматически не отсылаются терминалу, чтобы проинициализировать его.

Чтобы сделать это, вы должны использовать команду, вводимую в командной строке (или в скрипте оболочки) типа: "tset", "tput init" или "setterm -initialize". Иногда ненужно посылать init-строку, так как терминал может устанавливать сам себя правильно, когда включаяется (используя опции/парметры, которые установлены и сохранены в энергонезависимой памяти терминала).

13.4 Переменная TERM

Переменная окружения TERM должна быть установлена по типу терминала, который вы используете. Обычно она устанавливается параметром terminal_type, переданным программе getty (посмотрите это в файле /etc/inittab

Это имя должно быть в базе данных terminfo. Только напечатайте "set" в командной строке, чтобы видеть, какой значение присвоено TERM (или напечатайте: tset -q). В консоли (мониторе) TERM установлен в "linux", который является монитором PC, подражающим модели несуществующего терминала по имени "linux". Так как "linux" близок к терминалу vt100, а также ко многим другим текстовым терминалам, то обозначение "linux" будет иногда работать как временное с текстовым терминалом.

Если на один и тот же порт могут быть подсоединено более одного типа терминала (/dev/tty ...) (например, если имеется переключатель, разрешающий использовать различные типы терминалов на одном и том же самом последовательном порту, или если порт соединен с модемом, на который звонят люди с различных типов терминалов), тогда TERM нужно устанавливать каждый раз, когда кто-то соединяется с последовательным портом. Часто имеется escape-последовательность запроса такая, чтобы компьютер мог запрашивать у терминала его тип. Другой способ состоит в том, чтобы попросить пользователя напечатать (или выбрать) тип своего терминала.

Возможно для этого действия вам понадобиться использовать tset в коротком скрипте shell.

Один способ сделать это состоит в том, чтобы использовать "tset" (см. man). Tset пробует определить имя терминала, который вы используете. Затем он ищет данные в terminfo и посылает вашему терминалу init строку.

Также можно устанавливать значение TERM. Например, пользователь звонит и и регистрируется в системе. Выполняется скрипт регистрации в системе .profile, который содержит внутри себя следующее выражение: eval `tset -s? Vt100`. Это приводит к следующему: пользователя спрашивают, использует ли он(а) vt100. Пользователь или отвечает да или печатает имя фактически используемого терминала. Затем tset посылает init строку и устанавливает TERM в это имя (тип) терминала.

13.5 Termcap документы


Next Previous Contents
Используются технологии uCoz