BASH Programming - Введение

         

В этом документе описываются приемы,


В этом документе описываются приемы, которые нужны для редактирования, просмотра и печати документов с использованием кириллических символов (в основном это относится к русскому языку) под Linux. И хотя здесь предполагается, что вы используете Linux как операционную систему, большая часть информации одинаково применима и к другим разновидностям Unix. Я попытаюсь указывать на различия.
Предполагается, что любая операционная система UNIX настраивается и поддерживается опытным человеком. Одного знакомства с книгой из серии "что-то там для чайников" недостаточно. Кириллизация операционной системы модифицирует ее, следовательно, требует определенных знаний о том, что вы делаете. Несмотря на то, что я пробовал упростить изложение настолько, насколько это возможно, наличие некоторого опыта работы с настраиваемым программным обеспечением является преимуществом на пути "всеобщей кириллизации". Я не собираюсь описывать здесь, что такое X-Window, как создаются документы в системах TeX и LaTeX или как установить и настроить принтер в Linux. Это описано в других документах.
UNIX -- это многопользовательская система, и поэтому условия, при которых вы проводите кириллизацию, могут отличаться. Вы можете быть системным администратором (или владельцем системы), пытающимся кириллизировать всю систему. С другой стороны, вы можете быть обычным пользователем, не имеющим привилегий системного администратора (root или superuser), и вы хотите кириллизировать систему только для себя. Большинство описываемых мной программ обладают достаточной гибкостью, позволяющей настроить их и с точки зрения всей системы, и с точки зрения обычного пользователя. Я попытаюсь отметить оба случая.
ВНИМАНИЕ: X-Window, TeX и другие компоненты Linux -- это сложные системы. Если вы сделаете что-либо неправильно, то вы не только потерпите неудачу с кириллизацией системы, но и можете частично, если не полностью, испортить систему. Это не должно вас пугать, это просто предупреждение, которое дает вам понять всю серьезность процесса настройки такого типа. Очень рекомендуется сделать копии файлов конфигурации. Также неплохо бы иметь под рукой гуру (специалиста по Linux) -- просто так, на всякий пожарный.

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


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

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



Символы и кодировки


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

Во время создания большинства операционных систем никто не позаботился предусмотреть возможность представления информации в программах на других языках, отличных от английского. Поэтому наиболее популярной кодировкой была (и фактически ей и остается) ASCII (Американский Стандартный Код для Информационного Обмена).

Стандарт ASCII (или ASCII с 7-ми битами) включает в себя 128 уникальных символов. Они подразделяются на символы, которые ASCII определяет как собственно печатаемые символы, и на так называемые символы управления, которые имели специальные значения в старых протоколах связи. Каждому элементу набора соответствует целочисленный символьный код (0-127). Подмножество печатаемых символов представляют те, которые находят на клавиатуре пишущей машинки, с некоторыми добавлениями. Каждый символ занимал 7 младших значимых битов байта, тогда как старший разряд использовался для целей управления (то есть для управления передачи в старых пакетах связи).

Концепция ASCII с 7 битами была расширена до ASCII с 8 битами (или расширенный ASCII). В этой кодировке диапазон символов соответствует кодам от 0 до 255. Младшие биты (0-127) -- чистый ASCII, в то время как старший разряд добавляет еще 127 символов. Так как эта кодировка обратно совместима с ASCII (символ все еще занимает 8 бит и коды полностью соответствуют старому ASCII), эта кодировка стала широко использоваться.

Стандарт ASCII с 8 битами не определяет содержание верхней половины таблицы кодировки. Поэтому МЕЖДУНАРОДНАЯ ОРГАНИЗАЦИЯ ПО СТАНДАРТИЗАЦИИ (ISO) взяла ответственность по определению семейства стандартов, известных как семейство ISO 8859-X. Это семейство представляет собой совокупность 8-ми битных кодировок, где младшая половина каждой кодировки (символы с кодами 0-127) соответствует ASCII, а старшая половина определяет символы для различных языков. Например, следующие кодовые страницы определены для:


8859-0 -- Новый европейский стандарт (так называемый Latin 0)
8859-1 -- Европа, Латинская Америка ( также известный как Latin 1)
8859-2 -- Восточная Европа
8859-5 -- Кириллица
8859-8 -- Идиш
В Latin 1 старшая половина таблицы определяет различные символы, которые не являются частью английского алфавита, но присутствует в различных европейских языках (немецкие umlauts, французские диакритические знаки и т.д).
Другая популярная реализация расширенного ASCII -- это так называемая кодовая страница IBM (названная по имени компьютерной компании, которая создала эту кодировку для своих персональных компьютеров). Эта кодировка в старшей половине содержит псевдографические символы.
Программное обеспечение, которое не делает никаких предположений о символах, использующих 8-й бит ASCII-данных (то есть не использует их для каких-то своих внутренних нужд) называется чисто 8-ми битными (примером не чисто 8-ми битного программного обеспечения является использование в фидо буквы Н
в качестве управляющего символа). Некоторые более старые программы, разработанные для ASCII с 7 битами в памяти, а не для чистых 8-ми бит, могут работать неправильно с данными в расширенном коде ASCII. Большинство программ, однако, способны работать с расширенным ASCII по умолчанию или для этого требуется простая переконфигурация. Подобные простейшие программы, требующие какой-либо настройки, в этом документе не рассматриваются. Вместо этого я сфокусировал свои усилия на более сложных пакетах.
Для информации о том, как создавать свое чисто 8-ми битное программное обеспечение, смотрите раздел .
Так как в большинстве систем символы описываются 8-ю битами, то нет никакого способа расширить ASCII еще больше. Способ создания новых символов в ASCII -- это просто создание других расширенных ASCII реализаций. Именно так кириллица и была введена в ASCII.
Мы уже упомянули стандарт ISO 8859-5 как тот, в котором определяются кодировки для кириллицы. Но поскольку (как это часто случается со стандартами) он был разработан без принятия во внимание реальных процессов, проходящих в СССР (когда это еще было), то единственное, что было действительно достигнуто с введением этого стандарта, так это только увеличение беспорядка с кодировками кириллицы. В сообществе Internet очень популярна кодировка KOI8-R (см. ниже). Кодировка ISO 8859-5 используется большими компаниями, создающими программное обеспечение с возможностью обработки кириллической информации. К подобным программам, как правило, относятся большие базы данных, решения, основанные на базе OpenVMS и т.д.
Сказанное выше относится только к пост-российскому пространству -- кодировка ISO 8859-5 является стандартом кириллицы по крайней мере в Македонии и Югославии.


