Версия 1.4.2 от 29 сентября 2002 г.
Аннотация
Здесь описывается, как настроить кириллицу для редактирования, просмотра и печати документов в Unix подобных системах[1].
Содержание
Список таблиц
Содержание
В этом документе описываются приёмы, которые нужны для редактирования, просмотра и печати документов с использованием кириллических символов под Linux. И хотя здесь предполагается, что вы используете Linux как операционную систему, большая часть информации одинаково применима и к другим разновидностям Unix.
Предполагается, что любая операционная система UNIX настраивается и поддерживается опытным человеком. Одного знакомства с книгой из серии "что-то там для чайников" недостаточно. Кириллизация операционной системы модифицирует её, следовательно, требует определённых знаний о том, что вы делаете. Несмотря на то, что я пробовал упростить изложение настолько, насколько это возможно, наличие некоторого опыта работы с настраиваемым программным обеспечением является преимуществом на пути к "тотальной кириллизации". В этом тексте нет описания что такое X Window, как создаются документы в системах TeX и LaTeX или как установить и настроить принтер в Linux. Это описано в других документах.
UNIX — это многопользовательская система, и поэтому условия, при которых вы проводите кириллизацию, могут отличаться. Вы можете быть системным администратором (или владельцем системы), пытающимся кириллизировать всю систему. С другой стороны, вы можете быть обычным пользователем, не имеющим привилегий системного администратора (root или superuser), и вы хотите кириллизировать систему только для себя. Большинство описываемых мной программ обладают достаточной гибкостью, позволяющей настроить их и с точки зрения всей системы, и с точки зрения обычного пользователя. Я попытаюсь отметить оба случая.
Перед тем, как настроить различные части системы, следует настроить пару простых вещей. Большинство программных компонент, описываемых ниже, предполагают, что кириллические шрифты доступны и пользователь может вводить кириллические символы. Чтобы это действительно стало правдой, следует настроить окружение для того, чтобы обеспечить и шрифты, и возможность ввода кириллицы.
Linux поддерживает два интерфейса для отображения информации — два различных режима. Один из них — это текстовый режим (консоль), а другой — графический, предоставляемый средствами X Window. Оба этих режима требуют разной настройки, которая описывается в этом документе.
ВНИМАНИЕ: X Window, TeX и другие компоненты Linux — это сложные системы. Если вы сделаете что-либо неправильно, то вы не только потерпите неудачу с кириллизацией системы, но и можете частично, если не полностью, испортить систему. Это не должно вас пугать, это просто предупреждение, которое даёт вам понять всю серьёзность процесса настройки такого типа. Очень рекомендуется сделать копии файлов конфигурации. Также неплохо бы иметь под рукой гуру (специалиста по Unix) — просто так, на всякий пожарный.
Последнюю версию этого документа всегда можно найти на моей домашней страничке в разделе Cyrillic HOWTO (russian).
Старую версию документа на английском языке, которую создал А.Беликов, можно найти на www.ldp.org или на tsx-11.mit.edu как часть Linux Document Project в разделе unmantained. Также его можно найти на различных FTP, имеющих отношение к Linux. Кроме того, этот документ может быть включён в дистрибутив Linux как его часть.
Дословный перевод устаревшей версии можно найти на на моей домашней страничке в разделе Cyrillic HOWTO (old rus).
Если у вас имеются какие-либо предложения или исправления, имеющие отношение к этому документу, то, пожалуйста, незамедлительно свяжитесь со мной по адресу E.M.Baldin@inp.nsk.su. За предоставление любой новой и полезной информации относительно поддержки кириллицы в различных Unix'ах буду крайне признателен. Не забудьте, ведь это поможет другим.
Исходным форматом документа является XML. В случае внесения большого количества исправений лучше ориентироваться на исходники: Cyrillic-HOWTO-russian.tar.bz2. Исходный документ разбит на несколько частей.
Много людей помогли мне (и не только мне) ценной информацией и предложениями. И даже большее количество людей создало программное обеспечение для public community. Мне очень жаль, если я забыл кого-то упомянуть.
Итак, признательность нашим героям— это: св. Кирилл, св. Мефодий, Александр Беликов, Андрей Беляев, Дмитрий Болховитянов, Ф.А. Брокгауз, Евгений Бырганов, Виктор Вагнер, Александр Васильев Александр Валишев, Владимир Волович, Александр Воронов, Александр Воропаев, Игорь Власенко, Владимир Дмитриев, И.А. Ефрон, Андрей Ёлкин, Александр Жуков, Антон Зиновиев, Mikhail Zislis, Евгений Коробейников, Александр Лебедев, Алексей Махоткин, Александр Михаилян, Алексей Мичурин, Ольга Лапко (за шрифты lh), Леон Кантер, Алексей Киселёв, Михаил Колодин, Евгений Краус, Mykola Lyakhovych, Алексей Hоводворский, Алексей Отт, Иван Паскаль, Фёдор Подгорный, Дмитрий Рубин, Андрей Соболев, Сергей Серебро, Дмитрий Сивашенко, Владимир Стусь, Борис Тоботрас, Дмитрий Фёдоров, Андрей Чернов, Андрей Юшков и другие — имя коим "отличные парни" (к сожалению, только парни) из relcom.fido.ru.unix и relcom.fido.ru.linux Usenet групп новостей (если кто-то хочет, чтобы я расписал поподробнее о том, за что я ему благодарен — дайте мне знать, и я это сделаю).
Cyrillic HOWTO (rus) — Copyright (C) 2000, 2001, 2002 Балдина Евгения Михайловича. Он может использоваться и распространяться под обычными Linux HOWTO условиями, описанными ниже.
В качестве основы при его создании был взят Cyrillic HOWTO — Copyright (C) 1995,1997 Александра Л. Беликова.
Далее идёт примечание к авторским правам Linux HOWTO:
Если не оговорено иначе, документы серии Linux HOWTO защищены авторскими правами их авторов. Документы серии Linux HOWTO могут воспроизводиться и распространяться полностью или частично, любым физическим или электронным способом, покуда это заявление авторского права сохраняется во всех копиях. Коммерческое распространение позволяется и поощряется, однако автора следует оповещать относительно любых подобных действий.
Все работы, использующие данный документ, включая любой документ серии Linux HOWTO, должны распространяться под этим же соглашением. То есть вы не можете накладывать дополнительные ограничения на распространение своего продукта, основанного на данном HOWTO. Исключения из этих правил могут предоставляться только при некоторых условиях; пожалуйста, войдите в контакт с координатором проекта Linux HOWTO по адресу, указанному ниже.
Другими словами, мы желаем поддержать распространение этой информации через максимально возможное количество каналов распространения. Однако, мы желаем сохранить авторские права на документы серии HOWTO, и хотелось бы, чтобы нас предупреждали о любых планах относительно распространения этого HOWTO.
Если у вас имеются вопросы, пожалуйста, войдите в контакт с Tim Bynum, координатором проекта Linux HOWTO, по адресу linux-howto@sunsite.unc.edu. Для того, чтобы получить номер телефона и дополнительную информацию для контакта, вы можете "напустить" на этот адрес finger.
Unix — торговая марка X/Open Ltd.; MS-DOS, Windows, Windows 95 и Windows NT — торговые марки Microsoft Corp.; X Window System — торговая марка X Consortium Inc. Другие торговые марки принадлежат соответствующим владельцам.
Ниже идёт оригинальный текст соглашения об авторских правах, который следует включать во все распространяемые копии этого документа и документов, созданных на его основе.
This document is Copyright (C) 2000, 2001, 2002 by Evgueni M. Baldine. It may be used and distributed under the usual Linux HOWTO terms described below.
The following is a Linux HOWTO copyright notice:
Unless otherwise stated, Linux HOWTO documents are copyrighted by their respective authors. Linux HOWTO documents may be reproduced and distributed in whole or in part, in any medium physical or electronic, as long as this copyright notice is retained on all copies. Commercial redistribution is allowed and encouraged; however, the author would like to be notified of any such distributions.
All translations, derivative works, or aggregate works incorporating any Linux HOWTO documents must be covered under this copyright notice. That is, you may not produce a derivative work from a HOWTO and impose additional restrictions on its distribution. Exceptions to these rules may be granted under certain conditions; please contact the Linux HOWTO coordinator at the address given below.
In short, we wish to promote dissemination of this information through as many channels as possible. However, we do wish to retain copyright on the HOWTO documents, and would like to be notified of any plans to redistribute the HOWTOs.
If you have questions, please contact Tim Bynum, the Linux HOWTO coordinator, at linux-howto@sunsite.unc.edu. You may finger this address for phone number and additional contact information.
Unix is a technology trademark of the X/Open Ltd.; MS-DOS, Windows, Windows 95, and Windows NT are trademarks of the Microsoft Corp.; The X Window System is a trademark of The X Consortium Inc. Other trademarks belong to the appropriate holders.
В этом разделе перечислены правила, которых следует придерживаться при написании статей для включения в Cyrillic-HOWTO-russian.
По большей части эта информация предназначена для мантейнера, так как документ довольно сильно разросся и приведении всех его частей к единому стилю становится значительной проблемой
В качестве основного формата документа выбран XML. Причиной данного выбора обуславливается историческими причинами. Изначально документ был написан в формате linuxdoc. Для преобразования в другие форматы для публикации приходилось пользоваться пакетом sgml-tools. Развитие этого пакета полностью заморожено. Для работы с кириллическими символами требовался напильник. Для корректной работы с XML уже почти есть всё необходимое, но опять же пока существует масса трудностей и на текущей стадии возможно корректное преобразование только в HTML.
Документ разбит на несколько файлов. Головном файле подключаются главы, каждая из которых лежит в своей директории. Для определения формата в начале каждого файла пишется заголовок
<?xml version="1.0" encoding="koi8-r"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
В качестве базового дистрибутива используется ALT Linux Master. Для конвертации XML в форматы публикации используется docbook-style-xsl из ,,Сизифуса'' от AltLinux.
Сборка осуществляется через Makefile. По команде make dist выполняется сборка дистрибутива для дальнейшего распространения. Makefile написан в предположении, что стили находятся в директории /usr/share/xml/docbook/xsl-stylesheets.
Файл редактируется с помощью редактора emacs (раздел “Emacs и XEmacs”). Для облегчения редактирования используется пакет psgml. Для быстрого разбора DTD используется compiled DTD— Cyrillic-HOWTO-russian.ced, который получается с помощью команды M^x sgml-save-dtd. Для того чтобы указать emacs, чтобы использовать этот файл, вместо разбора стандартного DTD, в конце каждого файла следует добавить
<!-- Keep this comment at the end of the file Local variables: mode: xml sgml-omittag:nil sgml-shorttag:nil sgml-namecase-general:nil sgml-general-insert-case:lower sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:2 sgml-indent-data:nil sgml-parent-document:nil sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil sgml-default-dtd-file:"../Cyrillic-HOWTO-russian.ced" sgml-recompile-out-of-date-cdtd:t End: -->
Переменная sgml-default-dtd-file указывает на сохранённый DTD, отличная от nil переменная sgml-recompile-out-of-date-cdtd показывает, что в случае несоответствия DTD установленному в системе его следует пересобрать.
Для проверки валидности документа можно воспользоваться встроенной командой emacs: C^c C^v. XML обязан пройти эту проверку прежде чем его можно преобразовывать в какой-либо другой формат.
Первый уровень primary должен начинаться с большой буквы, все последующие с маленькой.
Перечислены только изменения стабильной версии.
Глобальная реструктуризация: кое-что удалено, кое-что подправлено. Косметическая и смысловая правка— не более.
Перевод документа на другой базовый формат (linuxdoc похоже скончался или близок к этому состоянию). Борис Тоботрас перевёл linuxdoc в docbook с помощью linuxdoc2docbook из своего пакета TEItools, я же занялся изучением docbook и правкой получившегося чуда. Hу как тормозит Emacs— это нечто. Hу почему HOWTO документы не на LaTeXе набирают— уму не постижимо. Пользуюсь примерами от Alt Linux Team Document Project, читаю книжку "DocBook: The Definitive guide".
Разбил документ на части, так как Emacs прямо надрывается— без слёз смотреть невозможно (здесь стоит грустный смайлик).
Добавил "Рекомендации переводов сообщений программ", взятые с русской странички переводов, составленные Дмитрием Сивашенко— по-моему разумно.
Разобрался с compiled DTD для psgml— модифицировал соответствующим образом исходники.
Поработал над Makefile— причесал для своих нужд.
Добавил ChangeLog и README.
Добавил раздел Глава 15. Кириллизация дистрибутивов.
Добавил раздел index, пока с кириллицей как всегда, но со временем надеюсь, что всё устаканится.
Добавил раздел “Правила оформления документа”.
Hачал разгребать накопившиеся правки.
Раздел Библиография отформатировал как библиографию, выглядит неахти как, но какая—никакая структура.
Пара правок раздел Глава 2. Кириллица— лучше всё-таки для создания патча использовать исходники. Заодно отформатировал и вычитал ещё раз этот раздел. Добавил ссылки на библиографию.
Добавил небольшой раздел “Монгольский язык” и совсем маленький “Азиатские язык”.
Правки от Александра Воропаева: местоположение PsCyr— раздел “PSCYR”.
Обновил информацию в разделе “sharatype”
Ручное форматирование и вычитка раздела Глава 14. Кириллические шрифты.
Переписал раздел “Шрифты TrueType”.
Ручное форматирование и вычитка раздела Глава 9. Кириллизация программ.
Добавил ссылок в раздел Русские кириллические ссылки.
Правка индексов в разделе Глава 5. Локализация и Интернационализация.
С подачи Александра Васильева описан способ кириллизации xfig в разделе “xfig”.
Доделываю, то что не сделал вчера.
Ручное форматирование и вычитка раздела Глава 11. Кириллизация библиотек.
Добавил раздел “cygwin”.
Украинская ссылка от Mykola Lyakhovych.
Поправил раздел “OpenOffice”.
Содержание
Считается, что кириллица составляет видоизменение греческого алфавита. Но существуют и другие точки зрения, например, Срезневский доказывал, что Кириллица в той форме, в какой она встречается в древнейших рукописях XI в., а тем более тот кирилловский устав, который обыкновенно относится к IX в., не может считаться видоизменением тогдашнего греческого алфавита, потому что греки во времена св. Кирилла и Мефодия употребляли уже не устав (унциалы), а скоропись. Из этого бы следовало, что св. Кирилл или один из его учеников (Климент), вероятный изобретатель Кириллицы, взял за образец алфавит греческий прежних времён, или же, что Кириллица известна была на славянской почве задолго до принятия христианства.
Кириллический алфавит моложе других известных нам теперь систем. Многие учёные задавали себе вопрос, не существовал ли у Славян алфавит ещё до принятия христианства? На такое предположение наводили некоторые места из древних авторов, а именно слова известного монаха Храбра, жившего около Х в. и написавшего сочинение о изобретении славянских письмен.
Более определённые, точные и верные известия о славянской азбуке являются вместе с известиями о св. апостолах Славянства Кирилле и Мефодии, хотя и здесь на каждом шагу встречаем трудности и сомнения. Прежде всего источники не согласны в разрешении вопроса, где и когда святые мужи изобрели славянскую азбуку. В одном месте мы читаем, что они отправились в путь уже с переведёнными некоторыми священными книгами, другие же источники позволяют думать, что святые братья начали перевод только в Болгарии. Зато относительно самого факта изобретения азбуки везде мы видим согласие. Все вообще сходятся в том, что славянскую азбуку изобрёл св. Кирилл, а имя брата его св. Мефодия упоминается там лишь потому, что они вообще везде действовали вместе и что их имена всегда и везде писались оба рядом. И так мы видим что все источники говорят об одной славянской азбуке и вопрос сделался бы совершенно ясен если бы не обстоятельство, что славяне имеют не одну, а две азбуки: так названную кирилловскую и глаголическую, или кириллицу и глаголицу; эти названия новейшего происхождения и потому они не могут бросить на историю вопроса ни малейшего света. В источниках в этом отношении мы находим только весьма скудные известия.
До сих пор не решён вопрос, кто именно был изобретателем глаголицы и кириллицы. Теперь следует вопрос, какой алфавит лежит в основании этих двух славянских азбук. Для кириллицы дело совершенно ясно, по крайней мере, в одной части, а именно, что главным её основанием служит греческий уставный алфавит, которого буквы без существенных изменений повторяются в кириллице. Не так легко решить вопрос относительно тех букв, которых недостаёт в греческом алфавите: о них высказано несколько различных мнений; между прочим надо заметить, что некоторые из этих букв похожи на соответственные буквы глаголицы. Ещё труднее решить вопрос о глаголице, которая имеет начертания, на первый взгляд совсем не похожие ни на какой известный алфавит. Положительно знаем только, что кириллица распространена на востоке в странах, принадлежащих к восточной церкви, глаголица же только на западе у католических славян в Хорватии, Иллирии и когда-то может быть в Чехии. Оттого явилось предание, что изобретателем глаголицы был святой Иероним, который считается апостолом этих стран. Форма начертаний букв этих двух азбук с течением времени несколько изменялась и по этим изменениям иногда можно с довольно большой точностью определить время написания памятника.
После принятия христианства, русские приняли кирилловскую азбуку, которой стали писаться первые появившиеся на русской почве рукописи, как Остромирово Евангелие, Изборники Святослава и др., и азбука без существенных перемен просуществовала до времён Петра Великого.
Пётр, как известно, путешествовал по западной Европе, знал языки и много читал. Поэтому неудивительно, что он больше привык к латинской азбуке, которая, как и многое западноевропейское, казалась ему красивее и лучше отечественного. Притом в 1699 году напечатано было амстердамское издание книги Ильи Копьевича под заглавием "Поверстание кругов небесных", где в особенности курсив представляет поразительное сходство с теперешней нашей печатью. Затем последовали и другие амстердамские издания того же характера. Это по мнению Грота ("Спорные вопросы русского правописания от Петра Великого доныне", С.-Петербург, 1876) главным образом поразило Петра и подало ему первую мысль о преобразовании церковной печати для светских изданий.
Пётр велел вылить в Амстердаме новый шрифт, который был привезён в Россию в 1708 г., но этот шрифт признан был не вполне удобным, и уже с 1710 года начались его изменения. Одна из главнейших реформ того времени последовала 1735 г. по распоряжению Академии Наук; она состояла в следующем: буква "зело" была изгнана, а на её место введено "земля"; отменены были тоже "кси" и "V" (ижица), хотя впрочем эта последняя снова в скором времени была возвращена; прибавлена была буква "и", и снова введено существовавшее уже раньше в России "э"; наконец тогда постановили одинаково пишущиеся слова, вроде з_амок и зам_ок, отмечать ударением. Наконец в 1758 г. последовали новые перемены; эта реформа была проведена учреждённым при академии "Российским собранием" и все постановления по этому предмету были изданы как обязательное руководство для типографий двумя записками Тауберта и Шумахера. Тогда звук "и" постановили изображать тремя знаками: "и", "i", "y", а именно: "и" постановили писать перед согласными, "i"— перед гласными и в иностранных словах, кроме греческих, где на месте о пишется "y". Кроме того тогда ввели новый знак "Ю" для звука, который после стал изображаться посредством "ё"; этот последний знак был придуман и введён в употребление Карамзиным.
С тех пор уже не создавалось перемен в русской азбуке, хотя некоторые учёные старались теоретически изменять её в разных направлениях. Так прежде всего надо обратить внимание на то, что русская азбука, как и вообще всякий алфавит не вполне отвечает требованиям живого языка, в особенности, если желать точно передавать звуки литературного русского языка и — что ещё важнее — всевозможные оттенки русских говоров. Поэтому учёные прибегают к различным облегчающим дело способам, в особенности же к диакритическим, т.е. надстрочным значкам.
Русская азбука мало по малу начинает выступать за пределы русского языка и даже славянских наречий. Западные славяне употребляют латинский, более или менее прилаженный к своим языкам, алфавит; русская же азбука употребляется за пределами России ещё в Болгарии, и её ввёл с некоторыми изменениями и в Сербию Вук Степанович Караджич.
Чтобы понимать и печатать символы различных языков, система и программное обеспечение должны уметь отличать их от других символов. То есть каждый уникальный символ должен иметь уникальное представление внутри операционной системы или внутри специфического пакета программ. Такая совокупность всех уникальных символов, которые система способна распознать, называется кодировкой.
Во время создания большинства операционных систем никто не позаботился предусмотреть возможность представления информации в программах на других языках, отличных от английского. Поэтому наиболее популярной кодировкой была (и фактически ей и остаётся) ASCII (Американский Стандартный Код для Информационного Обмена).
Стандарт ASCII (или ASCII с 7-ми битами) включает в себя 128 уникальных символов. Они подразделяются на символы, которые ASCII определяет как собственно печатаемые символы, и на так называемые символы управления, большая часть которых использовалась в старых протоколах связи. Каждому элементу набора соответствует целочисленный символьный код (0-127). Подмножество печатаемых символов представляют те, которые находят на клавиатуре пишущей машинки, с некоторыми добавлениями. Каждый символ занимает одно из значений, представляемых 7ю битами, тогда как старший разряд использовался для целей управления (то есть для управления передачи в старых системах связи).
ASCII с 7 битами была расширена до ASCII с 8 битами (или расширенный ASCII). В этой кодировке диапазон символов соответствует кодам от 0 до 255. Младшие биты (0-127) — старый добрый ASCII, в то время как старший разряд добавляет ещё 128 символов. Так как эта кодировка обратно совместима с 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-ми битное программное обеспечение, обратитесь к разделу “Locale зависимое программирование”.
Так как в большинстве систем символы описываются 8-ю битами, то нет никакого способа расширить ASCII ещё больше. Способ создания новых символов в ASCII — это просто создание других расширенных ASCII реализаций. Именно так кириллица и была введена в ASCII.
Стандарт ISO 8859-5 уже упоминался как стандарт для кириллицы. Но поскольку[2] он был разработан без принятия во внимание реальных процессов, проходящих в СССР, то единственное, что было действительно достигнуто с введением этого стандарта, так это только увеличение беспорядка с кодировками кириллицы. В сообществе Internet очень популярна кодировка KOI8-R (раздел “Стандарт КОИ8”). Кодировка ISO 8859-5 используется большими компаниями, создающими программное обеспечение с возможностью обработки кириллической информации. К подобным программам, как правило, относятся большие базы данных, решения, основанные на базе OpenVMS и т.д.
Сказанное выше относится только к пост-российскому пространству — кодировка ISO 8859-5 является стандартом кириллицы по крайней мере в Македонии и Сербии.
Альтернативная кодировка — это та самая IBM кодовая страница, где все специфические европейские символы в верхней половине кодовой таблицы были заменены на кириллицу, оставляя псевдографические символы нетронутыми. Следовательно, это не портило вид программ, использующих для работы текстовые окна, а также обеспечило символы кириллицы в них. CP866 все ещё жив и чрезвычайно популярен в среде MS-DOS и OS/2[3]Кроме этого имена в файловой системе fat, vfat кодируется в этой кодировке.
Кодовая страница Microsoft CP1251 это попытка Microsoft придумать новый стандарт для кодировки кириллицы в Windows. Насколько я знаю, это не совместимо с чем-либо ещё.
Однако, в некоторых странах, например, в Болгарии и, вероятно, в республике Беларусь, cp1251 является стандартной кодировкой для Linux и для e-mail.
Стандарт КОИ8 в отличие от CP866 и CP1251, был разработан довольно давно.
Ещё раз вернёмся в далёкое прошлое. Обычно все работали только со стандартным (7-ми битным) ASCII. 8-ой бит каждого символа указывал на то, что он или управляющий символ, или просто мусор. Обычно никто не слал данные чисто 8-ми битными (каждый норовил оттяпать 8-ой бит у символов). Разработчики КОИ8 применили очень продуманный подход. Они поместили символы русской кириллицы в верхней части расширенной ASCII таблицы таким образом, что позиции кириллических символов соответствуют их фонетическим аналогам в английском алфавите в нижней части таблицы. Это означает, что если в тексте, написанном в КОИ8, убирать восьмой бит каждого символа, то мы все ещё имеем "читабельный" текст, хотя он и написан английскими символами!
Следует отметить, что KOI8-R подходит только для русских текстов, и как следствие был создан украинский вариант KOI8: KOI8-U.
Кроме Русской кириллицы KOI8-R описывает ещё и Болгарскую кириллицу. Но кодировка КОИ8 неизвестна и поэтому её употребление в Болгарии бессмысленно, хотя самые первые кириллизации персональных компьютеров были сделаны именно в Болгарии с применением КОИ8. В настоящее время в Болгарии используется кодировка CP1251.
Не удивительно, что KOI8-R быстро стал фактически стандартом для русской кириллицы в Internet. Андрей А. Чернов проделал огромный объем работы, чтобы создать стандарт. Он - автор RFC 1489 ("Registration of a Cyrillic Character Set").
UNICODE — частичная реализация стандарта ISO 10646, совместим снизу вверх, т.е. первые 256 символов UNICODE полностью копируют Latin-1 (ISO 8859-1). В настоящее время распределено около 40.000 позиций из возможных 65.535 (2 байта на букву), и им соответственно присвоены стандартные имена. Последнее значительное изменение — введение символа валюты EURO — произошло в сентябре 1998 г. Позиции зарезервированы за буквами практически всех известных алфавитов, включая древнеегипетские иероглифы — то есть, используя этот стандарт, можно писать одновременно на русском и греческом, делая вставки на японском, с использованием одного-единственного шрифта (подробности — `man 7 utf-8').
Позиции, под которые по стандарту надо отводить по 4 байта, то есть 2147418112 символов — пока не заняты.
Подробнее про этот формат можно посмотреть по адресу http://www.unicode.org.
Посмотреть набор символов UNICODE можно здесь: http://charts.unicode.org/ .
Следует различать "славянские" языки и "кириллическую" письменность.
Из всей группы славянских языков, кириллическую письменность используют русский (ru), украинский (uk), белорусский (be), болгарский (bg). Другие: сербский (si) и хорватский (hr) языки используют латиницу и кириллицу, с преобладанием в последнее время латиницы.
Остальные славянские языки используют модифицированную латиницу с диакритиками: чешский (cs), польский (pl), словацкий (sk).
В советское время (примерно в 1930 годы) Академия Наук СССР разработала около десятка письменностей для неславянских народов республик CCCP и братских стран на основе кириллической графики.
Из того, что знаю: монгольский, коми-зарянский, коми-пермяцкий, чувашский, башкирский, чеченский, якутский и т.д. (попробую собрать полный список). Модифицированная кириллица. Большинство букв есть в кириллической секции UNICODE.
У многих из этих языков ранее (до 1930 г.) были собственные письменности на основе арабского или латиницы, так что сейчас активно происходят процессы возврата на старую графику. Для тюркских народов более характерен переход на модифицированную латиницу по примеру Турции, нежели на арабскую письменность[4]
Hа сайте www.peoples.org.ru собрано подробная информация о языках имеющих хождение на территории России.
В качестве стандартной кириллической кодировки используется кодировка CP1251.
Для более подробной информации следует обратиться к страничке Все о беларусизации Линукса.
В качестве стандартной кириллической кодировки используется кодировка CP1251. Вместо кодовой страницы CP866 используется кодировка МИК.
Для получения более подробной информации следует обратиться к источникам, собранным в разделе Болгарские кириллические ссылки.
В качестве стандартной кириллической кодировки используется кодировка ISO 8859-5.
Для получения более подробной информации следует обратиться к источникам, собранным в разделе Македонские кириллические ссылки.
Специфика кириллизации для Украины состоит в том, что часто нужно использовать украинский и русский одновременно. Отказаться от последнего практически не возможно. Из-за этого макросы Злобина (См. раздел “Cyrillic console tools”), мало пригодны т.к. не позволяют использовать 3 языка одновременно. Приходится редактировать существующие раскладки. На пример раскладки для иксов можно глянуть на www.linux.org.ua
Украинский алфавит можно посмотреть, есть на cad.ntu-kpi.kiev.ua или на Странице Верховного Совета Украины.
Кроме стандартных KOI8-U и CP1251 на Украине имеет хождение кодировка RUSCII или РСТ2018-91 или CP1125. Подробнее можно посмотреть здесь: www.cad.ntu-kpi.kiev.ua Эта кодировка используется очень часто, например, в эхе kiev.money можно получить + за использование другой.
Кроме KOI8-U (RFC2319) часто встречаются упоминания о KOI8-RU.
Для получения более подробной информации следует обратиться к источникам, собранным в разделе Украинские кириллические ссылки.
Русский алфавит — последовательный ряд букв, передающих звуковой состав русской речи и создающих письменную и печатную форму для русского языка. Русский алфавит восходит к кириллице, в современном виде существует с 1918. Содержит 33 буквы, 20 из них передают согласные звуки (б, п, в, ф, д, т, з, с, ж, ш, ч, ц, щ, г, к, х, м, н, р, л); 10 — гласные звуки (а, э, о, ы, и, у) или (в определённых позициях) сочетания "j + гласный" (я, е, ё, ю); буква "й" передаёт "и неслоговое" или "j"; "ъ" и "ь" не обозначают отдельных звуков. Русский алфавит служит для основы некоторых других языков.
Пара слов в поддержку буквы "ё". Эту букву незаслуженно забывают при наборе текстов. Более того, некоторые деятели ратуют за её полное упразднение. Однако, коль уж вам довелось узнать русский язык, то говорить и писать на нём следует правильно.
Поставь букву "ё" на её место!
Для проверки правописания надо использовать “Словарь Александра Лебедева”, где есть реальная поддержка "ё".
Для получения более подробной информации следует обратиться к источникам, собранным в разделе Русские кириллические ссылки.
В качестве стандартной кириллической кодировки используется кодировка ISO 8859-5.
Для получения более подробной информации следует обратиться к источникам, собранным в разделе Сербские ссылки.
Монгольская письменность на основе кириллицы была разработана в САH во времена СССР. Кроме кириллической в Монголии существует и традиционная письменность, но в отличии от кириллической она не описывается с помощью восьмибитных кодовых таблиц.
Для получения более подробной информации следует обратиться к источникам, собранным в разделе Монгольские кириллические ссылки.
Для получения более подробной информации следует обратиться к источникам, собранным в разделе Азиатские кириллические ссылки.
Содержание
Кириллизация текстового режима — самый простой способ отображать и вводить символы кириллицы.
Ниже я опишу способ, как "справиться" с драйвером Linux консоли. Поэтому, если вы пытаетесь кириллизовать консоль в другой системе, то не ожидайте, что описанные приёмы будут в ней работать. Взамен проконсультируйтесь с руководством по драйверу терминала и пошлите мне любую информацию, которую вы найдёте. В этом случае я смогу включить её в дальнейшие версии этого документа.
Консольный драйвер Linux — прекрасный образец хорошо настраиваемого программного обеспечения. Он может менять как шрифты, так и раскладки клавиатуры.
Чтобы настроить консоль, вы можете воспользоваться одним из двух описанных ниже пакетов: console-tools (См. раздел “consoletools”) или kbd (См. раздел “kbd”).
В ранних версиях 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 и радоваться хорошим шрифтам, то используйте пакет console-tools-cyrillic Виктора Вагнера (См. раздел “Cyrillic console tools”).
Сам пакет можно найти по адресу console-tools.
В том случае, если ваш дистрибутив использует пакет consoletools, вам необходимо выполнить следующие действия (естественно, эти команды не следует выполнять дословно):
foo="/место/где/лежат/ваши/консольные/шрифты"
loadkeys $foo/ru.map
consolechars -v -f $foo/Cyr_a8x16 -m $foo/koi2alt
После выполнения этих команд и загрузки соответствующих файлов вы можете переключать раскладку клавиатуры для ввода кириллических символов с помощью правого Control (иногда переключение по умолчанию "вешается" на Alt или Caps Lock).
К сожалению, шрифты и клавиатурные раскладки, поставляемые вместе с этими пакетами, не позволяют воспользоваться всеми возможностями консольного драйвера. Поэтому я рекомендую вам использовать пакет console-tools-cyrillic Виктора Вагнера (См. раздел “Cyrillic console tools”).
Этот пакет содержит кириллические консольные шрифты и таблицы перекодировки для Linux, а также раскладки клавиатуры и прочие полезные вещи. Последнюю версию этого пакета можно обнаружить по адресу ftp://ftp.ice.ru/pub/fonts/linux/. Этот пакет активно развивается Виктором Вагнером (vitus@ice.ru).
Для настройки следует первым делом следует прочитать файл README, который идёт в поставке. Для работы с пакетом необходимы утилиты consoletools (См. раздел “consoletools”), впрочем, экранные шрифты можно использовать и с последними kbd.
Все шрифты сделаны на базе альтернативной кодировки (CP866). Почему? Потому что использование любой другой кодировки русских букв в качестве физической в текстовом режиме VGA приводит к тому, что горизонтальная псевдографика получается с разрывами. Это аппаратное свойство VGA, которое никак не лечится. Единственный выход — использовать шрифты, в которых псевдографика расположена на тех же позициях, что и в СР437.
В пакет входят семь комплектов шрифтов различной степени пригодности и функциональности. Все шрифты содержат в себе таблицу отображения в unicode.
В дистрибутив пакета включены кириллические таблицы перекодировки из распространенных кодировок русского, белорусского, болгарского, сербского и украинского языков в unicode. Использование этих таблиц перекодировок совместно со шрифтами, включёнными в этот пакет, позволяет вам настроить консоль в любую требуемую кодировку кириллицы.
В пакет включена комплект для генерации клавиатуры, основанный на идеях, предложенных Кириллом Злобиным (slobin@ice.ru). Раскладки клавиатуры получаются с помощью обработки препроцессором C (/usr/bin/cpp) файла кодировки и собственно файла раскладки. Использование макросов для описаний клавиш позволяет существенно полнее чем в большинстве распространённых раскладок определить комбинации Alt-клавиша, Ctrl-клавиша и т.д., как в русском, так и в латинском режимах.
Для настройки консоли я использую команды:
consolechars -f UniCyr_8x16.psf -m koi8-r.acm loadkeys console_russian.map
Для создания клавиатурной раскладки console_russian.map выполняю команду:
cpp -DWINONLY -DBACKSPACE cyr-russian-ms.cpp > console_russian.map
Это microsoft раскладка, переключение осуществляется с помощью дополнительной клавиши Windows "клавиши системного меню".
P.S. Для украинизации вместо koi8-r.acm надо подставить koi8-u
Довольно много дистрибутивов Linux устанавливают kbd как обязательную часть системы. Сам пакет доступен по адресу kbd.
Пакет kbd содержит утилиты управления клавиатурой, кроме этого, с ним поставляется широкий выбор шрифтов и раскладок.
Установка кириллицы с помощью kbd обычно состоит из:
Загрузки соответствующей раскладки клавиатуры с помощью программы loadkeys. Практически в каждом дистрибутиве можно установить раскладку клавиатуры, которую система загружает по умолчанию во время загрузки, с помощью соответствующей программы настройки (например, для RedHat — это /usr/sbin/kbdconfig). Вы также можете просто запустить loadkeys из вашего ˜/.profile или сделать это руками.
Настройки экранного шрифта. Это делается с помощью программы setfont. Файлы шрифтов находятся в /usr/lib/kbd/consolefonts.
Если вы являетесь приверженцем программ, работающих в текстовом режиме и использующих достоинства псевдографики PC (таких как Midnight Commander), то вы можете предпочесть использовать шрифты с CP866 кодировкой и консольной раскладкой (console character map). Это означает, что ваша консоль отображает CP866 шрифты, но все кириллические символы, соответствующие KOI8-R кодировки, соответственным образом отображаются в CP866 и поэтому выглядят правильно. Преимущество этого метода заключается в том, что он позволяет использовать псевдографические символы кодировки CP866.
Ниже перечислены команды, которые позволяют достичь этого эффекта.
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
Магическая последовательность необходима для перекодировки вывода символов на экран, если вы используете CP866 шрифты. Она работает, и этого достаточно для спокойной жизни. Однако, если вам любопытно, то посмотрите документацию к пакету kbd.
Теперь вы, вероятно, хотите проверить правильность кириллизации консоли.
Соответствующим образом настройте bash (раздел “bash”) или tcsh (раздел “csh/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
См. 'man console_codes' и 'man stty'
Содержание
Подобно консольному режиму, X Window также требует некоторой настройки. Настройка включает в себя настройку ввода и установку шрифтов для X Window. Данные действия обсуждаются ниже.
Прежде всего, вы должны достать шрифты, содержащие изображения кириллических символов в соответствующих местах. Следует отметить, что все современные дистрибутивы имеют KOI8-R шрифты, более-менее пригодные для использования, так что если xlsfonts не показывает их, то они просто не установлены или не включены в X Font Path.
X Window включила набор KOI8-R шрифтов, разработанных Cronyx, ещё в конце 1995 года. Эти шрифты являются также частью XFree86.
Некоторые дистрибутивы (как правило, очень старые) могут не включать кириллические шрифты для X Window — в этом случае их придётся устанавливать самим.
Подробнее о шрифтах для X Window и о том, где их можно найти, смотрите в разделе “Шрифты для X Window”.
Более современную коллекцию шрифтов для X Window можно взять у Дмитрия Болховитянова по адресу пакет CYR_RFX.
Вам следует проверить, установлены ли эти шрифты в вашей системе. Спросите системного администратора, или, если вы сами являетесь администратором, проверьте вашу систему сами, а именно:
Выполните 'xlsfonts | grep koi8'. Если в результате выполнения команды появится список шрифтов, то ваш X сервер уже знает об их существовании.
Или наберите
find / -name crox\*.pcf\*
для того, чтобы найти местоположение шрифтов кириллицы в системе. Вы должны будете сделать эти шрифты доступными для X сервера, как — описано ниже.
Если вы не нашли таких шрифтов в вашей системе, то вы должны установить их сами:
Скачайте соответствующий набор шрифтов. Подробнее о шрифтах для X Window и о том где их можно найти можно посмотреть в разделе “Шрифты для X Window”.
Теперь, когда у вас есть шрифты, создайте для них каталог. Помещение новых шрифтов в уже существующий каталог шрифтов является, мягко говоря, не очень хорошей идеей. Поместите их, например, в /usr/lib/X11/fonts/cyrillic для настройки всей системы или просто создайте каталог у себя только для персонального пользования.
Если новые шрифты поставляются в формате BDF ( файлы *.bdf), то вы должны скомпилировать их. Для каждого шрифта выполните:
bdftopcf -o <font>.pcf <font>.bdf
Можете сжать их с помощью программы gzip или, если ваш дистрибутив X Window достаточно современный, с помощью bzip2, что даст небольшой выигрыш в степени компрессии:
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)
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 встроена во все современные дистрибутивы XFree86. Существует отдельный TrueType сервер шрифтов XFSFT для X.
Для информации о том, где можно найти TrueType шрифты, следует обратиться к разделу “Шрифты TrueType”.
Коммерческие X сервера (Accelerated X, Metro X) уже довольно давно включили поддержку TrueType в свои дистрибутивы.
Установочная процедура сервера шрифтов довольно проста: делайте то, что сказано в документации.
Hемног ниже даётся пример того, как можно установить TrueType шрифты. О том, как подсунуть их X Window — смотрите раздел “Установка шрифтов для 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 вместо xfsft, то вам следует использовать опцию перекодировки:
xfstt ... --encoding koi8-r,windows-1251,iso8859-1
После этого новые шрифты будут доступны для X Window — этот факт вы можете проверить, запустив xfontsel, и, удостоверившись в наличии семейства шрифтов ttf.
В последних выпусках X (X11R61 и выше) имеются два "стандартных" способа ввода с клавиатуры: Xkb или X KeyBoard (раздел “Настройка Xkb”) и старый способ, работающий через утилиту xmodmap (см. раздел “xmodmap”).
Полную и исчерпывающую (даже слишком исчерпывающую) документацию по настройке Xkb можно найти у Ивана Паскаля.
При старте X-сервера, модуль XKB зачитывает все необходимые данные из текстовых файлов, которые образуют "базу данных" настроек XKB.
Строго говоря, большинство из этих файлов сам модуль XKB не читает. Он вызывает программу xkbcomp, которая переводит содержимое этих файлов в двоичный формат, понятный непосредственно модулю XKB.
Но для настройки это не так уж важно, поскольку вызов xkbcomp происходит автоматически, незаметно для пользователя.
База данных, необходимых XKB, состоит из 5 компонентов:
keycodes Таблицы, которые просто задают символические имена для скан-кодов. Например:
<TLDE>= 49; <AE01> = 10;
types Описывает типы клавиш. Тип клавиши определяет — как должно меняться значение, выдаваемое клавишей в зависимости от модификаторов (Control, Shift и т.п.). Так, например, "буквенные" клавиши относятся к типу ALPHABETIC, что означает, что они имеют разное значение в зависимости от состояния Shift и CapsLock. А клавиша [Enter] имеет тип — ONE_LEVEL, что означает, что её значение всегда одно и то же, независимо от состояния модификаторов.
compat (сокращённое от compability) Описывает "поведение" модификаторов. В XKB имеется несколько внутренних переменных, которые, в конечном счёте, и определяют — какой символ будет генерироваться при нажатии клавиши в конкретной ситуации. Так вот, в compat как раз описывается — как должны меняться эти переменные при нажатии различных клавиш-модификаторов. В этом же разделе обычно описывается и поведение "лампочек-индикаторов" на клавиатуре.
symbols Таблицы, в которых для каждого скан-кода (имени скан-кода, определённого в keycodes) перечисляются все значения (symbols), которые должна выдавать клавиша. Естественно, количество различных значений зависит от типа клавиши (которые описываются в types), а какое именно значение будет выдано в конкретной ситуации, определяется состоянием модификаторов и их "поведением" (которое описывается в compat).
geometry Описывает "геометрию" клавиатуры — то есть расположение клавиш на клавиатуре. Эти описания нужны не столько самому X-серверу, сколько прикладным программам, которые рисуют изображение клавиатуры.
Все эти компоненты разложены по одноимённым директориям в директории {XROOT}/lib/X11/xkb (в дальнейшем, я буду обозначать её {XKBROOT}).
Весь набор компонентов, необходимых для настройки XKB, описывается в файле конфигурации X-сервера в секции Keyboard.
Чтобы настроить XKB, в файле конфигурации X-сервера надо задать параметры XkbRules, XkbModel, XkbLayout и, если вам нужно что-то не совсем стандартное — XkbVariant и XkbOptions.
Например,
XkbRules "xfree86" XkbModel "pc104" XkbLayout "ru" XkbVariant "winkeys" XkbOptions "grp:shift_toggle,grp_led:scroll"
означает, что XKB должен в соответствии с правилами, описанными в файле {XKBROOT}/rules/xfree86, выбрать настройки для клавиатуры типа "pc104" (104 кнопки), русского алфавита (английский алфавит будет включён "по умолчанию").Если у вас "windows" клавиатура (что верно в 99% случаев), то полезно указать XkbVariant как "winkeys", в противном случае оставьте эту опцию пустой — "". В самом конце идут дополнительные опции для вашей "раскладки клавиатуры" — "grp:shift_toggle,grp_led:scroll", которые описывают метод — переключения: две клавиши "Shift" , при этом загорается лампочка Scroll Lock на клавиатуре.
Небольшое отступление — "о клавише-переключателе рус/лат".
Другие варианты смены кодировки:
grp:toggle — переключение правым Alt;
grp:shift_toggle — двумя клавишами shift;
grp:ctrl_shift_toggle — ctrl+shift;
grp:ctrl_alt_toggle — ctrl+alt;
grp:caps_toggle— переключение по CapsLock;
grp:lwin_toggle— переключение по левой "Win" клавише на Windows клавиатуре (для X Window старше 4.2);
grp:rwin_toggle— переключение по правой "Win" клавише на Windows клавиатуре (для X Window старше 4.2);
grp:menu_toggle— переключение по клавише "Контекстное меню" на Windows клавиатуре (для X Window старше 4.2);
ctrl:ctrl_ac — CapsLock;
grp:switch— переключение по правому Alt только на момент нажатия[5];
Когда был написан первый вариант этих рекомендаций, сама раскладка "русской" клавиатуры (symbols/ru) включала в себя и "переключатель групп" рус/лат, "подвешенный" на клавишу CapsLock. С одной стороны, это было удобно — в простейшем случае достаточно было выбрать "русскую раскладку", и вы автоматически получали и клавишу для переключения "на русский". Но, с другой стороны, это было неудобно для тех, кто предпочитает в качестве переключателя рус/лат другую клавишу (или комбинацию клавиш). Конечно, выбрать другой переключатель не составляло труда, но при этом оставался и переключатель на CapsLock, что многим не нравилось. Для того, чтобы убрать его, надо было "залезть" в соответствующий файл и вручную подправлять соответствующую раскладку.
В конце концов (начиная с версии 3.3.4) сами разработчики XFree убрали этот "переключатель" из "русской раскладки". Но в связи с этим появились и некоторые проблемы — теперь клавишу-переключатель надо явно "заказывать" при конфигурировании XKB.
Самый простой способ настройки — использовать программу для автоматической настройки X Window.
В XFree86 такая программа называется XF86Setup.
При этом "по умолчанию" используются "правила" (XkbRules) — xfree86. Вам нужно будет только выбрать "модель" (XkbModel), "схему" (XkbLayout) и "способ переключения групп" (переключатель "РУС/ЛАТ").
Кроме того, при желании вы можете изменить "положение клавиши Ctrl". Естественно, в конфигурации это будет выглядеть как соответствующие строчки XkbOptions.
Итак. Запустите программу XF86Setup, выберите раздел Keyboard. В этом разделе выберите из меню Model (тип клавиатуры) и Layout (язык). Не забудьте отметить в отдельных списках (в правой части) подходящий "переключатель групп" и, если хотите — "расположение Ctrl".
При выходе из программы она запишет соответствующие строчки в файл конфигурации XFree в секции Keyboard.
Для смены кодировки можно воспользоваться любой из многочисленных программ переключения кодовых страниц через xkb — например, я пользуюсь программой xxkb Ивана Паскаля.
Описанное ниже относится к относительно старым версиям X Window (Заведомо к версиям, меньшим 3.3.3), в которых способ Xkb (раздел “Настройка Xkb”) не работает.
В случае русификации через xmodmap первое, что вы должны сделать, — это отключить Xkb!
Чтобы отключить поддержку Xkb, в файле XF86Config изучите раздел Keyboard и закомментируйте все строки, начинающиеся с Xkb (регистр не имеет значения). Взамен добавьте следующую строку:
XkbDisable
Программа xmodmap позволяет настроить коды, соответствующие различными символам и их комбинациям. Эта настройка основана на файле, содержащем таблицу перекодировки.
Я настоятельно советую вам самостоятельно не разбираться с xmodmap, по крайней мере для начала. Вы не получите ничего, кроме головной боли и разочарования. Вместо этого я рекомендую вам установить пакет xruskb, который позволяет вам сконфигурировать большинство входных параметров перекодировки без необходимости сталкиваться с xmodmap.
Все описанное приложимо не только для русского языка. Надо изменить только клавиатурные раскладки, ну и шрифты, естественно, будут иметь другую кодировку.
Возможно, найденные вами шрифты окажутся в отличной от нужной вам кодировки. Для перекодировки BDF-шрифтов можно использовать программу trbdf из пакета trscripts.
Эта программа поддерживает кодовые страницы ibm855, ibm866, iso-8859-5, koi8-c, koi8-r, koi8-u, mac-cyrillic, mik, unicode и ecma-cyrillic. Символы, отсутствующие в исходной кодировке, аппроксимируются, так что её можно использовать, например, для генерации KOI8-U шрифтов из KOI8-R.
Hачиная с версии 4.0.3 XFree официально поддерживает кодировку cp1251. Если версия вашей XFree меньше 4.0.3, то поддержку cp1251 можно получить тремя способами:
Использовать дистрибутив, поддерживающий cp1251.
Патчить XFree. Патч поддержки cp1251 для 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.
[5] В случае замены toggle на switch в комбинациях, описанных выше, переключение регистра возникает только на момент нажатия комбинации.
Содержание
Основной объём этого документа занимают описания, как заставить различные программы понять кириллицу. Обычно каждая программа требует, чтобы это был её собственный метод, как правило, чрезвычайно отличный от других. Кроме того, у некоторых программ поддержка языков, отличных от английского далека от идеала, не говоря уж об их неспособности взаимодействовать, используя родной язык пользователя вместо английского.
Проблемы, перечисленные выше, сильно осложняют жизнь, так как программное обеспечение редко создаётся только для местного рынка. Переработка существенных частей программного обеспечения каждый раз при входе на новый международному рынок очень неэффективна. Интернациональная поддержка, осуществляемая собственными средствами программы, уникальным и присущим только ей способом, в терминах долгосрочного планирования далеко не блестящая идея.
Следовательно, возникает потребность в стандартизации. И такой стандарт существует.
Все связанное с вышеперечисленными проблемами разделено в соответствии c двумя базисными концепциями: localization и internationalization. Под локализацией мы имеем в виду создание программ, способных обрабатывать различные языковые соглашения для различных стран. Позвольте привести пример. Формат даты, принятый в Соединённых Штатах, имеет вид ММ/ДД/ГГ. Однако в России наиболее популярный формат — ДД.ММ.ГГ. Другие проблемы включают в себя представление времени, форматы числа и представления валюты. Кроме этого, один из наиболее важных аспектов локализации — это определение соответствующих классов символов, то есть определение, какие символы в наборе символов являются "кирпичиками" языка (буквами) и как они упорядочиваются. С другой стороны, локализация не работает со шрифтами.
Интернационализация (или i18n для краткости), как предполагается, решает проблемы, связанные со способностью программы взаимодействовать с пользователем на его родном языке.
Обе эти концепции должны быть стандартизованы, давая программистам непротиворечивый путь создания программ, работающих в национальной среде.
Хотя стандартизация ещё в процессе, много её частей уже фактически являются стандартом, так что они могут использоваться без особых проблем.
Я опишу общую схему создания программ, использующих описанные выше возможности стандартным способом. Так как это заслуживает отдельного документа, я буду давать только очень общее описание и указатели на более полные источники.
Одно из основных понятий локализации — locale. Под locale подразумевается набор соглашений, специфических для отдельно взятого языка в отдельно взятой стране. В общем случае говорить, что locale определяется только страной, неправильно. Например, в Канаде могут быть определены два locale — язык "Канада/Английский" и язык "Канада/Французский". Более того, язык "Канада/Английский" не является эквивалентом языку "Великобритания/Английский" или "Американский/Английский", точно так же "Канада/Французский" язык — не эквивалент языку "Франция/Французский" или языку "Швейцария / Французский" .
Более подробное описание проблем/возможностей/достоинств локализации на русском языке можно найти на страничке Локализация, как она есть.
Каждая locale — это специальная база данных, определяющая, по крайней мере, следующие правила и соглашения:
Классификация символов и преобразований,
Представление валюты,
Представление чисел (то есть Десятичные символы),
Формат даты / времени.
Прежде всего — подробная документация о локали имеется на www.sensi.org/~alec/locale Обращайтесь туда, если вам нужны нестандартные варианты (например, отключение русскоязычного интерфейса с сохранением правильной сортировки и т.д.)
Документацию по локали X Window можно найти по адресу www.tsu.ru/~pascal/x_locale/
Вот инструкция для нетерпеливых (только для glibc).
Вам нужно:
Зайти в /usr/share/locale и создать там симлинк ru_RU.KOI8-R, указывающий на ru_SU. Эта операция необходима только для glibc < 2.1.2.
Как-либо прописать установку переменной LANG в стартовых скриптах. В RedHat-based дистрибутивах это делается путём редактирования файла /etc/sysconfig/i18n, где, кроме прочего, должна быть строчка
LANG=ru_RU.KOI8-R
В общем случае можно прописать в /etc/profile
LANG=<ваша кодировка> export LANG
Проверить, что все работает, можно, запустив locale и посмотрев, что она выдаёт, а также набрав cal, date — названия месяцев и дней недели должны быть по-русски.
Гораздо же честнее сделать отдельный настоящий каталог: /usr/share/locale/ru_RU.KOI8-R/ (конечно, если его нет в данном дистрибутиве).
Некоторые дистрибутивы неправильно включают
LANG=ru LC_ALL=ru_RU.KOI8-R
Это НЕПРАВИЛЬНО, почему так делать нельзя — описано ниже.
А теперь поговорим о том же, но гораздо подробнее. Итак:
Как включить локализацию?
Если на UNIX машине (с POSIX:1996) средства locale правильно установлены и программы правильно написаны, то локализация включается путём задания строки окружения LANG:
$ export LANG={язык}
Если такой строки окружения нет, то работает значение локализации по умолчанию: LANG="C" или LANG="POSIX" (что то же самое) — минимальный набор параметров, необходимый для функционирования программ на ANSI C (ISO 9899:1990), в кодировке US-ASCII (7 bit) (“Символы и кодировки”).
Если ваша система имеет полный набор утилит POSIX.2, то узнать установленные в системе и допустимые значения для LANG= можно командой locale:
$ locale -a
По новому стандарту (POSIX.2 приложение E) значения локализации записываются в форме:
language_TERRITORY.Codeset
или формально:
language[_TERRITORY[.Codeset[@modifier]]]
Стандарт ISO 639 описывает "language names", ISO 3166 — "territory names". Территории _SU более не существует (вернее, теперь она означает Судан), однако для совместимости некоторые системы продолжают её поддерживать как alias: ru_SU —> ru_RU.
Для русского языка LANG устанавливается, как правило, равным LANG="ru_RU.KOI8-R" или LANG="ru_RU.ISO_8859-5". То есть:
$ export LANG="ru_RU.KOI8-R"
Для установки украинской локали эта переменная должна быть равна соответственно uk_UA.koi8-u.
Согласно стандарту допустимы также короткие именования значений locale, которые часто оформляются как aliases (псевдонимы) полного наименования. Например "C" —> "POSIX".
$ export LANG=ru $ export LANG=ru_RU $ export LANG=ru_RU.KOI8-R
Однако, если вы указываете короткое имя, может оказаться, что ваша кодировка оказывается вовсе не KOI8-R (почему следует использовать именно koi8-r, описано в разделе “Символы и кодировки”). Лучше не пользоваться значениями по умолчанию, а указывать точное длинное имя.
Во FreeBSD 2.x так и есть. Для Linux — зависит от дистрибутива. В коммерческих реализациях (Solaris, SCO, AIX etc), как правило, используется значение LANG="ru_RU", или укороченное LANG="ru" (и, как правило, кодовая страница ISO8859-5 по умолчанию).
Некоторые могут пожелать сделать себе локализацию в другом наборе символов: ru_RU.X-CP-866 (ru_RU.IBM866), ru_RU.x-mac-cyrillic, ru_RU.ISO_8859-5 или даже ru_RU.CP1251 — на это нет никаких ограничений. Все эти кодировки совершенно равноправны и зарегистрированы (кроме x-mac-cyrillic) в IANA. Только не забудьте, что локализация, ввод-вывод и отображение национальных символов на терминале — это совершенно разные вещи.
Если система локализована не полностью и использовать полное переключение на другой язык (с помощью export LANG={язык}) нельзя, можно включить locale только для функций locale API библиотеки libc, задав значение категорий локализации. Можно также присваивать разные значения разным категориям, задавая их имена в строках окружения:
Если вас раздражают русские даты, сообщения и man-ы, но нужно обрабатывать русские буквы и т.д., то сделайте:
$ export LANG="C" $ export LC_CTYPE="ru_RU.KOI8-R" $ export LC_COLLATE="ru_RU.KOI8-R" $ export LC_TIME="C"
Hиже идёт описание различных опций locale
LC_CTYPE — определяет одиночные символы,
LC_NUMERIC — формат чисел,
LC_TIME — формат времени,
LC_COLLATE — используется для сравнения строк,
LC_MONETARY — валюта,
LC_MESSAGES — системные сообщения,
LC_PAPER — формат бумаги,
LC_NAME — формат имён,
LC_ADDRESS — формат адресов,
LC_TELEPHONE — формат телефонов.
Не рекомендуется использовать строку окружения:
$ export LC_ALL={язык}
поскольку формально такой категории локализации нет, она "виртуальная" и обозначает "одновременно все категории". Из-за этого во многих реализациях locale API возникают проблемы. Проблемы могут возникнуть также с программами, работающими с PostScript: в категории LC_NUMERIC локализации ru_RU в соответствии со стандартом ГОСТ в качестве десятичного разделителя используется символ 'запятая': "," в то время, как в стандарте языка PostScript — точка "." А категория LC_NUMERIC оказывает влияние на printf("%f",float);. Используйте значение C (POSIX) для LC_NUMERIC, если вы работаете с PostScript:
$ export LC_NUMERIC="POSIX"
Посмотреть текущие значения категорий локализации можно все той же утилитой locale (без параметров).
$ locale
ПРИМЕЧАНИЕ: В некоторых современных системах начинает появляться локализация в UNICODE. Hапример, для России эта локаль включается заданием строки окружения LANG="ru_RU.UTF-8".
С locale программа не должна знать о различных символьных преобразованиях и правилах сравнения, описанных выше. Вместо этого они используют специальный API, который действует по правилам, определённым locale. Кроме того, нет необходимости для программы пользоваться только одной locale для соблюдения всех правил — возможно пользоваться другими правилами, описанными в других locale (хотя такой метод не очень хорош).
Из man setlocale(3):
Программа может бы