Назад Вернуться к оглавлению. Далее

8. Русификация ОС (продолжение)

8.4. Русификация системы X Window
   8.4.x. Использование шрифтов TrueType
8.5. Поддержка русского в конкретных программах
8.6. Кириллизация печати

8.4. Русификация X Windows

8.4.1. Раскладка клавиатуры для X Windows.

Так же как и в текстовом режиме, в графическом режиме русификация определяется таблицей раскладки клавиатуры и файлами фонтов. Таблица раскладки клавиатуры для графического режима загружается программой xmodmap и может быть выведена по команде xmodmap -pk. Если Вы сравните эту таблицу с таблицей для текстового режима из файла /usr/lib/kbd/keytables/i386/qwerty/ru1.kmap, то можете обнаружить некоторые различия. В частности, если Вы меняли клавишу, по которой производится переключение с русского на латинский в текстовом режиме, как это было предложено в конце раздела 8.1, то увидите, что такие изменения, проведенные в текстовом режиме, не изменяют клавиш, используемых для переключения рус/лат в графическом режиме.

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

Кириллизация X Window также предусматривает установку шрифтов в кодировке KOI8-R и переключателя клавиатуры. Прежде всего вы должны установить шрифты. Опять же, возможно, что необходимые шрифты у Вас были установлены при инсталляции системы. Проверить это  можно, дав команду
    xlsfonts | grep koi8
в окне терминала (то есть находясь в графическом режиме; в текстовом режиме это делается несколько сложнее, потому что надо задавать дополнительные параметры команды xlsfonts). Если в результате выполнения команды появится список шрифтов, то значит кириллические шрифты уже установлены в Вашей системе и X сервер знает об их существовании.
Если Вы не нашли таких шрифтов в вашей системе, то должны установить их сами.
Для этого нужно сделать следующее.
  1. Скачайте пакет шрифтов для XFree86 по FTP. Такой пакет можно найти на любом FTP архиве, где лежит дистрибутив X Windows, например, непосредственно на официальном XFree86 FTP архиве.  Установка проходит проще, если шрифты упакованы в rpm-пакет. Два таких пакета можно найти на на сервере isd.donin.com:
    первый пакет шрифтов
    второй пакет шрифтов.
     Шрифты содержатся в двух дополнительных rpm-пакетах (так сложилось исторически, потому что пакеты взяты из разных источников).
  1. Если Вы скачали обычный архив со шрифтами, то создайте каталог для новых шрифтов. Поместить новые шрифты в уже существующий каталог шрифтов, мягко говоря, не очень хорошая идея. Поместите их, например, в  /usr/lib/X11/fonts/cyrillic. Если новые шрифты получены в формате BDF (*.bdf файлы), то вы должны скомпилировать их. Для каждого шрифта выполните:
    bdftopcf -o <font>.pcf <font>.bdf
    Если ваш X сервер поддерживает сжатые шрифты, то сожмите их с помощью программы compress (для последних версий XFree86 можно сжать шрифты с помощью программы gzip):
    compress *.pcf (или gzip *.pcf)
    Если же вы все-таки хотите поместить новые шрифты в уже существующий каталог шрифтов, то вы должны "срастить" старый и новые файлы, с именем fonts.alias в том случае, естественно, если они оба существуют.
     
  2. Если Вы скачали rpm-пакет с фонтами, то достаточно дать команду
        rpm -i <имя_rpm_пакета>
    Поскольку rpm устанавливает файлы в заранее предопределенные каталоги, фонты окажутся в нужных каталогах.
     
  3. В каждом каталоге шрифтов для X должен быть список шрифтов, находящихся в нем. Этот список хранится в файле fonts.dir. Вы не должны создавать этот список вручную. Вместо этого, сделайте:
    cd <new font directory>
    mkfontdir .
  4. Теперь Вы должны сделать этот каталог шрифтов известным для X сервера. Здесь у вас есть ряд возможностей:
      Общесистемная настройка для XFree86. Если вы используете эту версию X Windows, то добавьте новый каталог к списку каталогов в файле XF86Config. Чтобы найти его расположение, просмотрите что скажет startx при запуске (В Redhat этот файл обычно находится в /etc/X11). Более подробно смотрите man XF86Config (4/5).
      Обычно файл XF86Config создается программой Xconfigurator. Вы можете скачать измененный Xconfigurator , который создает файл XF86Config, в котором пути к кириллическим шрифтам уже прописаны.

      Если у Вас старый XF86Config, нужные пути необходимо прописать руками:

         FontPath    "/usr/X11R6/lib/X11/fonts/koi8/"
         FontPath    "/usr/X11R6/lib/X11/fonts/cyrillic/"
       

    • Общесистемная настройка через xinit. Добавьте новый каталог к файлу запуска xinit. Более подробно смотрите xinit(1x).
    • Персональная настройка. У вас есть специальный файл для запуска X Windows - ~/.xinitrc (или ~/.Xclients, или ~/.xsession для пользователей RedHat). Добавьте следующие команды в этот файл:
    xset +fp <новый каталог шрифтов>
    xset fp rehash
    Обратите внимание, на опцию '+fp'- это означает, что новые шрифты будут добавлены в начале списка директорий со шрифтами. То есть, если прикладная программа запрашивает, скажем, шрифт fixed, то будет подставлен fixed font с кириллическими символами , чего мы и добивались. Хотя имеются некоторые проблемы. В дистрибутиве шрифтов кириллицы нет полужирного и курсивного fixed шрифта. Мой любимый шрифт - 6x13, а так, как полужирные и курсивные шрифты этого размера также отсутствуют, то я не могу использовать Emacs/XEmacs в полной мере. Надеюсь, что кто - то в конечном счете создаст эти шрифты, и ситуация изменится.
  5. А теперь перезапустите ваш 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.

