The Linux Cyrillic HOWTO: Настройка вашего окружения

Next Previous Contents

## 3. Настройка вашего окружения

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

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

## 3.1 Настройка текстовой моды

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

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

### Linux консоль

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

Пакет kbd содержит утилиты управления клавиатурой, кроме этого с ним поставляется широкий выбор шрифтов и раскладок.

Установка кириллицы с помощью `kbd` обычно состоит из:

1. Загрузки соответствующей раскладки клавиатуры, с помощью программы `loadkeys`. Redhat позволяет установить раскладку клавиатуры, которую система загружает по умолчанию во время загрузки. Это конфигурируется с помощью программы `/usr/sbin/kbdconfig`. Или вы просто можете запустить `loadkeys` из вашего `~/.profile` или сделав это руками.
2. Настройки экранного шрифта. Это делается с помощью программы `setfont`. Файлы шрифтов находятся в `/usr/lib/kbd/consolefonts`. ВНИМАНИЕ: В старых версиях Linux, запуск программы `setfont` под X Windows мог завесить систему. Сейчас в этом случае печатается сообщение об ошибке.

Если вы являетесь приверженцем программ, выполняемых в текстовой моде, и использующих достоинства PC псевдо - графики (таких как Midnight Commander), вы можите предпочесть использовать шрифты с `Alt` кодировкой и консольной раскладкой (console character map). Это означает, что ваша консоль отображает Alt шрифты, но все кириллические символы, соответствующие KOI-8R кодировки соответственным образом отображаются в `Alt` и поэтому отображаются правильно. Преимущество этого метода заключается в том, что он позволяет использовать псевдографические символы `Alt` кодировки.

Короче, ниже перечислены команды, которые позволяют достичь этого эффекта.

    loadkeys /usr/lib/kbd/keytables/ru.map
    setfont /usr/lib/kbd/consolefonts/Cyr_a8x16
    mapscrn /usr/lib/kbd/consoletrans/koi2alt
    echo -ne "\033(K"              # магическая последовательность

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

Магическая последовательность необходима для перекодировки вывода символов на экран если вы используете Alt шрифты. Она работает и вам не следует знать о ней что-то большее. Однако, если вам любопытно, то посмотрите в документацию к пакету kbd.

В заключение, для тех эстетов, кто не желает использовать Alt кодировку, я предлагаю другую версию описанной выше загрузочной последовательности, использующей родные KOI8-R шрифты.

    loadkeys /usr/lib/kbd/keytables/ru.map
    setfont /usr/lib/kbd/consolefonts/koi8-8x16

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

Теперь вы, вероятно, хотите проверить это. Сконфигурируйте соответствующим образом bash или tcsh (смотрите ниже этот шаг необходим), перегрузите его, затем нажмите правую клавишу `Control`. Удостоверитесь, что вы можите печатать на русском правильно. Клавиша '`q`' должна соответствовать "`й`", '`w`' соответствует "`ц`", и т.д.

Если у вас возникли непредвиденные проблемы, то лучше всего вернуться к родной (то есть US) раскладке. Для этого сделайте следующие телодвижения:

    loadkeys /usr/lib/kbd/keytables/defkeymap.map
    setfont /usr/lib/kbd/consolefonts/default8x16

ВНИМАНИЕ: к сожалению, консольный драйвер не способен сохранить это состояние (по крайней мере без излишних ухищрений), когда передается управление X Windows. Следовательно, после того, как вы вышли из X (или переключаетесь на консоль), то вы должны перезагрузить русский шрифт.

## 3.2 X Window

Подобно консольному режиму, X Windows также требует некоторой настройки. Настройка включает в себя настройку ввода и установку шрифтов для X Windows. Данные действия обсуждаются ниже.

### Шрифты для X Windows.

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

В конце 1995 года X Window включила набор KOI8-R шрифтов разработанных KOI8-R fonts, created by Cronyx. Эти шрифты являются также частью XFree86.

Несмотря на это, некоторые дистрибутивы не включают кириллические шрифты для X Windows в стандартную поставку. Одним из подобных печальных примеров является RedHat (они обещали больше так не делать и исправить это в RedHat 5.2).

Поэтому, вам следует проверить установлены ли эти шрифты в вашей системе. Спросите системного администратора, или, если вы- это он и есть, проверьте вашу систему сами, а именно:

1. Выполните '`xlsfonts | grep koi8`'. Если в результате выполнения команды появится список шрифтов, то ваш X сервер уже знает об их существовании.
2. Или, наберите

       find / -name crox\*.pcf\*

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

Если вы не нашли таких шрифтов в вашей системе, то вы должны установить их сами.

