Опубликован: 24.07.2006 | Доступ: свободный | Студентов: 8871 / 1199 | Оценка: 3.95 / 3.75 | Длительность: 41:47:00
ISBN: 978-5-94157-183-3
Лекция 12:

Русификация и шрифты

Русификация консоли

Что нужно сделать

Если вы внимательно прочитали "лекцию 9" и предыдущий разделы, то представляете, что для русификации консоли (а консоль - это, грубо говоря, совокупность клавиатуры и дисплея) требуется загрузить в драйвер консоли три таблицы:

  • таблицу раскладки клавиатуры;
  • таблицу экранного шрифта (SFM), в которой хранятся изображения символов;
  • таблицу перекодировки символов (ACM).

Таблицы раскладки клавиатуры находятся в каталоге /usr/lib/kbd/keymaps/i386/qwerty. Выбор конкретного файла раскладки задается файлом /etc/sysconfig/keyboard. Этот файл можно отрегулировать вручную, а можно с помощью программы kbdconfig. В последнем случае нужная таблица с раскладкой клавиатуры загружается в память. При ручном изменении файла /etc/sysconfig/keyboard перезагрузка таблицы произойдет только после перезапуска компьютера или после выполнения команды (в примере загружается раскладка из файла ru-win.map ):

[root]# loadkeys /usr/lib/kbd/keymaps/i386/qwerty/ru-win.map

Второй шаг русификации состоит в задании и загрузке таблицы экранного шрифта (SFM) в драйвер дисплея. Эти таблицы хранятся в виде файлов в каталоге /usr/lib/kbd/consolefonts. Загрузка шрифтов осуществляется немного по-разному в пакетах kbd и consoletools (соответственно, в версиях 5.2 и 6.x Red Hat Linux). В версии 5.2 загрузка шрифта осуществлялась с помощью команды setfont. Например, чтобы загрузить кодовую страницу из файла Cyr_a8x16, нужно дать команду

[root]# setfont /usr/lib/kbd/consolefonts/Cyr_a8x16

В версии 6.0 и последующих надо использовать команду consolechars с опцией -f:

[root]# consolechars -f /usr/lib/kbd/consolefonts/Cyr_a8x16

(Отметим, что команда setfont тоже сработает, только выдаст предупреждение о том, что надо пользоваться командой consolechars.)

Файлы шрифтов являются бинарными файлами размером 256*H байт, содержащими битовые образы для каждого из 256 символов, по одному байту на каждую линию образа и по H байт на символ (0 < H <= 32). В этом случае о размере шрифта по вертикали можно судить по длине файла. В качестве файлов шрифтов могут использоваться файлы .psf ; они имеют тот же самый формат и, кроме того, заголовок размером 4 байта. Некоторые файлы шрифтов содержат сразу три шрифта разного размера (например, 8х8, 8х14, 8х16), тогда в команде consolechars надо добавить опцию -H, например: -H 16, для выбора одного из размеров. Поскольку ядро Linux не поддерживает пока переключение режимов работы экрана, consolechars (как и setfont ) не может изменить текущий режим EGA/VGA. Таким образом, пользователь полностью ответственен за выбор шрифта, соответствующего текущему режиму экрана.

Соответствие между символами кода ASCII и образами (или изображениями символов) из файла шрифта можно изменить, используя таблицу перекодировки (ACM - Application Charset Map). Если эту таблицу не загрузить, то, например, в программе Midnight Commander вы можете вместо красивых рамочек увидеть столбцы и строки из непонятных символов. Некоторые файлы шрифтов включают таблицу перекодировки шрифта, и тогда consolechars загрузит эту таблицу. По умолчанию файлы шрифтов находятся в каталоге /usr/lib/kbd/consolefonts, а таблицы перекодировки - в каталоге /usr/lib/kbd/consoletrans.

Таблицу перекодировки в 6-ой версии Red Hat (т. е. в пакете consoletools ) можно загрузить отдельной командой consolechars с опцией -m file:

[root]# consolechars -m /usr/lib/kbd/consoletrans/koi2alt

Если таблица перекодировки не включена в файл шрифта и не указана в опции -m, то используется "тривиальная" таблица.

В версии 5.2 для загрузки таблицы перекодировки используется команда mapscrn:

[root]# mapscrn /usr/lib/kbd/consoletrans/koi2alt

В этом случае драйвер консоли должен быть дополнительно переведен в режим перекодировки, задаваемый таблицей, путем вывода на консоль специальной escape-последовательности. Эта последовательность есть <esc>(K для набора символов G0 (G0 character set) и <esc>)K для набора символов G1 (G1 character set). Заметим, что активизировать эту таблицу необходимо в каждой консоли. При этом команда loadkeys действует одновременно во всех виртуальных консолях, а вот команда mapscrn действует только в той виртуальной консоли, в которой выполнена команда echo -ne '\033(K'.

Замечание:

Esc(K требуется, когда загружается альтернативная кодировка и активизируется таблица перекодировки псевдографики командой mapscrn koi2alt. Если шрифт koi-8, то никаких Esc(K не надо.

Замечание:

Все это не действует из-под Midnight Commander!

Существует еще таблица перекодировки для символов UNICODE. Некоторые файлы шрифтов включают эту таблицу, и она будет загружена командой consolechars, если только не задана опция --force-no-sfm. Отдельно загрузить таблицу перекодировки символов Unicode можно командой consolechars с опцией -u (см. руководство man ).

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

  • для версии 5.2 Red Hat:
    loadkeys /usr/lib/kbd/keytables/i386/qwerty/ru.map
    setfont /usr/lib/kbd/consolefonts/Cyr_a8x16
    mapscrn /usr/lib/kbd/consoletrans/koi2alt
    echo -ne '\033(K'
  • для версии 6.0 Red Hat (и последующих):
    loadkeys /usr/lib/kbd/keytables/i386/qwerty/ru.map
    consolechars -f /usr/lib/kbd/consolefonts/Cyr_a8x16
    consolechars -m /usr/lib/kbd/consoletrans/koi2alt

Но выполнять эту последовательность команд после каждого перезапуска компьютера, да еще в каждой виртуальной консоли, слишком обременительно. Поэтому рассмотрим вкратце, как русификация выполняется в дистрибутиве Black Cat Linux.

Владислав Гермак
Владислав Гермак

Приглашения оболочки

Одна из очень важных переменных имеет имя PS1. Эта переменная задает вид приглашения, которое bash выводит, когда ожидает ввода очередной команды пользователем. По умолчанию этой переменной присвоено значение "\s-\v\$ ".

"\s-\v\$ ". -значиние /v замените /u