BASH Programming - Введение

         

Кириллизация дистрибутивов


В этом разделе кратко описываются способы настройки кириллицы, которые специфичны для различных дистрибутивов Unix. Способы разнятся не только от дистрибутива к дистрибутиву, но и от версии дистрибутива.

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



Графические редакторы


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



Современные Type1 фонты поддерживают UNICODE


Современные Type1 фонты поддерживают UNICODE и содержат русские символы с именами глифов типа "afii10049".

К сожалению, многие приложения видят только первые 256 символов Type1 шрифта (Latin1 или ISO_8859-1). Именно для таких приложений нужны "отхаканные" шрифты, где в диапазоне 0-255 расположены символы KOI8-R. Взять можно, например, с . Этот набор даже имеет необходимую часть для добавления к файлу Fontmap. Вы должны утянуть содержание каталога /pub/cyrillic/psfonts. В файле README описываются все необходимые подробности.

"Нормальные"  Type1 шрифты есть в Adobe Type Manager (ATM) или в поставке OS/2.

На сайте

можно найти несколько бесплатных Type1 шрифтов -- например, Pushkin.

В разделе

можно найти дополнительную информацию по использованию Type1 шрифтов.


Шрифты для X-window


Наиболее часто встречающиеся растровые шрифты перечислены ниже.

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



Шрифты для TeX/LaTeX


При работе с TeX/LaTeX можно использовать Type1 шрифты -- где их можно найти, описано в разделе .

Внимание: При использовании Type1 шрифтов в тексте, насыщенном математическими символами, восприятие текста умеренно ухудшится (если не принимать дополнительных усилий по согласованию шрифтов). Математические CM-шрифты не будут сочетаться с текстовыми шрифтами.

Ниже описаны стандартные кириллические шрифты LaTeX, которых хватает в 99.99% случаев.



Шрифты TrueType


Сами шрифты ttf впервые были предложены корпорацией Apple, но своего наивысшего рассвета достигли с помощью небезызвестной компании Microsoft.

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

Благодаря своей популярности шрифтов в этом формате (в том числе и кириллических) в сети можно найти в очень большом количестве; только, как правило, они имеют не очень высокое качество, и пока мало программ под Unix/Linux могут использовать их без "напильника и кувалды". Но времена меняются -- поддержка ttf уже встроена в X-window, с помощью gnu-библиотеки freetype некоторые программы умеют выводить шрифты на экран и в печать (например, текстовый редактор yudit).

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



Кириллические шрифты


Здесь будут ссылки на кириллические шрифты -- как на платные, так и на свободные наборы.

Александр Бердников из fido7.ru.tex, цитата о том, можно ли найти Postcript шрифты для набора научных текстов:

"На настоящий момент практически единственный продавец на рынке шрифтов -- это ParaType. Остальные (в том числе и "свободные"  сайты типа Vedi или Litera) предлагают в основном акцидентные шрифты (качество не проверял), для набора текстов не пригодные. С ценами Paratype можно ознакомится, естественно, на . Однако при отборе шрифтов надо очень внимательно прочитать лицензию и договор (то есть, какие реально у тебя будут права, какие реально есть гарантии и какую реально поддержку и сопровождение обеспечивает Paratype). Кроме того, необходимо озаботиться грамотным подбором гарнитур для начертаний \rm, \sf, \sc, \tt так, чтобы они были совместны. (Иначе можно было бы ограничиться "свободной Литературной"  от ParaType, но вопрос: откуда взять замену всем остальным ТеХовским шрифтам?!)"

Так что лучше пользоваться стандартными шрифтами lh Ольги Лапко.



Библиография


Андрей Чернов. . KOI-8: информация и настройка.

Ulrich Drepper. . Полное описание подхода GNU к делу i18n.

Michael Karl Gschwind. . Различные ссылки по теме i18n.

Сергей Наумов. . Информация о настройке кириллицы.

The Open Group .

RFC 1489

Alec Voropay. . Использование locale на русском.



A2ps конвертер


Преобразователь текста в PostScript был и остается одним из наиболее универсальных средств печати. Все, в чем вы теперь нуждаетесь -- это PostScript принтер.

Команда, которую я использую для этого:

a2ps -X koi8r --print-anyway <файл>



в нем добавил подраздел для


Добавил новый раздел , в нем добавил подраздел для русификации консоли дистрибутива SuSe -- для затравки.