Кроме описанного выше существует еще один набор кириллических шрифтов Cronyx в сети (по адресу ftp.kiae.su), известный, как пакет `xrus` (не путать это с программой `xruskb`, ранее известной как `xrus`. `Xrus` имеет меньший набор шрифтов чем в коллекции Xfree86 (38 против 68).

Имеется также более старое решение, например пакет `vakufonts` созданный Сергеем Вакуленко, который стал основой для пакета включенного в дистрибутив X Windows. Очень важно, что имена шрифтов в старой коллекции не совпадают со стандартом полностью. `Vakufonts`, в общем, неплохой пакет, но иногда могут возникать различные сверхъестественные ошибки. Например, у меня были проблемы с Maple V для Linux, который падал по непонятным причинам с пакетом `vakufonts`, но прекрасно работал со "стандартными" набором.

Итак, давайте начнем со шрифтов:

1. Вытащите по ftp соответствующий набор шрифтов. Пакет для XFree86 можно найти на любом FTP архиве, где лежит дистрибутив X Windows, например, непосредственно на официальном XFree86 FTP архиве. Пользователи Redhat, у которых отсутствует этот пакет могут заглянуть на ftp.redhat.com, чтобы вытянуть пакет `XFree86-cyrillic-fonts`. Установить его и сразу перейти к разделу, где объясняется как сделать местоположение шрифтов известным X Windows.
2. Теперь, когда у вас есть шрифты, создайте директорию для них. Поместить новые шрифты в уже существующий каталог шрифтов, мягко говоря, не очень хорошая идея. Поместите их, например, в `/usr/lib/X11/fonts/cyrillic` для настройки всей системы, или просто создайте каталог у себя только для персонального пользования.
3. Если новые шрифты поставляются в формате BDF (`*.bdf` файлы), то вы должны скомпилировать их. Для каждого шрифта выполните:

       bdftopcf -o <font>.pcf <font>.bdf

   Если ваш X сервер поддерживает сжатые шрифты, то сожмите их с помощью программы `compress` (для последних версий XFree86 можно сжать шрифты с помощью программы `gzip`):

       compress *.pcf (или gzip *.pcf)

   Если же вы все-таки хотите поместить новые шрифты в уже существующий каталог шрифтов, то вы должны "срастить" старый и новые файлы, с именем `fonts.alias` в том случае, естественно, если они оба существуют.
4. В каждом каталоге шрифтов для X должен быть список шрифтов, находящихся в нем. Этот список хранится в файле `fonts.dir`. Вы не должны создавать этот список вручную. Вместо этого, сделайте:

       cd <new font directory>
       mkfontdir .

5. Теперь Вы должны сделать этот каталог шрифтов известным для X сервера. Здесь у вас есть ряд возможностей:
   - Общесистемная настройка для XFree86. Если вы используете эту версию X Windows, то добавьте новый каталог к списку каталогов в файле `XF86Config`. Чтобы найти его расположение, просмотрите что скажет `startx` при запуске (В Redhat этот файл обычно находится в /etc/X11). Более подробно смотрите `man XF86Config` (4/5).
   - Общесистемная настройка через `xinit`. Добавьте новый каталог к файлу запуска `xinit`. Более подробно смотрите `xinit(1x)`.
   - Персональная настройка. У вас есть специальный файл для запуска X Windows - `~/.xinitrc` (или `~/.Xclients`, или `~/.xsession` для пользователей RedHat). Добавьте следующие команды в этот файл:

       xset +fp <новый каталог шрифтов>
       xset fp rehash

   Обратите внимание, на опцию '`+fp`'- это означает, что новые шрифты будут добавлены в начале списка директорий со шрифтами. То есть, если прикладная программа запрашивает, скажем, шрифт `fixed`, то будет подставлен fixed font с кириллическими символами , чего мы и добивались. Хотя имеются некоторые проблемы. В дистрибутиве шрифтов кириллицы нет полужирного и курсивного `fixed` шрифта. Мой любимый шрифт - `6x13`, а так, как полужирные и курсивные шрифты этого размера также отсутствуют, то я не могу использовать Emacs/XEmacs в полной мере. Надеюсь, что кто - то в конечном счете создаст эти шрифты, и ситуация изменится.
6. А теперь перезапустите ваш X Windows. Если вы все сделали правильно, то тесты, описанные в начале раздела, будут пройдены успешно. Также, поиграйтесь с `xfontsel(1x)`, чтобы удостовериться что вы способны выбрать шрифты кириллицы.

Чтобы заставить X клиента использовать шрифты Кириллицы, Вы должны установить соответствующие X ресурс. Например, я делаю кириллический шрифт заданным по умолчанию в моем `~/.Xdefaults`:

    *font:         6x13

Так как мои шрифты кириллицы первые в списке поиска шрифтов (смотри вывод программы '`xset q`'), то они и подставляются если программа требует какой-либо шрифт с именем, совпадающем с каким-либо из шрифтов, лежащих в кириллической директории.

Вот простые примеры. Если Вы хотите научить соответствующий X клиент пользоваться кириллическим шрифтом , то вы должны узнать тип ресурса , который вам надо изменить (можно это сделать используя `editres(1x)`) и определить его или в базе данных ресурсов, или в командной строке. Например можно сделать так:

    $ xterm -font '-cronyx-*-bold-*-*-*-19-*-*-*-*-*-*-*'

...запусти xterm с несколько уродливым шрифтом;

    $ xfontsel -xrm '*quitButton.font: -*-times-*-*-*-*-13-*-*-*-*-*-koi8-*'

...установит Cyrillic Times шрифт для кнопки `Quit` программы `xfontsel`.

### Использование шрифтов TrueType

У технологии TrueType, взятой на вооружение операционными системами серии Windows (он же Mastdie :)), нет многих недостатков, которые присутствуют при работе со шрифтами стандартным образом у X. Кроме того существует множество кириллических TrueType шрифтов.