Другие стандарты для кириллицы включают так называемую Alt
кодировку и кодовую страницу Microsoft CP1251. Вышеупомянутый Alt стандарт был разработан компанией Microsoft для МС-ДОС довольно давно. Тогда еще слыхом не слыхивали про сети из IBM PC, и поэтому основное усилие состояло в том, чтобы сделать этот стандарт максимально совместимым со стандартом IBM. Поэтому Alt кодировка -- это та самая IBM кодовая страница, где все специфические европейские символы в верхней половине были заменены на кириллицу, оставляя псевдографические символы нетронутыми. Следовательно, это не портило вид программ, использующих для работы текстовые окна, а также обеспечило символы кириллицы в них. Alt
стандарт все еще жив и чрезвычайно популярен в среде МС-ДОС (система МС-ДОС тоже жива, про OS/2 говорят, что она тоже жива -- не знаю, не видел :) ). Microsoft CP1251 кодовая страница -- это попытка Microsoft придумать новый стандарт для кодировки кириллицы в Windows. Насколько я знаю, это не совместимо с чем-либо еще.
Однако, в некоторых странах -- например, в Болгарии и, вероятно, в Беларуссии, cp1251 является стандартной кодировкой для Linux и для e-mail.
Ну и наконец: стандарт KOI8. В отличие от Alt и CP1251, он был разработан довольно давно для UNIX-машин. Так как говоря о UNIX
мы подразумеваем сеть, то основной идей при создании KOI8 стандарта была идея об обеспечении перемещения кириллической информации по сети.
Еще раз вернемся в далекое прошлое. Обычно все работали только со стандартным (7-ми битным) ASCII. 8-ой бит каждого символа указывал на то, что он или управляющий символ, или просто мусор. Обычно никто не слал данные чисто 8-ми битными (каждый норовил оттяпать 8-ой бит у символов). Разработчики KOI8
применили очень продуманный подход. Они поместили символы русской кириллицы в верхней части расширенной ASCII таблицы таким образом, что позиции кириллических символов соответствуют их фонетическим аналогам в английском алфавите в нижней части таблицы. Это означает, что если в тексте, написанном в KOI8, убирать восьмой бит каждого символа, то мы все еще имеем "читабельный" текст, хотя он и написан английскими символами!


Следует отметить, что KOI8- R подходит только для русских текстов, и как следствие был создан украинский вариант KOI8: KOI8-U.
Кроме Русской кириллицы KOI8-R описывает еще и Болгарскую кириллицу. Но кодировка KOI8 неизвестна и поэтому ее употребление в Болгарии бессмысленно. Даже самые ранние болгарские кириллизации были только для cp1251, хотя и делались на основе русских.
Не удивительно, что KOI8-R быстро стал фактически стандартом для русской кириллицы в Internet. проделал огромный объем работы, чтобы создать стандарт. Он - автор
("Registration of a Cyrillic Character Set").
Также существуют и другие стандарты, которые отличны от ASCII и гораздо более адаптируемы. Наиболее известный из них -- это Unicode. Этот стандарт пока не прижился в Unix вообще и в Linux в частности, но уже сейчас появляется все больше и больше программного обеспечения, которое имеет поддержку Unicode.

Консольный драйвер 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 и радоваться хорошим шрифтам, то используйте пакет Виктора Вагнера.

Consoletools


Сам пакет можно найти по адресу .

В том случае, если ваш дистрибутив использует пакет consoletools, вам необходимо выполнить следующие действия (естественно, эти команды не следует выполнять дословно):

foo="/место/где/лежат/ваши/консольные/шрифты" loadkeys $foo/ru.map consolechars -v -f $foo/Cyr_a8x16 -m $foo/koi2alt

После выполнения этих команд и загрузки соответствующих файлов вы можете переключать раскладку клавиатуры для ввода кириллических символов с помощью правого Control (иногда переключение по умолчанию "вешается" на Alt или Caps Lock).

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



Kbd


Довольно много дистрибутивов Linux устанавливают kbd как обязательную часть системы. Сам пакет доступен по адресу .

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

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

Загрузки соответствующей раскладки клавиатуры с помощью программы loadkeys. Практически в каждом дистрибутиве можно установить раскладку клавиатуры, которую система загружает по умолчанию во время загрузки, с помощью соответствующей программы настройки (например, для Redhat -- это /usr/sbin/kbdconfig). Вы также можете просто запустить loadkeys из вашего ~/.profile или сделать это руками.

Настройки экранного шрифта. Это делается с помощью программы setfont. Файлы шрифтов находятся в /usr/lib/kbd/consolefonts.

ВНИМАНИЕ: В старых версиях Linux запуск программы setfont

под X-Window мог завесить систему. Сейчас в этом случае печатается сообщение об ошибке.

Если вы являетесь приверженцем программ, работающих в текстовом режиме и использующих достоинства псевдографики PC (таких как Midnight Commander), то вы можете предпочесть использовать шрифты с Alt кодировкой и консольной раскладкой

(console character map). Это означает, что ваша консоль отображает Alt шрифты, но все кириллические символы, соответствующие KOI8-R кодировки, соответственным образом отображаются в 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"

При русификации всех консолей при загрузке системы вместо строчки

echo -ne "\033(K"

следует использовать строчку

for i in 1 2 3 4 5 6 7; do echo -ne "\033(K" > /dev/tty$i; done

-- это русифицирует все терминалы.

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



Проверка правильности кириллизации консоли


Теперь вы, вероятно, хотите проверить правильность кириллизации консоли.

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

По той причине, что на данный момент существует множество самых разных дистрибутивов Linux, клавиша переключения в консоли может быть другой. Обычно это правый Alt или Caps Lock -- это зависит от раскладки клавиатуры.

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

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

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



Что делать, если "слетела" консоль?


Скорее всего, на консоль был скопирован какой-то двоичный файл, где случайно встретилась переключающая ESC-последовательность. Тогда:

Сброс терминала:

$ echo -ne "\033c"

набрать вслепую, или с работающей консоли:

# echo -ne "\033c" >/dev/ttyX

Переключение на downloaded font

$ echo -ne "\033(K"

(возможно, еще придется перегрузить шрифты, но это смотря как консоль сорвало...)

Если вывалилась какая-то программа, которая использует curses, то проще

$ stty sane

В RedHat все это делают reset; setsysfont <ctrl-j>

reset -- из ncurses

См. 'man console_codes' и 'man stty'



Настройка текстового режима


Настройка текстового режима -- самый простой способ показывать и вводить символы кириллицы.

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

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



Установка шрифтов для X Window


Прежде всего, вы должны достать шрифты, содержащие изображения кириллических символов в соответствующих местах. Следует отметить, что все современные дистрибутивы имеют KOI8-R шрифты, более-менее пригодные для использования, так что если xlsfonts не показывает их, то они просто не установлены или не включены в X Font Path.

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

Некоторые дистрибутивы (как правило, очень старые) могут не включать кириллические шрифты для X Window -- в этом случае их придется устанавливать самим.

Подробнее о шрифтах для X-window и о том, где их можно найти, смотрите в разделе .