В раздел "Кириллизация дистрибутивов" добавил кириллизацию для консоли Linux RedHat 5.2 (файл ru-rh52.html -- авторство определить затрудняюсь, сильно за это извиняюсь :()

Добавил новый раздел -- в дальнейшем статьи про LaTeX, печать и т.д. станут подмножеством этого раздела. Там фактически ничего нет -- посмотрите, если у кого что-либо есть, то добавьте -- хотелось бы увидеть рецепты для tkPaint, xmgr и др.

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

Взял описание настройки локали для раздела из FAQ для ru.linux -- прежнее описание настройки поместил в раздел "Устаревшая процедура установки Locale"  -- следует ли ее удалить? Вопрос Александру Воропаеву: достаточно ли этого описания или надо включить текст с твоей странички?

Взял текст от Ивана Паскаля, урезал его -- боюсь, что недостаточно хорошо -- и добавил раздел .


Балдин Евгений, (E.M.Baldin@inp.nsk.su)


Версия 0.8 пока beta, 29 октября 2000

Здесь описывается, как настроить кириллицу для редактирования, просмотра и печати документов в Unix подобной системе (в основном это относится к OS Linux).



Болгарские ссылки


Эти парни полагают большие усилия, чтобы "болгаризация" Линукса не делалась стихийно и необдуманно. Здесь вы найдете много полезных ссылок и информацию. Если вы желаете начать какой-нибудь проект, то подпишитесь пожалуйста на список рассылки или , в зависимости от характера вашей работы.

-- новости, ссылки электронного журнала "Phreedom".

-- Англо-болгарский и болгаро-английский электронный словарь.



Что я хочу сделать


Разобраться со ссылками.

Научиться делать PS версию SGML документа без особого напряга -- пока это не получается. Кто поможет?

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

Исправить орфографические ошибки -- кто бы помог? Свяжитесь со мной.

Исправить смысловые ошибки. Если вы что-либо обнаружили, даже мелкую ошибку, -- дайте мне знать, не поленитесь; я, в свою очередь, тоже постараюсь не лениться, хотя это довольно тяжело.

Разобраться с SGML.

Распространить этот HOWTO как можно шире.



Что нового


Исправлен раздел "Русификация teTeX"  -- взято из FAQ, поддерживаемого Александром Махоткиным (fido7.ru.tex). Остальные разделы о русификации teTeX, видимо, надо убрать.

Федор Подгорный проверил орфографию и пунктуацию, но в свете последних изменений я добавил массу дополнительных ошибок -- кто поможет?



Cronyx


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

Пакет для XFree86 можно найти на любом FTP архиве, где лежит дистрибутив X Window, например, непосредственно на .

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

Шрифт -cronyx-fixed-* с полным соответствием koi8-r, в том числе с рамками: .

Коллекция Cronyx имеет новые версии, а также переработанный (и по-моему лучший) вариант by Serge Vaculenko, который включает все славянские кириллические буквы, а также и некоторые "дореволюционные"  русские буквы.



Cyr-asian


По адресу

выложены:

раскладки клавиатуры для башкирского и кыргызского алфавитов;

locale ru_RU с символами PT154;

pt154.def из кириллического пакета LaTeX (он не входит в бинарные дистрибутивы teTeX).



Cyr-RFX


Кроме распространенных шрифтов Cronyx, существуют гораздо более эргономичные шрифты из проекта Cyr-RFX

Дмитрия Болховитянова: . Его шрифты предлагаются для всех используемых кодировок кириллицы.



Dmtr-fonts


Это полностью свободный и сделанный с нуля шрифт Дмитрия Сорокина. Найти можно по адресу



Добавление шрифтов кириллицы к Ghostscript


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

Чтобы добавлять новый шрифт (в формате pfa или pfb) в gs, вы должны:

Поместить этот шрифт в каталог шрифтов tt/gs/. Обычно это /usr/lib/ghostscript/fonts -- можно уточнить с помощью команды 'gs -h'.

Добавить соответствующие имена и aliases для шрифта в файле Fontmap в каталоге gs.

О том, где можно найти шрифты Type1, написано в разделе .



Другие программы рассылки электронной почты


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



Elm


Добавьте следующую запись в ваш ~/.elm/elmrc:

CHARSET=koi8-r



Emacs


Если вы уже настроили emacs как таковой, то вам не нужно специально настраивать программу электронной почты, которая обеспечивается средствами Emacs. (Для настройки Emacs смотрите раздел ).



Сменил имя Cyrillic HOWTO на


Сменил имя Cyrillic HOWTO на Cyrillic HOWTO (rus).

Внес несколько исправлений от Антона Зиновиева (в Cyrillic HOWTO появилось несколько слов про Кириллицу вообще, а не только про русскую ее часть).

Добавил раздел .

Добавил раздел -- страничка Леона Кантера.

Всякие мелочи -- elm, перекодировщики и т.д.

Проверил HOWTO на "вшивость" с помощью sgmlcheck -- html сделать можно, а вот latex нельзя; можно ли как-нибудь indx

в html запихнуть, кто знает?

PS, PDF и sgml версии можно найти на страничке

в разделе Cyrillic HOWTO (rus) (alpha версия).


European


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



BASH Programming - Введение


Программа GNU enscript, как и a2ps, была разработана для преобразования текста в PostScript, и она также поддерживает не ascii кодировки. Программа не имеет русских PostScript шрифтов в своем составе, но их очень просто доустановить. Как это сделать, описано ниже (спасибо Michael Van Canneyt):

Установите последний enscript. Самую последнюю версию 1.5. вы можете найти в .

Если вы -- пользователь RedHat Linux, загрузите и установите .

Если вы не используете RPMки, вытяните файл textbook.tar.gz

из архива на

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

(обычно /usr/share/enscript). Теперь перейдите туда и выполните следующую команду:

mkafmmap *.afm

Установка завершена. Попробуйте напечатать текст в KOI8-R следующей командой:

enscript --font=Textbook8 --encoding=koi8 some.file



Использование старого матричного принтера для печати кириллического текста


Если у вас есть старый добрый матричный принтер, и вы нуждаетесь в простом выводе текста на KOI8, то попробуйте следующее:

Найти соответствующий KOI8 шрифт для вашего принтера. Проверьте ftp архивы MS DOS в Internete (например, посмотрите на ).

Прочитайте руководство и найдите в нем описание загрузки такого шрифта в ваш принтер. Напишите простенькую программу, делающую это.

Запускайте эту программку из соответствующего rc файла при загрузке.

Таким образом, наличие символов Cyrillic в верхней части набора символов принтера позволит вам печатать тексты по-русски без дополнительных ухищрений.

Альтернативно к KOI8-R шрифтам вы можете попробовать использовать Alt шрифты. Для этого имеются две причины:

Вероятно, найти Alt шрифты намного проще, так как те были очень широко распространены во времена MS-ДОС.

Наличие соответствующего Alt шрифта позволит вам печатать также и псевдографические символы.

Следует отметить, что в Болгарии вместо "альтернативной кодировки" используется кодировка МИК.

Однако, в этом случае вы должны будете преобразовать ваши тексты из KOI8-R в Alt перед посылкой их на принтер. Это не проблема, так как имеется множество программ, делающих это (для примера смотрите раздел ), так что для этого вам нужно только вызвать такую программку из файла /etc/printcap в "if поле". Например, с программой translit можно сделать следующее:

if=/usr/bin/translit -t koi8-alt.rus

Для подробностей смотрите printcap(5).



Как это происходит?


Попробуем разобраться, для чего производились все перечисленные выше действия. Как уже упоминалось, в качестве драйвера печати StarOffice использует библиотеку Bristol Xprinter. Эта библиотека может использовать шрифты только в формате Type1, если шрифт содержит более 256 символов -- используются только первые 256, в порядке, описанном в векторе кодировки шрифта. В комплекте со шрифтом обязательно должен быть файл метрики в формате .afm.

При установке шрифтов программой SPAdmin информация о шрифте добавляется в файл xp3/psstd.fonts в формате, сходном с форматом файлов fonts.dir/fonts.scale. В каталоге xp3/pssoftfonts

и xp3/fontmetrics/afm создаются символические ссылки соответственно на файлы шрифта и метрики. После этого Xprinter

"узнает" о том, что у него появился новый шрифт.

При запуске StarWriter запрашивает у Xprinter список установленных шрифтов. Только шрифты, перечисленные в psstd.fonts, появятся в списке доступных шрифтов StarWriter'а. А для отображения на экране из X-сервера запрашивается первый попавшийся шрифт, у которого в названии второе поле (Family) совпадает с тем, что написано в psstd.fonts, при этом поля Foundry и Encoding игнорируются. То есть, если в Xprinter установлен шрифт в одной кодировке, а в X -- в другой, использовать их в StarOffice практически невозможно. Это происходит со стандартными шрифтами Times, Helvetica и Courier.



Клавиатура


Клавиатура в RedHat 5.2 на нижнем уровне управляется утилитой loadkeys из пакета kbd-096a-8. Пакет стандартный, RedHat лишь добавил туда несколько новых раскладок.

Запускается loadkeys из /etc/rc.d/init.d/keytable, управляющий файл /etc/sysconfig/keyboard. Там прописывается единственная переменная KEYTABLE:

/etc/sysconfig/keyboard: ============ KEYTABLE=ru1 ============

Есть интерактивная утилита смены раскладки: kbdconfig, которая на самом деле лишь прописывает значение в /etc/sysconfig/keyboard.

Файлы клавиатурных раскладок лежат в /usr/lib/kbd/keymaps/.

Мне нравится раскладка

от . Переключение по правому Ctrl, точка и запятая в русском регистре, как в Windows, т.е. рядом с правой кнопкой Shift. (На моей клавиатуре нарисовано именно так). Надо положить этот файл в /usr/lib/kbd/keymaps/i386/quwerty/, запустить kbdconfig и выбрать ru_win_ctrl. (Хотя и родная раскладка ru1 тоже ничего -- точка и запятая на Shift 6, Shift 7).

Включить новую раскладку на ходу можно, запустив /etc/rc.d/init.d/keytable start



Консоль


Консоль в RedHat 5.2 на нижнем уровне управляется утилитами setfont и mapscrn

из пакета kbd-096a-8.

Все, что необходимо сделать, это выполнить следующие команды:

$ setfont Cyr_a8x16 $ mapscrn koi2alt

Кроме того, необходимо переключить Charset G1 на вновь загруженный шрифт. Для этого нужно на все виртуальные консоли /dev/vty*

вывести "магическую" последовательность ESC (K.

$ echo -ne "\033(K"

К сожалению, с русификацией консоли в RedHat не все так прозрачно, как с клавиатурой. Отдельной "подсистемы"  для управления консолью нет. А если делать все по-RedHat'овски, то возникают проблемы.

RedHat рекомендует использовать "новый"  формат, с UNICODE таблицей:

$ setfont Cyr_a8x16 -u koi8

К сожалению, на "новом"  формате сползают рамки в mc и других программах. В RedHat 6

применяется другой пакет: , и другая версия initscripts, там все сделано немного по-другому.

Но попробуем выкрутиться! ;-)

Все утилиты запускаются из файла /sbin/setsysfont (на самом деле это shell-скрипт), параметры для которого живут в /etc/sysconfig/i18n. Не очень понятно, каково отношение между i18n

и шрифтами, но тем не менее это так.

/etc/sysconfig/i18n ===== SYSFONT= UNIMAP= =====

Не очень понятно, откуда посылать ESC (K. Можно посылать его, например, из ~.profile



Ksh


Что касается public domain реализации ksh -- pdksh

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

set -o vi



Lh


Лучшие кириллические шрифты всех времен и народов - кроме шуток.

Благодаря Ольге Лапко (Издательство Мир) мы имеем бесплатный шрифт, который позволяет оформлять научные тексты с помощью LaTeX, совершенно не заботясь о подборке шрифтов для формул/текста. Как правило, эти шрифты уже есть в дистрибутиве LaTeX. Эти шрифты развиваются -- в будущем обещают новые начертания (что-то говорили про Concreate -- Конкретная Математика). Шрифты lh всегда можно достать по следующим адресам:

CTAN:fonts/cyrillic/lh

Начиная с версии 3.20 (?) LH поддерживает стандартные кодировки LaTeX , кроме того, поддерживаются LCY, OT2 и др.



Links


Для просмотра WWW в текстовом режиме можно использовать

(опять наши братья чехи на высоте). Поддержка кириллицы уже встроена в программу -- надо только установить кодировку терминала (в меню "Настройки") и кодовую страницу документа (в меню "Вид").



Literat


В 1996 году компания ParaGraph International и Russian Foundation for Basic Research сделал шрифты literat доступными для бесплатного использования (подробнее смотрите файл licence из самого пакета). По отзывам, начертание этих шрифтов сильно отличается (причем далеко не в лучшую сторону) от того, что изначально называлось "гарнитура литературная"  (старые математические книжки 60-х годов) -- шрифт явно не доделан (можно посмотреть и ужаснуться, как выглядит слово "Где"), но в 99% результат вполне удовлетворительный.

Сами шрифты доступны по адресу

Для того, чтобы эти шрифты можно было использовать с LaTeXом, следует достать так же и пакет -- "виртуальные шрифты"  для LaTeX (T2A, OT1, T1 и TS1 кодировки). Подробности по установке смотрите в файле описания этого пакета.



Locale с точки зрения пользователя


Каждая locale -- это специальная база данных, определяющая, по крайней мере, следующие правила и соглашения:

Классификация символов и преобразований,

Представление валюты,

Представление чисел (то есть Десятичные символы),

Формат даты / времени.



Locale зависимое программирование


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

Из man setlocale(3):

Программа может быть сделана переносимой для всех locale, вызывая setlocale(LC_ALL, "" ) после инициализации программы, используя значения, возвращенные из запроса localeconv() для locale-зависимой информации, и используя strcoll() или strxfrm() для сравнения строк.

Довольно легко определить четыре уровня программной локализации:

Чисто 8ми битное программное обеспечение. То есть программа вызывает setlocale(). Она не делает каких-либо предположений относительно 8-ого бита каждого символа, используя пользовательские функции из ctype.h и ограничения из limits.h, а также заботится относительно signed/unsigned результата.

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

if (c >= 'A' && c <= 'Z') { ...

Подобные конструкции с точки зрения правильного "locale"-программирования совершенно недопустимы. Взамен во всех таких случаях должны использоваться, макрокоманды из locale зависимого файла заголовка ctype.h. Например:

if (isalpha(c) && isupper(c)) { ... или if (isascii(c) && isupper(c))

Хорошо написанная программа должна быть полностью 8-бит прозрачна. Например, отметка удаленного файла в MS-DOS кодом 0x0E5 -- не очень хорошее решение. Еще примеры плохих решений: знаменитая русская буква "Н" в редакторе GoldEd или русская буква "р"  в Norton Commander...

Форматы, методы сортировки, размеры листа бумаги. Программа использует strcoll() и strxfrm() вместо strcmp() для строк, использует time(), localtime(), и strftime() для работы со временем, и в заключение, использует localeconv() для правильного представления чисел и валюты.

Видимый текст складывается в каталоги сообщений/. Программа должна локализовать весь видимый текст в специальных каталогах сообщений. Они содержат соответствия строк на английском и их переводы на другие языки. Выбор сообщений, соответствующих языку окружения, выполнен так, что полностью прозрачен и для программы и для пользователя. Чтобы использовать эти средства, программа должна вызвать gettext() (Sun/POSIX стандарт), или catgets()

(X/Open стандарт). Подробнее см. раздел

.

EUC/Unicode поддержка. На этом уровне, программа не использует тип char. Взамен это она использует wchar_t, который определяет объекты, достаточно большие, чтобы содержать символы Unicode. ANSI C определяет этот тип данных и соответствующий API.

Для выяснения подробностей смотрите, например, (

) или (

).



Локализация


-- страничка о локализации (locale), и обо всем, что с этим связано.



LucidaSO


Благодаря свободно распространяемому дистрибутиву StarOffice 5.2 (См. раздел ) стали доступны шрифты LucidaSO (версия 0.1 от 13 августа 2000).

Эти шрифты можно найти по адресу: . Там лежат и сами шрифты, и все, что надо для их использования с LaTeX и PDFLaTeX.

В пакет входит три шрифтовые гарнитуры: LucidaSans, LucidaType и LucidaBright (всего 32 шрифта type1). Поддерживаются следующие кодировки TeX: T1, TS1, OT1, T2A. Кириллические шрифты содержатся только в LucidaSans и LucidaType. Всего есть 70 начертаний.

Виртуальные шрифты созданы с использованием fontinst v1.914.

Для инсталляции шрифтов в teTeX (См. раздел ) выполните следующие действия:

распакуйте tar-gz файл lucidaso-type1-<date>.tar.gz

в директорию texmf;

распакуйте tar-gz файл lucidaso-tex-<date>.tar.gz

в директорию texmf. Внимание: при распаковки могут затереться TFM и VF файлы Lucida шрифтов, которые являются частью дистрибутива teTeX;

добавьте в скрипт updmap запись для lucidaso.map;

выполните updmap для перегенерации map файлов;

для того, чтобы просмотреть документацию/примеры, загляните в директорию texmf/doc/latex/lucidaso/.

В случае возникновения комментариев, вопросов и "bug reports", свяжитесь с автором пакета Владимиром Воловичем по электронной почте .



Mutt


Добавьте следующую запись в ваш ~/.muttrc:

set charset=koi8-r set allow_8bit

Эта программа автоматически перекодирует получаемые письма, если они написаны не в стандартной кодировке. Кроме того, она умеет перекодировать отправляемые письма, если вы используете кодировку, отличную от стандартной для электронной почты в вашей стране -- если вы хотите воспользоваться этой особенностью, то укажите это в ~/.muttrc.

Например, если вы живете в России и используете cp1251, то, чтобы ваши письма отправлялись в KOI8-R, поместите следующие три строки в ~/.muttrc:

set charset=windows-1251 set send_charset=koi8-r set allow_8bit

Если версия sendmail старше 8, то, вероятно, в ~/.muttrc следует добавить директиву:

set use_8bitmime



Настройка


Чтобы настроить XKB, в файле конфигурации X-сервера надо задать параметры XkbRules, XkbModel, XkbLayout и, если вам нужно что-то не совсем стандартное -- XkbVariant и XkbOptions.

Например,

XkbRules "xfree86" XkbModel "pc104" XkbLayout "ru" XkbVariant "winkeys" XkbOptions "grp:shift_toggle"

означает, что XKB должен в соответствии с правилами, описанными в файле {XKBROOT}/rules/xfree86, выбрать настройки для клавиатуры типа "pc104"  (104 кнопки), русского алфавита (английский алфавит будет включен "по умолчанию"), вариант -- "стандартный"  (то есть, этот параметр можно было не писать). Если у вас "windows"  клавиатура, то полезно указать XkbVariant

как "winkeys", в противном случае оставьте эту опцию пустой -- "". В самом конце идут дополнительные опции для вашей "раскладки клавиатуры"  -- "grp:shift_toggle".



Настройка ghostscript


Иногда необходимо иметь какую-нибудь специфическую, не общесистемную настройку ghostscript. Например, возможно, что у вас нет привилегий root-а, или вы не желаете воспользоваться ими из соображений безопасности. В системе могут совместно работать пользователи, нуждающиеся в разных настройках. Кроме того, универсальной настройки просто не существует. Например, для того, чтобы Netscape печатал кириллицу, нужно заместить стандартные латинские PostScript шрифты кириллическими. Но с другой стороной, после этой замены будет невозможно напечатать (и даже увидеть на экране) некоторые латинские тексты.

Создайте новый каталог (например, ~/.ghostscript) и поместите в него все новые кириллические шрифты. Скопируйте в него также файл Fontmap и затем измените его как Вам угодно. Установите переменную окружения GS_LIB:

export GS_LIB=~/.ghostscript

Эта переменная указывает ghostscript, что нужно сначала заглянуть в каталог ~/.ghostscript (где находятся ваши новые шрифты и файл Fontmap), и лишь потом в общесистемные каталоги.



Настройка локали


Прежде всего -- подробная документация о локали имеется на

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

Документацию по иксовой локали можно найти по адресу

Вот инструкция для нетерпеливых (только для 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"

Согласно стандарту допустимы также короткие именования значений 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" (и как правило, Codeset 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"

Не рекомендуется использовать строку окружения:

$ 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. Включается она заданием строки окружения LANG="ru_RU.UTF-8"  для России.


Настройка русской локали


В файле /etc/environment

исправьте LANG=C на LANG=ru_RU.KOI8-R. Если вы хотите, чтобы у root были русские сообщения и он мог вводить русские буквы в X Window, сделайте тоже самое в /root/.bashrc.

Если версия вашего дистрибутива меньше 2.2, то дополнительно выполните команду

# mv /usr/share/locale/ru_SU /usr/share/locale/ru_RU.KOI8-R

с привилегиями пользователя root.

Зачем же мы удаляем ru_SU и делаем локаль с таким большим именем? Все потому, что SU -- это сокращение страны Судан, а эта локаль предназначена для людей из России, говорящих по-русски. Можно было бы оставить ru_RU, скажите вы. Но ru_RU уже существует, это локаль с кодировкой ISO-8859-5. Поэтому следует поставить ru_RU.KOI8-R.



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


Пример русификации консоли koi8. Проверено для версии 6.3

Запустите программу конфигурации и администрирования yast под суперпользователем.

Для выбора консольного шрифта в меню "System administration" следует выбрать пункт "Set the console font". Я рекомендую выбрать какой-либо шрифт из серии "Cyr_a8x" (у меня стоит шрифт Cyr_a8x16.pcfu.gz) -- сделайте этот шрифт "As standart font".

Далее в меню "System administration" выберете пункт "Change configuration file". Среди предложенных для изменения переменных нас интересуют:

CONSOLE_FONT -- консольный шрифт (как поменять эту переменную, было описано ранее; можно менять ее и здесь),

CONSOLE_SCREENMAP -- установите переменную равной koi2alt,

CONSOLE_MAGIC -- установить равной "(K" (кавычки не писать),

KEYTABLE -- рекомендую установить равной ru3.map.gz (переключатель правый Alt, раскладка стандартная), или ru4.map.gz (переключатель CapsLock, раскладка для Windows клавиатуры),

CONSOLE_UNICODEMAP -- cyralt.uni,

RC_LANG -- можно установить равной ru_RU.KOI8-R.

Все это можно сделать, подредактировав файл rc.local в /etc/.

P.S. Если при установке указать, что ваш язык -- "русский"  (LANGUAGE=russian), то все настроится автоматически (ну, почти).



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


Из чего же сделана русификация в RedHat? Как известно, в Linux существуют два конкурирующих пакета управления шрифтами и клавиатурой:

и . В RedHat 5.x

для русификации консоли применялся пакет . В RedHat 6.x применяется уже другой пакет -- . Разницы между ними радикальной нет, но это, увы, делает несовместимым пакет initscripts

для версий RedHat 5.x и 6.x.

Русификация (и вообще включение национальных установок) в Linux RedHat 5.2

осуществляется из пакета initscripts. Не будем вдаваться в подробности работы SYSV init, опишем краткий путь. Предполагается, что читатель данного текста умеет пользоваться пакетом RPM, который весьма важен в RedHat.



Настройка вашей программы рассылки электронной почты (MTA)


В "природе" существует несколько программ рассылки электронной почты (MTA), доступных для вас. Это sendmail, qmail, smail, exim, и так далее.



Настройка Xkb


Полную и исчерпывающую (даже слишком исчерпывающую) документацию по настройке 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.



Несколько практических рекомендаций.


Небольшое отступление -- "о клавише-переключателе рус/лат".

Другие варианты смены кодировки:

grp:toggle -- переключение правым Alt,

grp:shift_toggle -- двумя клавишами shift,

grp:ctrl_shift_toggle -- ctrl+shift,

grp:ctrl_alt_toggle -- ctrl+alt,

grp:switch -- переключение по правому Alt только на момент нажатия,

ctrl:ctrl_ac -- CapsLock

Когда был написан первый вариант этих рекомендаций, сама раскладка "русской" клавиатуры (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

.

Offtopic: Если в файле /usr/X11R6/lib/X11/xkb/compat/iso9995

поменять

indicator "Group2" {

на

indicator "Scroll Lock" {

то в ответ на переключение регистра будет загораться лампочка Scroll Lock

на клавиатуре.



Общие слова


Как вы заметили, этот текст имеет версию 0.8 пока beta -- этим я пытаюсь показать, что его не стоит рассматривать как конечный продукт; и верить всему, что здесь написано -- совершенно не обязательно. Здесь много чего лишнего и много чего не хватает -- ничего страшного, это вполне можно исправить.

Этот текст основан (на 40% состоит из) на переводе Cyrillic HOWTO А. Беликова версии 4.2 b2, сделанного мной уже больше года назад. По той причине, что развитие этого чрезвычайно полезного HOWTO остановилось, появилась идея (как я понял, она появилась не только у меня) продолжить его развитие.

Основные исправления сделаны с помощью текста

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

Чего не будет: я не буду поддерживать английскую версию этого документа. Следует добавить, что я не против английской версии как таковой -- я обеими руками за -- просто я этим заниматься не буду.

Чего я ожидаю: я ожидаю, что по прочтении этого документа вы сделаете некие выводы, оформите их в виде ЦУ и пошлете их мне -- особенно я буду благодарен тем, кто отловит орфографические ошибки (их у меня много).

Последнюю версию этого документа можно всегда найти на моей страничке:

в разделе Cyrillic HOWTO (rus) (beta версия).