BASH Programming - Введение

       

Консольный драйвер Linux


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

Чтобы настроить консоль, вы можете воспользоваться одним из двух описанных ниже пакетов:

(См. раздел ) или

(См. раздел ).

В ранних версиях Linux альтернативы kbd

не было, но в свежих дистрибутивах вместо kbd сейчас можно использовать пакет consoletools. Этот пакет кардинально отличается от своего предшественника -- пакета kbd (например, в нем нет команды setfont -- для совместимости используется эмулирующий скрипт).

Чтобы проверить, какой из двух пакетов присутствует в вашей системе, следует попробовать выполнить команду consolechars. Если она успешно выполнилась -- тогда у вас есть пакет console-tools; если же нет -- у вас скорее всего имеется команда setfont и значит, установлен пакет kbd.

Вам будет полезно знать общую схему работы консольного драйвера. Когда некоторая пользовательская программа запрашивает консольный драйвер вывести на экран символ, имеющий код А, то консольный драйвер сначала ищет код А в таблице ACM (Application Charset Map). Из таблицы он узнает, какой код Б согласно кодировки Unicode соответствует коду А. Вы определяете используемую вами кодировку посредством таблицы ACM. Далее консольный драйвер ищет код Б в таблице SFM Screen Font Map. Таблица SFM определяет кодировку используемого шрифта подобно тому как ACM определяет вашу кодировку. От SFM консольный драйвер узнает, какой символ активного шрифта имеет код Б согласно Unicode и нужно вывести на экран.

Существуют две важные модификации этой схемы.

Аппаратные ограничения современных компьютеров не позволяют использовать шрифты, имеющие более 512 символов. Отсюда очевидно, что иногда консольный драйвер не сможет найти код Б в SFM. Тогда ему на помощь приходит так называемая fallback таблица. Эта таблица определяет для кода Б возможные его аппроксимации Б1, Б2,... Например, если Б является код символа "левая двойная угловая кавычка", то возможно Б1 будет кодом символа "левая одинарная угловая кавычка", а Б2 будет просто кодом символа "<". Другим часто используемым применением fallback таблицы является аппроксимация псевдографических символов посредством других. Например, если используемый шрифт не имеет псевдографических символов, и вы заставите консольный драйвер использовать таблицу graph.fallback, то он начнет чертить окна подобно следующей картинке:


+==================. | Главное меню | +------------------+ | 1. текст | | 2. графика | .==================.
На экране это выглядит не так уж и плохо.
Второй важной модификацией общей схемы работы консольного драйвера является режим Unicode. Описанная выше схема относится к 8ми битовому режиму работы драйвера. Когда же он находится в режиме Unicode, то он ожидает, что пользовательские программы используют Unicode и ожидает получать от них коды символов согласно Unicode. Поэтому в этом режиме ACM не используется. Вы всегда можете переключать консольный драйвер из 8ми битового режима в Unicode и обратно посредством команд unicode_start и unicode_stop.
Возможно, у вас появился следующий вопрос: а зачем нужна вся эта сложная процедура? Что, если я буду использовать шрифты, имеющие используемую мной кодировку? Это возможно, но возникают некоторые осложнения. Вам нужно сказать программам, что псевдографические символы в шрифте уже находятся на других местах. И даже если вы ухитритесь сделать это посредством специального терминального типа (как например linux-koi8r), то появится вторая (уже неразрешимая) проблема -- из-за аппаратных свойств VGA, горизонтальная псевдографика получится с разрывами, если символы псевдографики в шрифте не расположены на тех же позициях, что и в кодировке cp437 (расположение псевдографики в cp866 идентично cp437). Поэтому рекомендуется использовать шрифты, имеющие кодировку на основе cp437
(cp866).
Прежде чем приступить к делу, разберемся с 8-битовым режимом. Не всегда консольный драйвер Linux умел работать с Unicode. Конечно, тогда не существовали также и ACM, и SFM. Вместо них использовалась 8-битовая экранная таблица перекодировки (screen map). Это была просто таблица для перевода от одной кодировки (используемой программой) в другую (кодировку шрифта). Например, koi2alt.trans
переводит коды KOI8-R в коды cp866. Для совместимости теперь 8-битовый screen map эмулируется с помощью специальной таблицы ACM.
Установка кириллицы с помощью пакетов console-tools и kbd


обычно состоит из:
  • Настройки экранного шрифта и SFM. Это делается с помощью программы consolechars (пакет console-tools) или setfont и mapscrn (пакет kbd).

  • Настройки ACM (или 8-битовой экранной таблицы перекодировки) и fallback-таблицы .

  • Загрузки соответствующей раскладки клавиатуры с помощью программы loadkeys.

  • Большинство дистрибутивов позволяет устанавливать кириллицу по умолчанию во время загрузки.
    Файлы шрифтов обычно находятся в каталогах /usr/share/consolefonts или /usr/lib/kbd/consolefonts, таблицы ACM, SFM и fallback в /usr/share/consoletrans, клавиатурные раскладки в /usr/share/keymap/i386/qwerty.
    Ниже описано, как установить русскую клавиатурную раскладку. Здесь не используется SFM и fallback таблиц, а вместо ACM используется 8-битовая экранная таблица перекодировки. Это делается в основном из-за того, что у имеющихся в kbd и console-tools шрифтов для cp866 нет таблиц SFM. Если вы хотите воспользоваться всеми возможностями консольного драйвера Linux и радоваться хорошим шрифтам, то используйте пакет Виктора Вагнера.

    Содержание раздела