К счастью, эти шрифты можно использовать и в X Windows. Существует TrueType сервер шрифтов XFSFT для X (говорят, что в скором времени поддержка TrueType будет включена в дистрибутив XFree86).

Установочная процедура довольно проста - просто, делайте то, что сказано в документации. Следует отметить одну вещь, имеющую отношение к кириллической настройке, это то, что вам следует использовать опцию перекодировки:

    xfstt ... --encoding koi8-r,windows-1251,iso8859-1

После этого, новые шрифты будут доступны для X Windows - этот факт вы можете проверить, запустив `xfontsel` и поиграв с ttf семейством шрифтов.

### Ввод с клавиатуры

В последних выпусках X (X11R61 и выше) имеются два "стандартных" способа ввода с клавиатуры: родной способ, работающий через утилиту `xmodmap`, и новый, называемый Xkb (X KeyBoard). Первое, что вы должны сделать, это отключить Xkb способ!. Не давайте себя загипнотизировать его способностью устанавливать "russian keyboard". Этот способ, вроде бы, использует описание символов кириллицы определенных в `keysymdef.h`. Этот файл определяет символы для многих языков. Единственная проблема состоит в том, что данное определения не позволяют, работать с расширенной ASCII кодовой страницей - очень много программ могут работать только с этой раскладкой! Я почти не знаю программ, которые разбираются с описанием символов в `keysymdef.h` отличным от стандартного 8ми битного ASCII. Однако, наша главная цель состоит в том, чтобы заставить работать поддержку KOI8-R. (Примечание переводчика: здесь автор немного погорячился - Xkb вполне рабочий способ, правда способность работать с KOI8-R он обнаружил только в последних версия XFree86. Пользователям Redhat следует взять версию XFree86-3.3.3-1.)

Чтобы отключить поддержку `Xkb`, в файле `XF86Config` изучите раздел `Keyboard` и закоментируйте, все строки, начинающиеся с Xkb (регистр не имеет значения). Взамен, добавьте следующую строку:

    XkbDisable

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

В предыдущих версиях этого документа я очень подробно описывал настройку кириллицы основанную на `xmodmap`. Это оказалось практически бесполезным. Общеизвестно, что способ перекодировка ввода, основанный на `xmodmap`, является, не-портабельным, плохо настраиваемым, и не окончательным. Ваши настройки могут работать с одной версией XFree и сбоить при работе с другой. Более того, иногда результат работы одной и той же настройки сильно разнится для различных серверов из одного дистрибутива.

Я настоятельно советую вам не играть с `xmodmap`, по крайней мере для начала. Вы не получите ничего кроме головной боли и разочарования. Вместо этого, я рекомендую вам установить пакет xruskb, который позволяет вам сконфигурировать большинство входных параметров перекодировки без необходимости сталкиваться с `xmodmap`. Опять же пользователи Redhat Linux могут установить RPM пакет этого програмного продукта.

## 3.3 Первые шаги - кириллизация shell

### bash

Для того, чтобы заставить bash понять 8ми битные символы, должны быть установлены три переменные. Лучше всего это сделать из файл `~/.inputrc`. Должны быть сделаны следующие установки:

    set meta-flag on
    set convert-meta off
    set output-meta on

### csh/tcsh

Поместите в `.cshrc` следующее:

    setenv LC_CTYPE iso_8859_5
    stty pass8

Если у вас нет POSIX совместимого stty (только не в Linux), замените последнюю строчку следующей:

    stty -istrip cs8

### ksh

Что касается public domain реализации `ksh` - `pdksh` версии 5.1.3 и выше, то вы можете разрешить 8ми разрядный ввод только для `vi` в режиме ввода. Для этого используйте:

    set -o vi

### less

Установите переменную окружения `LESSCHARSET`:

    export LESSCHARSET=koi8-r

Старые версии `less` не поддерживали символы KOI8-R, но установка следующей системной переменной позволяла это обойти:

    export LESSCHARSET=latin1

### mc (The Midnight Commander)

Чтобы разобрать текст кириллицы , выберите опцию `full 8 bits` в `Options/Display` меню.

Если у вас проблемы в виде уродливых оконных рамок, то проконсультируйтесь в разделе Linux консоль.

off-topic: если вы захотите чтобы `mc` в окне `Xterm` был в цвете: установите переменную `COLORTERM`:

    COLORTERM= ; export COLORTERM

### rlogin

Удостоверитесь, что shell на месте адресата правильно установлена. Если ваш `rlogin` не работает как надо по умолчанию, то используйте '`rlogin -8`'.

### zsh

Сделайте то же самое, что делается для `csh` ( csh). Файл инициализации в этом случае - `.zshrc` или `/etc/zshrc`.

Next Previous Contents