Более современную коллекцию шрифтов для X windows можно взять у по адресу .

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

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

Или наберите

find / -name crox\*.pcf\*

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

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

Скачайте соответствующий набор шрифтов. Подробнее о шрифтах для X-window и о том где их можно найти можно посмотреть в разделе .

Теперь, когда у вас есть шрифты, создайте для них каталог. Помещение новых шрифтов в уже существующий каталог шрифтов является, мягко говоря, не очень хорошей идеей. Поместите их, например, в /usr/lib/X11/fonts/cyrillic для настройки всей системы или просто создайте каталог у себя только для персонального пользования.

Если новые шрифты поставляются в формате BDF ( файлы *.bdf), то вы должны скомпилировать их. Для каждого шрифта выполните:

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

Можете сжать их с помощью программы gzip


(очень старые X сервера не поддерживает сжатые шрифты):
gzip *.pcf
Если же вы все-таки хотите поместить новые шрифты в уже существующий каталог шрифтов, то вы должны "срастить" старый и новый файлы с именем fonts.alias в том случае, естественно, если они оба существуют.
В каждом каталоге шрифтов для X должен быть список шрифтов, находящихся в нем. Этот список хранится в файле fonts.dir. Вы не должны создавать этот список вручную. Вместо этого выполните:
cd "директория где лежат шрифты" mkfontdir .
Теперь надо сделать этот каталог шрифтов известным для X сервера. Здесь у вас есть ряд возможностей:

Общесистемная настройка для XFree86. Если вы используете эту версию X Window, то добавьте новый каталог к списку каталогов в файле XF86Config. Чтобы найти его расположение, просмотрите, что скажет startx при запуске (в Redhat этот файл обычно находится в /etc/X11). Более подробно смотрите man XF86Config (4/5).
Общесистемная настройка через xinit. Добавьте новый каталог к файлу запуска xinit. Более подробно смотрите xinit(1x).
Персональная настройка. У вас есть специальный файл для запуска X Window -- ~/.xinitrc (им также может быть ~/.Xclients или ~/.xsession, для пользователей GNOME специальным файлом запуска обычно является ~/.gnomerc). Добавьте следующие команды в этот файл:
xset +fp <новый каталог шрифтов>
xset fp rehash
Обратите внимание на ключ '+fp' -- это означает, что новые шрифты будут добавлены в начале списка каталогов со шрифтами. То есть, если прикладная программа запрашивает, скажем, шрифт fixed, то будет подставлен fixed font с кириллическими символами, чего мы и добивались. Если нужно установить шрифты в нескольких кодировках, то команда xset +fp с предпочтительной кодировкой должна быть после других.
Теперь перезапустите X Window. Если вы все сделали правильно, то тесты, описанные в начале раздела, будут пройдены успешно. Также поиграйте с 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, нет многих недостатков, которые присутствуют при работе со шрифтами стандартным образом у X. Кроме того, существует множество кириллических TrueType шрифтов.

Подробнее о том, где их можно найти, можно посмотреть в разделе .

К счастью, эти шрифты можно использовать и в X Window. Существует TrueType сервер шрифтов

для X. Поддержка TrueType встроена во все современные дистрибутивы XFree86.

Коммерческие X сервера уже довольно давно включили поддержку TrueType в свои дистрибутивы (Accelerated X, Metro X).

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

Далее приводится пример того, как можно установить TrueType шрифты. О том, как подсунуть их X Window -- смотрите раздел .

Для того, чтобы стандартные шрифты отображались в нужной нам кодировке -- в данном случае для примера взята кодировка cp1251, -- в каталоге, где лежат TrueType шрифты, необходимо создать два одинаковых файла, fonts.dir и fonts.scale, следующего вида:

12 timesi.ttf -monotype-Times New Roman-medium-i-normal--0-0-0-0-p-0-microsoft-cp1251 timesbi.ttf -monotype-Times New Roman-bold-i-normal--0-0-0-0-p-0-microsoft-cp1251 timesbd.ttf -monotype-Times New Roman-bold-r-normal--0-0-0-0-p-0-microsoft-cp1251 times.ttf -monotype-Times New Roman-medium-r-normal--0-0-0-0-p-0-microsoft-cp1251 couri.ttf -monotype-Courier New-medium-i-normal--0-0-0-0-m-0-microsoft-cp1251 courbi.ttf -monotype-Courier New-bold-i-normal--0-0-0-0-m-0-microsoft-cp1251 courbd.ttf -monotype-Courier New-bold-r-normal--0-0-0-0-m-0-microsoft-cp1251 cour.ttf -monotype-Courier New-medium-r-normal--0-0-0-0-m-0-microsoft-cp1251 ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-microsoft-cp1251 arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-microsoft-cp1251 arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-microsoft-cp1251 arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-microsoft-cp1251

Кроме этого, сюда же необходимо положить файл encodings.dir, имеющий всего две строки:

1 microsoft-cp1251 /usr/X11R6/lib/X11/fonts/encodings/microsoft-cp1251.enc.gz

Если вам нужны эти шрифты в кодировке KOI8-R, то вместо microsoft-cp1251 следует прописать koi8-r.

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

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

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



Нерусская кириллица для X Window


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

Возможно, найденные вами шрифты окажутся в отличной от нужной вам кодировки. Для перекодировки BDF-шрифтов можно использовать программу trbdf

из пакета .

Эта программа поддерживает кодовые страницы ibm855, ibm866, iso-8859-5, koi8-c, koi8-r, koi8-u, mac-cyrillic, mik, unicode и ecma-cyrillic. Символы, отсутствующие в исходной кодировке, аппроксимируются, так что ее можно использовать, например, для генерации KOI8-U шрифтов из KOI8-R.

Если вам нужна поддержка cp1251, то вы столкнетесь с тем, что пока официально XFree не поддерживает эту кодировку. Имеются три решения:

Использовать дистрибутив, поддерживающий cp1251 (напр. Mandrake

Linux).

Патчить XFree. для XFree 3.3.5 и 4.0 сделан Алексеем Новодворским.

Идеологически неверное решение, но работает везде и легко осуществимо:

Добавьте в конце файла locale.alias (обычно он находится в каталоге /usr/X11R6/lib/X11/locale) строку вида

be_BY.CP1251 en_US.ISO8859-1

Конечно, вместо be_BY.CP1251 здесь Вы можете поставить строку для используемой Вами локали. (Однако имейте ввиду, что имеющаяся уже в этом файле строка о Болгарской локали bg_BG неверна и ее нужно удалить.)

Если для кириллизации клавиатуры используете метод через утилиту xmodmap, то этим все и кончится. Если же вы захотите использовать Xkb метод, то в клавиатурной раскладке вместо символических имен нужно использовать коды символов согласно cp1251. Например, для белорусской раскладки вместо

key <AD01> { [ q, Q ], [ Cyrillic_shorti, Cyrillic_SHORTI ] };