Для переключения клавиатуры под X Window используется модифицированная программа xes. Модификация заключается в том, что кодовая таблица iso8859-5 заменена таблицей windows-1251, которая необходима для работы с такими приложениями как WABI и StarOffice. Для автоматического запуска xes вместе с KDE нужно создать соответствующий объект и поместить его в папку "Autostart".

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

Для графических режимов работы существует два принципиально разных вида фонтов - с фиксированными размерами и масштабируемые. У фонтов с фиксированными размерами для каждого размера фонта в явном виде в файле фонта задается рисунок каждой буквы. У масштабируемых фонтов имеется описание символов и по этому описанию фонт-сервер строит символы нужной величины. Широко распространены два вида масштабируемых фонтов: для мира UNIX - фонты Type 1, для Windows - True Type Fonts (ttf-фонты). К сожалению, имеется не так уж много фонтов Type 1, особенно фонтов с русскими символами. Зато почти на каждом компьютере есть набор хороших ttf фонтов для Windows, в том числе кириллических .

Но проблема в том, что X сервер не умеет рисовать ttf фонты. Поэтому приходится запускать дополнительную программу для вывода ttf фонтов. Для версии 5.2 RedHat Linux для этого использовалась программа xfstt, а в версии 6.0 используется xfs.

Использование фонтов True Type с Red Hat 6.0

Сервер фонтов xfs запускается при старте системы как одна из системных служб из каталога /etc/rc.d/init.d. Конфигурационный файл программы - /etc/X11/fs/config.
  1. Установку фонтов надо производить, имея права root-а.
  2. Будем считать, что TrueType фонты расположены в каталоге Windows/Fonts в Windows-разделе Вашего жесткого диска, который автоматически монтируется при старте системы в каталог /mnt/hda2. Если у Вас Windows-раздел монтируется иначе, измените соответствующим образом имена каталогов в приводимых ниже рекомендациях. Если у Вас вообще не монтируется Windows-раздел, создайте каталог с ttf-фонтами и соответственно используйте его имя при настройке.
  3. Перейдите в каталог с фонтами TrueType и выполните команду ttmkfdir, которая создает файл каталога фонтов, необходимый для xfs:
    cd /mnt/hda2/Windows/Fonts
    /usr/sbin/ttmkfdir > fonts.dir
  4. Добавьте новый каталог фонтов в пути поиска фонт-сервера xfs с помощью команды chkfontpath --add :
    /usr/sbin/chkfontpath --add /mnt/hda2/Windows/Fonts
    
Вы можете проверить, что новые шрифты подключены, запустив программу xfontsel или фонт-менеджер KDE.

Если Вы теперь заглянете в файл /etc/X11/fs/config, то увидите, что в конце раздела "catalogue" этого файла вписан путь к каталогу ttf-фонтов:

catalogue = /usr/X11R6/lib/X11/fonts/misc:unscaled,
        /usr/X11R6/lib/X11/fonts/100dpi:unscaled,
        /usr/X11R6/lib/X11/fonts/75dpi:unscaled,
        /usr/X11R6/lib/X11/fonts/misc,
        /usr/X11R6/lib/X11/fonts/Type1,
        /usr/X11R6/lib/X11/fonts/Speedo,
        /usr/X11R6/lib/X11/fonts/75dpi,
        /mnt/hda2/Windows/Fonts