нужно использовать

key <AD01> { [ q, Q ], [ 0xe9, 0xc9 ] };

Замечание. Только версии XFree после 4.0.0 поддерживают KOI8-U. Если у вас отсутствует поддержка KOI8-U, а вам нужна именно эта кодировка, то вы можете воспользоваться всем вышеописанным про cp1251.



X Window


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

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



Bash


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

Должны быть сделаны следующие установки:

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

Следует отметить, что файл ~/.inputrc не имеет отношения непосредственно к bash -- это конфигурационный файл библиотеки GNU readline, используемой bash-ем. Поэтому совет о .inputrc

кириллизирует не только bash, но и многие другие программы (все, использующие GNU readline).

Во многих дистрибутивах версии GNU readline кроме файла ~/.inputrc используют также и общесистемный конфигурационный файл /etc/inputrc или /etc/Inputrc. Это дает возможность системному администратору сделать общесистемную "кириллизацию" сразу для всех пользователей. Если ваша система не использует общесистемный конфигурационный файл, то вы можете научить ее это делать. Создайте файл /etc/inputrc, а затем установите переменную окружения INPUTRC равную /etc/inputrc.



Csh/tcsh


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

setenv LC_CTYPE iso_8859_5 stty pass8

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

stty -istrip cs8



Less


Если локаль (см. раздел ) не настроена (а она обязана быть настроенной), то вывод кириллицы через less

можно получить, установив переменную окружения LESSCHARSET:

export LESSCHARSET=koi8-r

Это решение годится для всех 8-битовых кириллических кодировок.

Старые версии less не поддерживали эту установку, поэтому вместо koi8-r в этом случае следует подставить latin1. При этом однако становятся недоступными символы, чьи коды находятся в диапазоне 128-159. К счастью, коды букв обычно вне этого диапазона.

При настроенной локали

(см. раздел ) указывать LESSCHARSET НЕ НАДО. Более того, в ~/.lesskey

надо добавить

#env LESSCHARSET=

чтобы программа игнорировала установку LESSCHARSET= другими "глупыми" программами (к примеру, man). После этого надо запустить lesskey для получения бинарного файла ~/.less. В противном случае он не будет вызывать setlocale(LC_CTYPE,"") и, как следствие, не будет icase search для русских букв.



Mc (The Midnight Commander)


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

Если и в этом случае при просмотре файла из mc вы не увидите кириллических символов, то загляните в раздел .

В случае возникновения проблем при просмотре man статей -- сверьтесь с разделом .

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

off-topic: если вы захотите, чтобы mc в окне Xterm

был цветным, а не черно-белым, то установите переменную COLORTERM:

COLORTERM= ; export COLORTERM



Nroff


Для того, чтобы через nroff можно было "пропустить" символы кириллицы, надо использовать его с ключем -Tlatin1. Пропишите где-нибудь в стартовом скрипте (если у вас bash, то в .bashrc)

alias nroff='nroff -Tlatin1'