Если Вы хотите, чтобы новые фонты имели преимущество при выборе шрифта, измените порядок строк в разделе "catalogue" файла /etc/X11/fs/config
catalogue = /mnt/hda2/Windows/Fonts,
        /usr/X11R6/lib/X11/fonts/misc:unscaled,
        /usr/X11R6/lib/X11/fonts/100dpi:unscaled,
        /usr/X11R6/lib/X11/fonts/75dpi:unscaled,
        /usr/X11R6/lib/X11/fonts/misc,
        /usr/X11R6/lib/X11/fonts/Type1,
        /usr/X11R6/lib/X11/fonts/Speedo,
        /usr/X11R6/lib/X11/fonts/75dpi
и перестартуйте фонт-сервер командой /etc/rc.d/init.d/xfs restart . Учтите, однако, что эти изменения скажутся и на других программах (например, изменятся шрифты в Netscape Navigator), и, может быть, Вам не все изменения понравятся.

Если Вы впоследствии добавите новые фонты в каталог /mnt/hda2/Windows/Fonts, Вы должны будете заново выполнить команду ttmkfdir и перезапустить фонт-сервер командой

/etc/rc.d/init.d/xfs restart

Для получения дополнительной информации воспользуйтесь man-страницами по командам 'xfs' и 'chkfontpath' или загляните в Интернете на страницу Red Hat 6.0 font support whitepaper

Использование фонтов True Type с Red Hat 5.2

Вначале хочу отметить, что данный подраздел полностью написан по разным источникам из Интернет. Сам я не устанавливал ttf-фонты в RedHat 5.2.

Для использования ttf-фонтов надо сначала установить фонт-сервер. Дистрибутив Red Hat 5.2 включает версию 0.9.9 программы xfstt, которая является сервером True Type фонтов для X-сервера. Этот скрипт расположен в каталоге /etc/rc.d/init.d/. Он ищет True Type фонты в каталоге

	/usr/X11R6/lib/X11/fonts/ttfonts 
(по другим источникам /usr/ttfonts; смотрите ссылки ниже)

Исходно этот каталог пуст, так что Вы должны скопировать туда файлы из каталога Windows/fonts, например, следующим образом:

	# cd /usr/X11R6/lib/X11/fonts/ttfonts
	# cp /mnt/hda2/windows/fonts/*.ttf .
Фонт-сервер получит доступ к новым фонтам только после перезагрузки либо после выполнения следующих команд:
	# cd /etc/rc.d/init.d
	# ./xfstt restart
(Заметим, что "./" в последней команде обязательны. Если Вы опустите эти два символа, произойдет попытка запуска программы xfstt вместо скрипта из /etc/rc.d/init.d.)

После установки фонт-сервера надо еще сказать X-серверу, где искать фонты, для чего добавить в секцию "Files" файла /etc/X11/XF86Config строку

    FontPath   "unix/:7100"
(в конец группы строк FontPath), и перестартовать X.

Для того, чтобы проверить, что желаемый эффект достигнут, выполните команду:

	% xlsfonts | grep tt
для получения списка доступных фонтов.

Замечания:

1. XConfigurator переписывает файл /etc/X11/XF86Config при каждом запуске, так что не забывайте заново выполнять добавление указанной выше строки после того, как Вы перенастраивали графическую подсистему.

2. Если xfstt сообщает, что "/usr/ttfonts" does not exist!, Вы, вероятно, пытались запустить программу из командной строки и запустили программу /usr/X11R6/bin/xfstt вместо скрипта /etc/rc.d/init.d/xfstt (скрипт, используемый для автоматического запуска xfstt во время загрузки). Это легко могло случиться, если в путях поиска у Вас отсутствует ".", текущим каталогом был каталог /etc/rc.d/init.d и Вы указали в командной строке просто 'xfstt' вместо './xfstt'.