Просмотр файлов в mc запускается через nroff (по крайней мере, в mc, идущем с Slackware'96). В файле /usr/lib/mc/mc.ext следует в строке вызова nroff'а изменить параметр вызова с -Tascii

на -Tlatin1.



Man


Сейчас довольно бурно развивается деятельность по переводу всего и вся на русский язык (ну, не так чтобы уж очень, но кое-кто кое-что делает). Все больше и больше появляется статей man, переведенных на русский язык, но вот отобразить их не всегда удается.

Если у меня есть файл с русскими буквами, то вызов, скажем man ar

приводит к ерунде на экране.

Для исправления этого безобразия следует поправить соответствующие строки в /usr/lib/man.config, если это файл есть, или правильно настроить less (см. раздел ).



Ls


Если локаль установлена неправильно (см. раздел ), то ls не будет печатать кириллические символы. В этом случае возможно поможет одна из следующих команд: ls -N, dir -N или ls --show-control-chars.



Samba


Чтобы увидеть русские буквы в именах файлов на диске Samba, в файл /etc/smb.conf следует добавить строчки:

[global] character set = koi8-r client code page = 866 preserve case = yes short preserve case = yes



Telnet


Если возникают проблемы с вводом русских символов, надо написать файлик ~/.telnetrc со следующей строкой:

DEFAULT set outbinary

Вы можете встретить проблемы при работе в кодировке cp1251 -- не передается маленькая русская буква "я" 0xff. У протокола TELNET 0xff -- это первый символ управляющей последовательности. Дабы передать собственно "я", нужно его удваивать: 0xff, 0xff. При использовании KOI8-R такая проблема отсутствует.

off-topic: вместо telnet лучше использовать ssh (Secure Shell) -- максимальная безопасность при минимуме затрат.



IrcII


Добавить в файл конфигурации ~/.ircrc следующие строчки:

/set translation russian /set eight_bit_characters on



Проверка правописания на русском языке


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



Emacs и XEmacs


Есть две версии редактора Emacs -- GNU Emacs и XEmacs. Они обеспечивают более или менее сходный набор функций и возможностей, но при этом реализация некоторых деталей расходится довольно сильно. Настройка кириллицы требует некого низкоуровневого (в духе Emacs Лиспа) "хака"  и немного отличается для этих двух реализаций.

Минимальная поддержка кириллицы в GNU emacs (вам не нужно этого делать при настройке XEmacs) обеспечивается при выполнении следующих вызовов, добавленных в .emacs (при условии, что поддержка символов кириллицы установлена для консоли или для X Window соответственно):

(standard-display-european t)

(let ((m (current-input-mode))) (set-input-mode (car m) (nth 1 m) 1))

Это позволит вам видеть и вводить символы, находящиеся в верхней части ASCII таблицы.

Однако этого не достаточно. Emacs обрабатывает кириллические символы как специальные и, как следствие, не распознает границы русских слов и не делает различия между строчными и заглавными буквами. Чтобы обойти это, вам следует несколько модифицировать таблицы синтаксиса и регистра emacs:

(require 'case-table)

(let* ((ruc "\341\342\367\347\344\345\263\366\372\351\352\353\354\355\356\357\360\362\363\364\365\346\350\343\376\373\375\370\371\377\374\340\361") (rlc "\301\302\327\307\304\305\243\326\332\311\312\313\314\315\316\317\320\322\323\324\325\306\310\303\336\333\335\330\331\337\334\300\321") (i 0) (len (length ruc))) (while (< i len) (modify-syntax-entry (elt ruc i) "w ") (modify-syntax-entry (elt rlc i) "w ") (set-case-syntax-pair (elt ruc i) (elt rlc i) (standard-case-table)) (setq i (+ i 1))))

Для этого был создан файл rusup.el, который содержит эти команды, также как и пару других удобных функции. Вы должны вызвать его в вашем ~/.emacs.

Обратите внимание на пакет , созданный Валерием Алексеевым (valery@math.uga.edu), который позволяет пользователю переключаться между кириллическим и стандартным модами ввода и преобразовывать текстовый буфер из одной русской кодировки в другую (это очень полезно для чтения текстов, импортированных из MS-DOS или Windows).

ВНИМАНИЕ: Помимо описанной выше настройки, существует альтернативный путь обучения обоих версий emacs кириллице. Для этого используется MULE (MULtilanguage Emacs support). Для настройки кириллицы через MULE берем iso8859-5 шрифты (см. раздел ), подключаем их к иксам, и выбираем в меню Mule нужную кодировку. Этот способ является более "идеологически"  правильным.

Совет: При работе с X-window для Emacs, вероятно, лучше всего подойдут шрифты lucidatypewriter из коллекции шрифтов Болховитянова (См. раздел ).



Работа с vi


Редактор vi (по крайней мере, его клон vim, присутствующий в большинстве дистрибутивов Linux) знает о существовании 8-ми битных символов. Это дает вам возможность вводить кириллические буквы. Редактор правильно распознает границы слов.

Насколько я понимаю, vim использует locale для преобразования букв из строчных в заглавные и обратно, т.е. на всех встреченных мной unix-like системах vim правильно работал с русским языком после настройки locale (Как настроить локаль смотрите раздел ).

Для того, чтобы постоянно не переключаться в командном режиме между английскими и русскими буквами, необходимо выполнить мапирование русских букв в английские -- либо (в старых версиях vim или vi) через команду map для каждой буквы, либо (в новых версиях vim) через опцию langmap. Последнее делается добавлением в ваш ~/.vimrc, или в общесистемный vimrc, двух строк:

set langmap=ж;; set langmap=ё`,йq,цw,уe,кr,еt,нy,гu,шi,щo,зp,х[,ъ],фa,ыs,вd,аf,пg,рh,оj,лk,дl,э',яz,чx,сc,мv,иb,тn,ьm,б\,,ю.,Ё~,ЙQ,ЦW,УE,КR,ЕT,HY,ГU,ШI,ЩO,ЗP,Х{,Ъ},ФA,ЫS,ВD,АF,ПG,РH,ОJ,ЛK,ДL,Ж:,Э\",ЯZ,ЧX,СC,МV,ИB,ТN,ЬM,Б<,Ю>

Подробности -- в :help langmap.



Редактирование текста в joe


Все проблемы joe можно решить, правильно настроив locale (См. раздел ), если он правильным образом "пропатчен". Если у вас ничего не получилось, то попробуйте рецепт, описанный ниже.

Для того, чтобы распознавать 8-ми битные символы, joe требует специальную опцию -asis. Вы можете указать ее в командной строке или вставить в файл ~/.joerc для личного пользования, или в /usr/lib/joerc для настройки всей системы.

joe, который входит в более-менее современные дистрибутивы (BCL 6.2, RH 5.2-6.1; FreeBSD) правильно распознаёт границы русских слов. А для преобразования регистра man joe советует ^K / -- фильтровать блок через tr, т.е. все сводится к работе tr.



Настройка программы чтения новостей


Читать новостные группы можно с помощью Emacs (раздел ) или pine

(раздел ), но лучше воспользоваться специализированными программами -- такими как tin.



Использования кириллицы в программах электронной почты и чтения новостей


Настройка программ электронной почты и чтения новостей для распознавания кириллицы не очень сложна, хотя вам следует знать основные принципы работы электронной почты и новостей.

Обычно программы Internet электронной почты состоят из двух частей: MUA (Mail User Agent -- пользовательская программа электронной почты) и MTA (Mail Transfer Agent -- программа рассылки электронной почты). MUA - это программа, которую вы используете для чтения, составления и посылки электронных сообщений. Однако пользовательская программа электронной почты сама письма не посылает; вместо этого она вызывает программу рассылки электронной почты, которая отвечает за посылку сообщения в соответствующем направлении, используя соответствующий протокол. Пример пользовательской программы электронной почты -- Pine, программы рассылки электронной почты -- qmail.

До недавнего времени и MTA, и MUA по умолчанию не были чисто 8-ми битными программами. Поэтому, когда вы посылаете сообщение, скажем, из Америки в Россию, то вы никогда не будете уверены в том, что какая-нибудь промежуточная программа рассылки электронной почты не "откусит" в вашем сообщении 8-ой бит у каждой буквы в вашем сообщении. Поэтому был разработан ряд протоколов, которые позволяют закодировать любой тип данных с использованием только печатаемых символов из 7-ми битного ASCII. Эта группа протоколов зовется MIME (MultimedIa Mail Encoding -- мультимедийная кодировка электронных сообщений).

Так как MIME обычно сконфигурирован по умолчанию довольно правильно, мы не будем обсуждать его здесь. Мы поговорим о MIME, когда будет обсуждаться совместимость между русскими кодировками (См. раздел ).

Мы начнем с настройки пользовательской программы электронной почты, потому что именно с этой программой вы работаете непосредственно. Ей нужно указать:

что письма будут содержать 8-битные символы,

с какой кодировкой вы работаете, и

с какой кодировкой письма будут посылаться.

Кодировки нужно обозначать не произвольными именами, а согласно рекомендаций IANA.

Конечно, указывая кодировку для посылаемых писем, вы должны действовать соответственно существующим стандартами. Стандарт для России: для электронной почты используется KOI8-R, именем этой кодировки согласно рекомендаций IANA является koi8-r. В Болгарии же для электронной почты используется кодировка cp1251, имя согласно IANA -- windows-1251.

(Письма, которые получал (и посылал) Антон Зиновьев в Сербию и Македонию, использовали кодировку ISO-8859-5. Но потребители Windows вряд ли используют ISO-8859-5 -- так что какая кодировка является стандартом для этих стран, совершенно не понятно.)

Дополнение: Довольно часто случается так, что те, кто посылают вам письма, неправильно настраивают (или не настраивают вообще, а по умолчанию стоит черте-че -- пример Outlook) свои почтовые программы. В заголовках писем вместо windows-1251 чаще всего стоит iso-8859-1, US-ASCII или UNKNOWN-8BIT. Для исправления получаемых писем создайте файл ~/.procmailrc со следующим содержанием (но я предупреждаю вас, что после ошибки в ~/.procmailrc вы можете потерять всю вашу почту):

:0 fHw * ^Content-Type: *text/plain; *charset="?(iso-8859-1|US-ASCII|UNKNOWN-8BIT)"? | formail -i "Content-Type: text/plain; charset=windows-1251"



Lynx


Начиная с версии 2.6, вы можете выбирать соответствующее значение для дисплея -- display Character set. lynx версии 2.8 позволяет смотреть страницы в любой кодировке, а не только в KOI8-R.

Для наcтройки следует выйти в меню 'o'ptions и проверить следующие настройки:

display (C)haracter set : KOI8-R character set preferred document c(H)arset : koi8-r;q=1.0,windows-1251;q=0.5

Если русская (KOI8-R) страничка отображается Lynxом неверно, то это означает, что страница неверно оформлена (см. раздел ). В последних версиях Lynx это обходится следующим образом: в настройках нажмите '^A' и выберите koi8-r

(в основном отображаются заглавные буквы) или windows-1251

(в основном прописные буквы). В старых версий Lynx

после этого следует нажать @ (включить raw режим).



Netscape Navigator


Убедитесь, что вы используете Netscape версии 4.06 и выше. Начиная с этой версии, Netscape поддерживает кириллицу гораздо лучше.



Как правильно подготовить свою WWW страничку


Этот раздел появился благодаря (фактически полностью состоит из) статьям Андрея А. Чернова. Подробную информацию по этому вопросу можно найти на страничке А.А. Чернова .



Поддержка кириллицы в TeX/LaTeX


В этом разделе я опишу несколько способов набора кириллических текстов в TeX и LaTeX. Есть несколько путей для достижения этой цели, которые отличаются в сложности установки и удобстве использования. Например, одна из возможностей -- это начать работу без всякой предварительной настройки, используя Washington AMSTeX Cyrillic fonts. С другой стороны, вы можете установить пакет LaTeX, который легко настраивается на пользование кириллицей.

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

Обратите внимание, что доступны две версии LaTeX, одна из них -- 2.09 -- старая версия, в то время как 2e -- новая (выпуск pre-3.0). Если вы используете LaTeX 2.09, то как можно быстрее переходите на 2e. Последний сохраняет совместимость со старой версией, но имеет намного больше возможностей.

Последние версии дистрибутивов LaTeX (например, версии старше чем 1.0) включают в себя русификацию out of box. Признаком русифицированности LaTeX'а out-of-box является наличие директории /$TEXMF/tex/latex/t2, $TEXMF обычно равно /usr/lib/texmf или /usr/share/texmf. Русификация, как нетрудно догадаться, -- T2 (См. раздел ).



StarOffice


Наиболее полную и подробную информацию по русификации StarOffice можно найти на страничке Леона Кантера по адресу

Последняя новость: Sun, который на корню скупил Star Division Corp., выпустил бесплатную версию русифицированную StarOffice 5.2, правда, шрифты для него нужны в ISO 8859-5 кодировке.

Off-topic: Следующая версия StarOffice (6.0?) выйдет под лицензией GNU -- так было обещано (Sun слов на ветер не бросает).



Кириллица в PostScript


Эксперты говорят, что PostScript -- это просто. Я не могу судить -- у меня было слишком много вещей, которые надо изучить, чтобы выкроить время для изучения PostScript. Но я все равно попробую использовать мои небольшие знания об этом вопросе. Я буду очень благодарен за любую информацию об этом вопросе от вас, друзья, которые знают больше меня (вас приблизительно 99% от Земной популяции).

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

шрифт кириллицы загружен в принтер, и тогда у вас все уже должно работать.

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

Для того чтобы вшить русские шрифты в сам ps-файл, нужно после printtool в соответствующем файле /var/spool/lpd/lp.../postscript.cfg заменить строку 'GSDEVICE=POSTSCRIPT' на 'GSDEVICE=pswrite'.

Кроме описанного метода, можно включить шрифты в файл Postscript руками с помощью обычного текстового редактора -- подробно это описано в разделе .

текст кириллицы использует символьные коды, которые соответствуют требованиям шрифта.

чтобы печатать текст кириллицы, выбран соответствующий шрифт.

Не имеется никакого достаточно общего решения, чтобы рекомендовать его как окончательное. Я попробую осветить различные способы для решения различных проблем, связанных с этим вопросом.

Один способ -- это побороть проблемы установки кириллицы вообще, и состоит он в том, чтобы использовать . Ghostscript (или просто gs от newspeak) абсолютно free (ну, не совсем) интерпретатор PostScript. У него есть много преимуществ; среди них:

Способность работать на многих платформах (различные Unix, MS Windows и т.д);

Поддержка для огромного количества не-PostScript принтеров;

Высокая степень настраиваемости.

В нашем специфическом случае является важным то, что однажды установив и настроив Ghostscript, мы можем все печатать через него, таким образом нам не надо дополнительно настраивать другие PostScript устройства (например, HP LaserJet IV).



Инкапсуляция шрифтов Type1 в Encapsulated PostScript (eps)


Рисунки в формате PostScript часто требуется включать в текст, подготовленный таким средством форматирования, как TeX. Компания Adobe разработала формат файла Инкапсулированный PostScript (EPS или EPSF), который создается в соответствии с соглашениями по структурированию документов в формате PostScript (PostScript Document Structuring Conventions).

Большинство современных графических приложений порождает файл в общепринятом формате EPS, который без труда может быть использован LaTeXом. Существует одно но: как правило, при создании EPS файла шрифты, которыми делаются надписи (шрифты, конечно же, -- PostScript Type1), в него не включаются и при печати заменяются первыми попавшимися.

Если у вас есть картинка в EPS, использующая шрифт AAA, и файл AAA.PFA с этим PostScript шрифтом, то для того, чтобы инкапсулировать шрифт в картинку, надо с помощью любого текстового редактора вставить файл AAA.PFA целиком непосредственно перед строчкой %%EndProlog в файл EPS.

Если у вас есть только PFB шрифты, то их следует его преобразовать в PFA. Для этого воспользуйтесь утилитой pfb2pfa (см. ) или t1ascii (см. t1utils).

Для вставки вместо редактора можно использовать скрипт includeresources из psutils -- он делает то же, но автоматически.

Этот же прием срабатывает и для обычного Postcript файла.



Ghostscript


Пакет Ghostscript является совершенно уникальным продуктом -- фактически все, что печатается в Unix, проходит через Ghostscript.




Это имеет весьма отдаленное отношение к кириллизации, но иногда очень полезно знать, что надо сделать, чтобы ваш текст был отформатирован под страницу формата A4 (заимствовано из Serbian-HOWTO).

dvips -- измените нужным образом файл /usr/share/texmf/dvips/config/config.ps или ~/.dvips.

ghostscript -- при вызове программы из командной строке, добавьте параметр -sPAPERSIZE=a4.

ghostview -- добавьте следующую строку в файл ~/.Xresources:

Ghostview.pageMedia: A4

xdvi -- добавьте следующую строку в файл ~/.Xresources:

XDvi.paper: A4


Вывод на печать и PostScript


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

Принтеры имеют различные управляющие языки, и очень часто они имеют сильно различные подходы к поддержке иностранных языков. Хорошая новость -- это то, что сейчас в качестве управляющего языка, как стандарт de facto для описания работы печати, используется язык PostScript, разработанный . Много принтеров имеют встроенный PostScript интерпретатор, то есть вам надо просто послать на принтер Postscript данные. Для тех, у кого этого нет, существует программные PostScript интерпретаторы, который берут данные Postscript и преобразовывают в специфический для данного принтера управляющий код. Один из них мы сейчас обсудим (вероятно, лучший из лучших). Это GNU GhostScript (gs для краткости).

Другая проблема -- это широкий спектр требований, предъявляемых к печати. Например, иногда вы хотите просто напечатать часть вашей программы на "C", содержащей в качестве комментария текст на русском, так что вы не нуждаетесь в "навороченной" процедуре печати -- вам нужен простой ASCII вывод с одним шрифтом. Совсем другой дело, когда вы создаете открытку для вашей подруги. В этом случае вы, вероятно, будете нуждаться в печати документа с различными шрифтами и т.д. И это уже определенно требует больших усилий по установке поддержки кириллицы.

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

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



Locale


Одно из основных понятий локализации -- locale. Под locale подразумевается набор соглашений, специфических для отдельно взятого языка в отдельно взятой стране. В общем случае говорить, что locale определяется только страной, неправильно. Например, в Канаде могут быть определены два locale -- язык Канада / Английский и язык Канада / Французский. Более того, язык Канада / Английский не является эквивалентом языку Великобритания / Английский или Американский / Английский, точно так же Канада / Французский язык -- не эквивалент языку Франция / Французский или языку Швейцария / Французский.

Более подробное описание проблем/возможностей/достоинств локализации на русском языке можно найти на страничке .



Интернационализация


В то время как локализация описывает, как адаптировать программу к иностранному окружению, интернационализация (или i18n

для краткости) детализирует способы общения программы с не-англоговорящим пользователем.

Прежде это делалось с помощью создания абстракций сообщений для вывода их из кода программы. Теперь такой механизм (более или менее) стандартизирован. И, конечно, есть его free реализации!

Проект GNU, наконец, стал на путь создания интернационализированных прикладных программ. Ulrich Drepper (drepper@ipd.info.uni-karlsruhe.de) разработал пакет gettext. Этот пакет лежит во всех GNU архивах, например, в . Он позволяет вам разрабатывать программы в направлении, двигаясь в котором вы можете легко заставить их поддерживать большее количество языков. Я не предполагаю описывать методы программирования еще и потому, что gettext пакет поставляется с превосходным руководством.

Просьба о сотрудничестве: Если вы хотите изучить пакет gettext и сделать свой вклад в проект GNU или просто сделать вклад без всякого изучения, то вы можете сделать это! GNU становится международным, так что все утилиты делаются locale зависимыми. Проблема состоит в том, чтобы переводить сообщения с Английского языка на Русский (и другие языки, конечно если захотите). В общем, что следует сделать: вы должны получить специальный .po

файл, состоящий из Английских сообщений для неких утилит, и связать каждое сообщение с его эквивалентом на русском. В конечном счете, это заставит говорить систему по-русски, если пользователь захочет этого! Для для подробностей войдите в контакт с Ulrich Drepper ( ).



Локализация и Интернационализация


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

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

Следовательно, возникает потребность в стандартизации. И стандарт есть.

Все связанное с вышеперечисленными проблемами разделено в соответствии c двумя базисными концепциями: localization и internationalization. Под локализацией мы имеем в виду создание программ, способных обрабатывать различные языковые соглашения для различных стран. Позвольте привести пример. Формат даты, принятый в Соединенных Штатах, имеет вид ММ/ДД/ГГ. Однако в России наиболее популярный формат -- ДД.ММ.ГГ. Другие проблемы включают в себя представление времени, форматы числа и представления валюты. Кроме этого, один из наиболее важных аспектов локализации -- это определение соответствующих классов символов, то есть определение, какие символы в наборе символов являются "кирпичиками" языка (буквами) и как они упорядочиваются. С другой стороны, локализация не работает со шрифтами.

Интернационализация (или i18n для краткости), как предполагается, решает проблемы, связанные со способностью программы взаимодействовать с пользователем на его родном языке.

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

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

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



Совместимость данных в MIME формате


MIME формат -- стандартное архитектурно-независимое представление данных. Первоначально это представление данных было разработано для письменных сообщений, а сейчас его используют и в других местах. Стандарт MIME определяет формат, который открыт для расширений и позволяет поддержку и работу со специфическими данными. Например, если я послал письмо, содержащее MIME объект video/mpeg типа (MPEG файлы), моя программа приема электронных сообщений автоматически декодирует его и запустит MPEG проигрыватель.

Большинство UNIX программ, предлагающих MIME сервис, для этих целей используют пакет metamail, который содержит набор утилит и файлов данных для работы с объектами MIME. Несколько файлов конфигурации (/etc/mailcap для системной настройки и ~/.mailcap -- для пользовательской настройки) определяют директивы для работы с объектами MIME различных типов.

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

Ниже перечислены MIME-законы, которые описывают правила работы с обычными текстами и текстами в richtext формате, использующих другие кодировки, отличные от KOI8. Вы можете вставить эти директивы в один из файлов конфигурации MIME.

Обратите внимание: Эти директивы используют пакет translit, для того, чтобы производить само преобразование. Для более полной информации об этой программе и для информации по перекодировки смотрите раздел .

text/plain; translit -t cp1251-koi8.rus < %s; test=test \ "`echo %{charset} | tr '[A-Z]' '[a-z]'`" = cp1251; copiousoutput

text/richtext; translit -t cp1251-koi8.rus < %s; test=test \ "`echo %{charset} | tr '[A-Z]' '[a-z]'`" = cp1251; copiousoutput

text/plain; translit -t alt-koi8.rus < %s; test=test \ "`echo %{charset} | tr '[A-Z]' '[a-z]'`" = cp866; copiousoutput

text/richtext; translit -t alt-koi8.rus < %s; test=test \ "`echo %{charset} | tr '[A-Z]' '[a-z]'`" = cp866; copiousoutput


text/plain; translit -t alt-koi8.rus < %s; test=test \ "`echo %{charset} | tr '[A-Z]' '[a-z]'`" = alt; copiousoutput
text/richtext; translit -t alt-koi8.rus < %s; test=test \ "`echo %{charset} | tr '[A-Z]' '[a-z]'`" = alt; copiousoutput
Достаточно, это работает только в случае обычного текста. Бинарные файлы данных должны сами отрабатывать данные в различных кодировках (По крайней мере, это должны делать программы, создавшие их). Поэтому если вы послали файл Microsoft Word в кодировке cp1251, то с этим должна разобраться программа, в которой вы читаете этот текст (Например MS Word или Applix Words).
К несчастью, действительная ситуация далека от идеала. Много программных продуктов имеют собственные идеи по поводу того, как использовать MIME. До недавнего времени Microsoft Mail использовал испорченный механизм работы с MIME. Хотя и Netscape Navigator/Communicator клиент отправки/приема сообщений известен тем, что шлет текст письма в cp1251, а его заголовок в charset=koi8-r кодировке и наоборот.
Довольно часто случается так, что те, кто посылают вам письма, неправильно настраивают (или не настраивают вообще, а по умолчанию стоит черте-че -- пример Outlook) свои почтовые программы. В заголовках писем вместо windows-1251 чаще всего стоит iso-8859-1, US-ASCII или UNKNOWN-8BIT. Для исправления получаемых писем создайте файл ~/.procmailrc со следующим содержанием (но я предупреждаю вас, что после ошибки в ~/.procmailrc вы можете потерять всю вашу почту):
:0 fHw * ^Content-Type: *text/plain; *charset="?(iso-8859-1|US-ASCII|UNKNOWN-8BIT)"? | formail -i "Content-Type: text/plain; charset=windows-1251"

Символьная перекодировка


В Internet можно найти множество программ, перекодирующих кириллические тексты. Каждая из них имеет свою изюминку и отличается степенью поддержки кириллицы.

С моей точки зрения, утилиты должны быть стандартными. В нашем, частном, случае такой "стандартной" утилитой является . ( ).

Например, чтобы перекодировать из cp1251 в koi8-r, следует сказать:

$ recode CP1251..KOI8-R winfile.txt

Так же широко распространены iconv (входит в поставку glibc)

Опять же cp1251 в koi8-r:

$ iconv -f866 -tKOI8-R -o<outfile> infile

Можно воспользоваться пакетом . Он поддерживает много популярных кодировок и даже способен создавать TeX файлы (см. раздел

) на русском языке.

В конце концов сгодится обычный lynx (cp1251 в koi8-r):

$ lynx -assume_local_charset cp1251 file.txt

Для других программ преобразования -- загляните на страничку

или на . Вы даже можете использовать специальную моду для emacs (Смотрите раздел ).



Кириллические имена файлов в файловой системе MS Windows


Windows имеет возможность давать имена файлов в кодировке Unicode, поэтому пользователи могут давать осмысленные имена своим файлам. Linux, однако, не дает полной поддержки для Unicode, поэтому если вы монтируете диск Windows VFAT, то увидите, что подобные имена состоят из вопросительных знаков и прочего мусора.

Здесь указан путь, как получить правильное преобразование:

Убедитесь, что ваше ядро скомпилировано с поддержкой codepage (в частности, с поддержкой кодовых страниц cp866 и KOI8-R -- возможно, в виде модулей ls /lib/modules/`uname -r`/fs/nls_*).

Добавьте следующие опции при выполнении mount команды mount:

codepage=866,iocharset=koi8-r

или пропишите в /etc/fstab/ примерно такую строчку:

/dev/hda5 /mnt/d vfat noexec,dev,suid,rw,umask=002, codepage=866,iocharset=koi8-r, gid=101 0 0

для выяснения подробностей смотрите man mount.

Более подробно смотрите Documentation/filesystems/vfat.txt

в исходниках ядра Linux.



Поддержка кириллицы в DOS эмуляторе


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

Для консольной версии (dos) вы должны загрузить только клавиатуру и экранный драйвер. Большинство драйверов DOS будет прекрасно работать. А. Беликов использует rk драйвер А. Страхова, который работает и для консоли, и X версии dosemu. Другая альтернатива -- это r драйвер Вадима Курлянда (последняя версия этого драйвера -- 2.0, и его развитие прекращено). Он прекрасно настраивается и поддерживает много кодировок, в том числе Alt и KOI8. Однако он, вероятно, не будет работать для X Window (по крайней мере, версия 1.14 не работает).

Оба русификатора можно найти в большинстве Российских Internet архивов, например, в .

Кроме того, есть патч в , который позволяет обойтись без русификатора клавиатуры. Этот патч рекомендуется в X-ах, так как позволяет избежать двух клавиш переключения: одной в DOS, другой -- на остальном десктопе. Для работы с удаленным dosemu (по telnet/ssh/rsh) патч является необходимым условием.

Для X-овых версий dosemu вы должны установить соответствующий X шрифт с 866-ой кодировкой. Взять можно по адресам , или , или взять у автора (эти шрифты сделал Дима Болховитянов) .

Кроме шрифтов в кодировке cp866, там можно найти и другие кириллические шрифты. Например, vga_bul8x16.pcf.gz и vga_bul.pcf.gz имеют кодировку МИК (Болгария), vga_ruscii_8x16.pcf.gz имеет украинскую "досовскую" кодировку ruscii.

Для установки шрифтов для dosemu вы должны:

Сделать этот шрифт доступным X-серверу -- для этого следует выполнить процедуру, описанную в разделе .

Прикрутить этот шрифт к dosemu. Если шрифт только заменяет первоначальный шрифт vga, то он будет опознан по умолчанию. Иначе вы должны описать его в /etc/dosemu.conf:

# Font to use (without filename extensions). For example: X { updatefreq 8 title "MS DOS" icon_name "xdos" font "vga-alt"}

И в заключение, вы должны загрузить драйвер клавиатуры. Обратите внимание, что вам не нужны экранные драйверы в X окне. Не все драйверы будут работать, но, по крайней мере, два из них будут: rk А. Страхова, и cyrkeyb Pete Kvitek; однако лучше воспользоваться патчем .



Поддержка кириллицы в программах gtk


Если gtk не находит нужных шрифтов, он режет 8-й бит. Шрифты задаются в /etc/gtk/gtkrc.$LANG. Поэтому нужно создать файл gtkrc.ru или поправить существующий. Внутри должно быть примерно следующее (названия шрифтов, размеры и прочие атрибуты можно исправить по вкусу, но эти шрифты должны содержать кириллицу в koi8-r):

style "gtk-default-ru" { fontset = "-cronyx-helvetica-medium-r-normal--*-*-*-*-*-*-koi8-r,\ -cronyx-courier-medium-r-normal--*-*-*-*-*-*-koi8-r,\ -cronyx-fixed-medium-r-normal--*-*-*-*-*-*-koi8-r,\ -cronyx-times-medium-r-normal--*-*-*-*-*-*-koi8-r" } class "GtkWidget" style "gtk-default-ru"

и скопировать этот файл в 'gtkrc.ru_RU.KOI8-R', или сделать symlink:

$ cd /etc/gtk/ $ ln -s gtkrc.ru gtkrc.ru_RU.KOI8-R

Подробности см. , а также



Debian


Этот раздел посвящен кириллизации Debian 2.2. Если какие-либо действия надо совершить для младших версий этого дистрибутива -- это будет отмечено особо.



Этот раздел является сильно сокращенной


Этот раздел является сильно сокращенной версией (только кириллизация) Slackware-7-INSTALL-RUS.HOWTO

(с) 1999 Вячеслава Калошина (multik@sw.ru, multik@istu.edu)