3. Дополнительные разъяснения по поводу программы xfstt с Red Hat 5.2 Вы сможете найти в двух следующих статьях

  • Как использовать в Linux TTF шрифты (by UF). Копия здесь .
     
  • В.Казанов. Использование фонт-сервера ttf фонтов xfstt (написано в 1996 -1998 гг.)
     

    8.5. Кириллизация shell и других программ

    Для полноценной работы с кириллицей в текстовом режиме необходимо сделать еще кое-что. Во-первых, для отображения символов кириллицы необходимо, чтобы программы умели интерпретировать значения 8-го бита в коде ASCII (напомним, что первоначально этот код был 7-ми битным).

    bash

    Хотя для большинства программ вполне достаточно установки LANG=ru_RU.KOI8-R чтобы начать распознавать русские буквы, многие программы основанные на библиотеке readline (например bash) все равно считают символы с кодами больше 128 особыми META-символами (пищит при вводе).

    Чтобы отучить библиотеку readline от этого, необходимо определить переменную INPUTRC=, например, создав файл:

    /etc/profile.d/readline.sh
    
    ========
    
    #!/bin/bash
    
    INPUTRC="/etc/inputrc"; export INPUTRC
    
    ========

    и сделать этот файл исполняемым. Кроме того, прописать :

    /etc/inputrc
    
    ========
    set meta-flag on
    set convert-meta off
    set output-meta on
    ========

    После этого библиотека readlinebash) начнет воспринимать русские буквы.

    Еще один вариант : Не задавать INPUTRC=, а прописать те же значения в ~/.inputrc (в home-каталоге). Но тогда придется заводить такой файл в домашнем каталоге каждого пользователя.

    См. man readline .

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

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

    mc (The Midnight Commander)

    Чтобы корректно отображался текст кириллицы, необходимо установить флажки в опции "Полный 8-битный вывод" (full 8 bits) и "Полный 8-битный ввод" в пункте меню "Options/Биты символов" (Options/Display).
     


    Samba.

    /etc/smb.conf
    
    ======
    
    [global]
    
        character set = koi8-r
    
        client code page = 866
    
        preserve case = yes
    
        short preserve case = yes
    
    ======

    Диски Win'95 и DOS

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

    $ mount -t vfat -o umask=002,noexec,gid=500,codepage=866,iocharset=koi8-r /dev/hdb1 /mnt

        Да, все русские имена на диске FAT сохраняются в Codepage 866 ! Для работы этой опции ядро (>2.0.36) должно быть пересобрано с поддержкой NLS, кодовыми страницами CP866, NLS KOI8-R и конечно же с поддержкой VFAT.


    8.6. Кириллизация печати

    Кириллизация печати реализована при помощи измененного пакета ghostscript-fonts, который уже содержит три основных шрифта (Times, Courier, Helvetica) в кодировке KOI8-R (формат Type1). Поэтому, если принтер правильно сконфигурирован при инсталляции или позже программой printtool, система готова к печати из таких приложений как Netscape Communicator.  При установке rpm-пакета ghostscript-fonts на RedHat-5.1 следует обратить внимание на то, что файл /usr/share/ghostscript/3.33/Fontmap должен быть ссылкой к файлу /usr/share/ghostscript/fonts/Fontmap.  Это можно сделать следующими командами:

    # rm /usr/share/ghostscript/3.33/Fontmap
    # ln -s /usr/share/ghostscript/fonts/Fontmap /usr/share/ghostscript/3.33/Fontmap

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



    Команда  mapscrn может считывать таблицу перекодировки в одном из двух форматов:
           1. 256 байт двоичных данных
           2. текстовый файл, состоящий из двух столбцов.
    В случае формата (1) каждый символ с кодом i при выводе на экран преобразуется в символ с кодом table[i].  В случае формата (2) таблица используется следующим образом: ячейка таблицы кодировки символов со смещением, указанным в первом столбце, заменяется ячейкой со смещением, указанным во втором столбце.
    Значения в файле перекодировки могут быть указаны в одном из 4 форматов:
           1. Десятичный: строка десятичных цифр, не начинающаяся с  '0'
           2. Восьмеричный (Octal): строка восьмеричных цифр, начинающаяся с '0'
           3. Шестнадцатиричный (Hexadecimal):  строка 16-ричных цифр, перед которыми стоит "0x"
           4. Символьный (Character): Один символ, заключенный в одиночные кавычки.

    Заметим, что пробел, запятая, символ табуляции и '#' не могут использоваться в 4-ом формате. Кроме того, управляющие символы (с кодами  < 32) не могут быть перекодированы командой mapscrn, потому что они имеют специальное значение для драйвера консоли.

    Использование опции -m в команде setfont делает ненужным использование команды mapscrn.

    В любом случае загруженная таблица перекодировки активизируется только после вывода на экран строки "Esc(K". Заметим, что активизировать эту таблицу необходимо в каждой консоли.

    Существует еще таблица перекодировки для символов Unicode. Некоторые файлы фонтов включают эту таблицу и она будет загружена, если только не задана опция -u none.



    SYSTERM= используется для установки переменной окружения TERM по умолчанию EDITOR= ваш любимый редактор, используемый всеми системными программами SYSFONT= любой шрифт, являющийся легальным для команды 'setfont' (см. пакет kbd) SCRNMAP= любая таблица экранной перекодировки, легальная для команды 'mapscrn' (см. пакет kbd) Вышеперечисленное используется командой /sbin/setsysfont (которая запускается скриптом rc.sysinit во время загрузки системы).

    В версии initscripts-3.78-2.4 допустимы следующие параметры :

    ==========
    
    LANG
    
    LC_ALL
    
    LINGUAS
    
    SYSTERM
    
    UNIMAP
    
    ==========

    The major standards for programming languages, operating systems (POSIX), user interfaces (X) and inter-system communication (RFC 1123, MIME and ISO 2022) specify portable character sets which are subsets of ASCII. Protocol keywords are defined to be strings from the portable character set, and where a default initial encoding is specified, it is U.S. ASCII or its superset, ISO-8859-1.

    Historically, computer text communications used 7-bit bytes and the ASCII character set and encoding. Often, communications software would use the high bit as a ``parity bit'', which facilitates error detection and correction. Some terminal drivers would use it as a ``bucky-bit'' or to indicate face changes, such as underlining or reverse video. Although none of these usages are bad per se, they should be restricted to well-defined and well-documented interfaces, with 8-bit-clean alternatives provided.

    Unfortunately, the seven-significant-bits assumption leaked into a lot of software, in particular implementations of electronic mail, and now has been enshrined in Internet standards such as RFC-821 for the Simple Mail Transport Protocol (SMTP) and RFC-822 which describes the format of Internet message headers for text messages.

    вызов setlocale(LC_XXXXX,"ru_SU.KOI8-R") будет пытаться открыть файл "/usr/share/locale/ru_SU.KOI8-R/LC_XXXXX" и считать его внутрь структуры в run-time части libc. Это все происходит совершенно прозрачно для пользователя.

    Использован также RU.LINUX.FAQ (c)Составление - Станислав Корсуков, (s)Поддержание до сентября 1999 - Михаил Браво, [email protected], (s)Поддержание - Aлександр Канавин, [email protected]

    Очень хорошая статья (точнее 2 статьи) опубликованы в Linux Journal в мартовском и апрельском номерах за 1999 год : Stephen Turnbull "Alphabet Soup: The Internationalization of Linux", ее можно найти также на сайте автора.

    Еще несколько отличных статей на тему кодировок, кодовых страниц, фонтов и т.п.:

  • Статью Jukka Korpela A tutorial on character code issues" ищите на его страничке.
  • Unicode Technical Report #17: Character Encoding Model.
  • Семейство кодировок ISO 8859 рассматривается в знаменитом документе Roman Czyborra "The ISO 8859 Alphabet Soup" На том же сайте http://czyborra.com/charsets/ можно найти описание кириллических кодировок, включая KOI8-R, материалы по UNICODE и другие материалы на эту тему. Очень интересный и полный информации сайт.
  • You can read a good explanation about localization, its meaning, its implications, and some vocabulary, from Mozilla i18n & l10n Guidelines page and the comprehensive Concepts of C/UNIX Internationalization page of Dave Johnson.

    The excellent i18n HOWTO of KDE explains the steps to translate a *.po file.

    There is also my page about Linux locales, which has links to several language specifics translation teams and info. And the (still at its begining) Linux i18n project web site.

    There are also some projects of coordination between transaltors and programers that exist for some big projects, like for Gnome, or for KDE, and the mailing lists at li.org.

    См. также:

    http://isd.donin.com/~leon/spitfire/cyr.phtml

    http://kulichki.rambler.ru/~anykey/05-softnotes/012softnotes.linuxrussian.html

    http://www.iplabs.ru:8101/Linux/Article/

    http://triton.itep.ru/ru/linux/system.html

    http://kulichki.rambler.ru/moshkow/CYRILLIC/linuxcyrillic.txt


    Назад Вернуться к оглавлению. Далее

    В.А.Костромин
    Последние изменения
    в содержание файла внесены
    26 сентября 2000 г.