>> С русификацией иксов как справиться?
>> Где написано?
>>
>Cyrillic-HOWTO
Лови!
--------------------------------cut---------------------------------
Newsgroups: fido7.perm.unix
Distribution: fido7
X-Comment-To: All
From: Victor Vislobokov <Victor.Vislobokov@p34.f8.n5054.z2.fidonet.org>
Date: Wed, 30 Apr 97 20:05:13 +0500
Subject: К вопросу о русификации Linux
Message-ID: <862431224@p34.f8.n5054.z2.ftn>
Organization: Я там и тут - противный root
X-FTN-AREA: PERM.UNIX
Hello All.
Тут было много мессаг о русификации. По этому я напрягся ;)
и поскольку мне эта тема тоже интересна перевел часть Cyrillic-HOWTO,
которая касается русификации консоли и иксов. Ловите.
У кого нет могу выслать английскую версию. Замечания и предло-
жения по переводу только мылом.
=== Cut ===
The Linux Cyrillic HOWTO
Alexander L. Belikoff, (abel@wisdom.weizmann.ac.il)
v2.1, 17 September 1995
Этот документ описывает как сделать в вашем Linux ввод, простмотр и
печатать документов на русском языке.
1. Введение
Этот документ объясняет те фичи, которые нужны вам для успешного
ввода, просмотра и печати документов по-русски.
Это описание предназначается прежде всего для конечных пользователей.
В процессе его написания я пытался сделать все доступным как только
это возможно. По моему несправедливо заставлять перегруженных поль-
зователей, разбираться в деталях реализации X Windows или TeX, только
потому, что они только хотят вводить или смотреть нужные тексты по-
русски. Однако я не описываю что такое X Windows и как cоздавать доку-
менты в TeX и LaTeX. По этому берите в руки этот документ преимущест-
венно в случае возникновения потенциальных проблем.
Есть некоторая разница между кодировками кириллицы в MS-DOS и Unix.
В MS-DOS, очень популярной кодировкой кириллицы является альтернатив-
ная кодировка (Alt). В Unix же традиционная кодировка с русскими
символами - это KOI-8. Она описывается в RFC 1489 ("Registration of
a Cyrillic Character Set").
Различие этих двух кодировок довольно незначительно (исключая пакет
TeX). По этому мы опишем только установку кодировки KOI-8.
Я учту любые комментарии, поправки и советы относящиеся к данному
документу. Без колебаний пишите мне на abel@wisdom.weizmann.ac.il.
2. Благодарности и авторские права.
Многие люди помогали мне (и не только мне) важной информацией и со-
ветами. Еще больше людей пожертвовали своими программами для публич-
ного пользования. Я сожалею если забыл кого-нибудь упомянуть.
Вот они: Bas V._de Bakker, David Daves, Serge Vakulenko,
Sergei O. Naoumov, Winfried Truemper.
Авторские права на этот документ принадлежат Alexander L. Belikoff.
Этот документ может использоваться и распостранятся под обычным ус-
ловиям Linux HOWTO, описанным ниже.
Объявление об авторском праве Linux HOWTO:
Если не указано иначе, авторские права на документы Linux
HOWTO принадлежат соответствующему автору. Документы Linux
HOWTO могут воспроизводится и распостранятся целиком или по
частям любым способом (электронным или физическим) при сох-
ранении авторских прав на все копии. Комерческое распостра-
нение допускается и приветствуется,однако автор должен быть
уведомлен о каждом таком случае.
Все переводы, производные или составные работы включающие
любые документы Linux HOWTO должны быть защищены этим объ-
явлением об авторском праве. Это - вы не можете делать
производную работу на основании какого-либо HOWTO налогать
дополнительные ограничения на ее распостранение. Исключе-
ния из этих правил могут быть даны при определенных усло-
виях; пожалуйста обратитесь к координатору Linux HOWTO на
адрес данный ниже.
Короче, мы хотим содействовать в распостранении этой инфор-
мации через столько каналов сколько возможно. Однако мы
хотим соблюдения авторских прав на документы HOWTO и хотим
чтобы вы сообщали об любых планах по распостранению этих
HOWTO.
Если у вас возникли вопросы, пожалуйста обращайтесь к Greg Hinkins,
координатору Linux HOWTO на gregh@sunsite.unc.edu. Вы можете по
этому адресу найти номер телефона и другую дополнительную инфор-
мацию.
3. Дальнейшие планы
Следующая версия этого документа будет доступна на sunsite.unc.edu
и tsx-11.mit.edu в директории HOWTO Linux Document Project.
Я намереваюсь включить больше информации по TeX и LaTeX, а также
разработать больше информации по печати.
4. Установка окружения
4.1. Консоль
Все фичи, которые необходимы для русификации консоли Linux содержатся
в пакете kbd. Этот пакет доступен на sunsite.unc.edu или tsx-11.mit.edu
Обычно этот пакет уже установлен (это стандартная часть дистрибутива
Slackware).
Для установки кириллицы нужно выполнить три вещи:
1. Установить подходящий экранный шрифт. Это делает программа setfont.
Файлы шрифтов находятся в /usr/lib/kbd/consolefonts.
ЗАМЕЧАИЕ: икогда не запускайте setfont из под X или она подвесит
вашу систему. Это происходит потому, что setfont исполь-
зует вызовы низкого уровня для видеокарты, которые не
нравятся X.
2. Если вы используете шрифт в альтернативной кодировке (как я) то вы
должны вызвать программу mapscrn, которая выполняет автоматическое
преобразование из альтернативной кодировки в KOI-8, с файлом
/usr/lib/kbd/consoletrans/koi2alt. Пример:
mapscrn koi2alt
3. Загрузить подходящую раскладку клавиатуры с помощью программы
loadkeys. апример:
loadkeys ru.map
Обычно разные раскладки содержат разные клавиши переключения из
русского на английский (Клавиши правый Ctrl, правый Atl и т.д.)
4. Вывести последовательность ESC(K на экран (ESC - это символ Escape,
который имеет код 033). Одному богу инвестно чего делает эта комби-
нация. Я украл ее из Danish-HOWTO
<file://sunsite.unc.edu/pub/Linux/docs/HOWTO/Danish-HOWTO> (спасибо,
Thomas Petersen) и она работает и у меня!
иже приведен пример сценария для установки кириллицы на консоли:
#!/bin/bash
#
# load cyrillic defs for console
#
# *** NEVER TRY IT UNDER X!!! ***
loadkeys /usr/lib/kbd/keytables/ru.map
setfont /usr/lib/kbd/consolefonts/Cyr_a8x16
mapscrn /usr/lib/kbd/consoletrans/koi2alt
echo -ne 'ESC(K' # используйте АТУРАЛЬЫЙ ESCAPE символ здесь!
echo "Use the right Ctrl key to switch the mode..."
4.2. Система X Window
Как и в режиме консоли, X окружение также требует некоторой настройки.
Это установка режима ввода и шрифтов X. Обе эти установки обсуджаются
ниже.
4.2.1. Шрифты в X.
Сперва вы должны найти коллекцию шрифтов с киррилицей.
екоторое количество таких шрифтов есть в сети. Самая любимая коллек-
ция у автора это VakuFonts созданная Segre Vakulenko (vak@cronyx.ru).
Она находится в коллекции фич кириллицы для системы X Window на
<ftp://ftp.funet.fi/pub/culture/russian/comp/xwin> Там же вы сможете
найти много полезных пакетов для X.
Замечание: Очевидно, этот пакет включается в XFree86 версии 3.1.2
также как и для более поздних публичных заплат для X11 Release 6.
Обидно, что автор не имеет возможности проверить его.
Обычно шрифты для X распостраняются в формате BDF который представля-
ет собой текстовое описание шрифта. Вы можете скомпилировать шрифты в
формат PCF, используя команду bdfopcf:
bdftopcf -o name.pcf name.bdf
Также можно сжать скомпилированные шрифты используя команду compress
(Я не уверен в поддержке gzip).
Теперь вы должны сделать три вещи для установки всего:
1. Поместить скомпилированные (и возможно скомпрессированные) шрифты
в специальную директорию.
2. Пересоздать список шрифтов для этой директории. Просто зайдите в
нее командой cd и запустите:
mkfontdir .
Вы должны запустить его один раз. Это обновит файл каталога шрифтов
fonts.dir.
3. Если пакет шрифтов предоставляет файл псевдонимов шрифтов (обычно
font.alias) то добавте его в конец того файла псевдонимов шрифтов,
который находится в директории, содержащей шрифты.
4. Если эта директория еще не известна X серверу, то вы должны сде-
лать ее известной. Для этого добавте следующие команды в файл
xinitrc (локальный или глобальный):
xset +fp directory_with_fonts xset fp rehash
После вы того как вы сделаете установки описанные выше, вы можете
проверить доступны ли новые шрифты запустив следующую команду.
xfd -fn fontname
При этом должна быть показана таблица символов заданного шрифта.
4.2.2. Трансляция ввода
Переключение между различными трансляциями ввода устанавливается
программой xmodmap. Эта программа позволяет задать коды включающие
различные символы и их комбинации. Она устанавливает все это осно-
вываясь на файле содержащем таблицу трансляций, обычно это
~/.Xmodmap.
иже следует простое описание задания ввода. Если вы хотите сделать
больше прибамбасов, обратитесь к руководству xmodmap(1) или лучше
подождите X11 Release 7,который устранит текущие проблемы со вводом.
В нашем случае, таблица трансляции определяет две вещи:
In our case, the translation table should define two things:
- коды символов соответствующие буквенно-цифровым символам и
- множество правил переключения
4.2.2.1. Таблица символов
Это базовая последовательность директив, которые назначают определен-
ные символы заданным кодам клавиатуры. Основной синтаксис такой:
keycode code = sym1 sym2 sym3 sym4
где code - это числовой код данной клавиши на клавиатуре (обратитесь
к стандартной таблице для вашей системы. В моем случае она записана
в файле /usr/lib/X11/etc/xmodmap.std). Syms определяют символы гене-
рируемые клавишей при разных условиях. Sym1 - это символ генерируемый
в обычном состоянии, sym2 - соответствует клавише в состоянии, когда
нажата клавиша shift. Sym3 и sym4 определяют символы генерируемые,
когда активен переключатель режимов Mode_switch соответственно для
нормального состояния и для состояния с нажатой клавишей shift (груп-
па 2, использующая спецификацию протокола X). В нашем случае активный
Mode_switch соответствует режиму ввода кириллицы.
Это могут быть или шестнадцатиричные коды или символьные константы
из /usr/include/X11/keysymdef.h (без приставки "XK_").
Таким образом если мы хотим чтобы клавиша соответствующая латинской
'a' генерировала русскую 'а' в альтернативной кодировке мы должны
написать так:
keycode 38 = a A 0xC1 0xE1
Читатель может быть удивлен почему я не использую соответственно кон-
станты Cyrillic_a и Cyrillic_A. Ответ состоит в том, что они не ра-
ботают у меня. Я не очень хорошо разбираюсь в системе X Window, но я
даю следующее объяснение. Символьные константы указанные выше, имеют
величины 0x6C1 и 0x6E1 соответственно. Это подразумевает что в факти-
чески многоязычном окружении они могут быть успешно использованы без
перекрывания с любыми другими символьными наборами. Однако стандарт
KOI-8 не подходит хорошо для такого окружения. Таким образом, если мы
хотим сохранить совместимость в дальнейшем, мы нарушаем эти правила
многоязычной поддержки в системе X Window.
Следующая таблица отражает популярнейшую русскую JCUKEN раскладку
клавиатуры (эти таблицы получены из пакета VakuFonts):
keysym 4 = 4 dollar 4 quotedbl
keysym 5 = 5 percent 5 colon
keysym 6 = 6 asciicircum 6 comma
keysym 7 = 7 ampersand 7 period
keysym q = q Q 0xCA 0xEA
keysym w = w W 0xC3 0xE3
* Message split, to be continued *
--- ifmail v.2.8c-1.5g
* Origin: Technical Center of the Perm Saving Bank. (2:5054/69.6969@fidonet)
keysym e = e E 0xD5 0xF5
keysym r = r R 0xCB 0xEB
keysym t = t T 0xC5 0xE5
keysym y = y Y 0xCE 0xEE
keysym u = u U 0xC7 0xE7
keysym i = i I 0xDB 0xFB
keysym o = o O 0xDD 0xFD
keysym p = p P 0xDA 0xFA
keysym bracketleft = bracketleft braceleft 0xC8 0xE8
keysym bracketright = bracketright braceright 0xDF 0xFF
keysym a = a A 0xC6 0xE6
keysym s = s S 0xD9 0xF9
keysym d = d D 0xD7 0xF7
keysym f = f F 0xC1 0xE1
keysym g = g G 0xD0 0xF0
keysym h = h H 0xD2 0xF2
keysym j = j J 0xCF 0xEF
keysym k = k K 0xCC 0xEC
keysym l = l L 0xC4 0xE4
keysym semicolon = semicolon colon 0xD6 0xF6
keysym apostrophe = apostrophe quotedbl 0xDC 0xFC
keysym grave = grave asciitilde 0xA3 0xB3
keysym z = z Z 0xD1 0xF1
keysym x = x X 0xDE 0xFE
keysym c = c C 0xD3 0xF3
keysym v = v V 0xCD 0xED
keysym b = b B 0xC9 0xE9
keysym n = n N 0xD4 0xF4
keysym m = m M 0xD8 0xF8
keysym comma = comma less 0xC2 0xE2
keysym period = period greater 0xC0 0xE0
Для использования русской раскладки YAWERTY, я включил следующую таблицу:
keysym q = q Q 0xD1 0xF1
keysym w = w W 0xD7 0xF7
keysym e = e E 0xC5 0xE5
keysym r = r R 0xD2 0xF2
keysym t = t T 0xD4 0xF4
keysym y = y Y 0xD9 0xF9
keysym u = u U 0xD5 0xF5
keysym i = i I 0xC9 0xE9
keysym o = o O 0xCF 0xEF
keysym p = p P 0xD0 0xF0
keysym bracketleft = bracketleft braceleft 0xDB 0xFB
keysym bracketright = bracketright braceright 0xDD 0xFD
keysym a = a A 0xC1 0xE1
keysym s = s S 0xD3 0xF3
keysym d = d D 0xC4 0xE4
keysym f = f F 0xC6 0xE6
keysym g = g G 0xC7 0xE7
keysym h = h H 0xC8 0xE8
keysym j = j J 0xCA 0xEA
keysym k = k K 0xCB 0xEB
keysym l = l L 0xCC 0xEC
keysym z = z Z 0xDA 0xFA
keysym x = x X 0xD8 0xF8
keysym c = c C 0xC3 0xE3
keysym v = v V 0xD6 0xF6
keysym b = b B 0xC2 0xE2
keysym n = n N 0xCE 0xEE
keysym m = m M 0xCD 0xED
keysym backslash = backslash bar 0xDC 0xFC
keysym grave = grave asciitilde 0xC0 0xE0
keysym equal = equal plus 0xDE 0xFE
keysym 3 = 3 numbersign 3 0xDF
keysym 4 = 4 dollar 4 0xFF
4.2.2.2. Правила переключения режимов
Это - основа хитрейшей части установки кириллизации X. Вы должны
определить условия при которых текущий режим будет переключатся между
нормальным и кириллистическим.
В Linux для этого есть два способа. Один - это специфический для
XFree86,когда другой более общий (хорошо, что не слишком большой, как
я показываю ниже).
Специфический для XFree86 способ следующий. Есть два виртуальных дей-
ствия, которые могут быть назначены для клавиш в файле XF86Config:
ModeShift который изменяет режим с альтернативного на нормальный без
удержания этого режима и ModeLoack который делает тоже, но с удержа-
нием. В первом случае клавиши будут генерировать альтернативные сим-
волы только, когда клавиша ModeShift нажата, в то время как в послед-
нем случае пользователю нужно только нажать клавишу ModeLock и клави-
атура будет генерировать альтернативные символы пока эта клавиша
не нажата второй раз. Вы должны назначить ModeLock и ModeShift для
клавиш выбранных вами в качестве переключателей.
Таким образом, если вы хотите назначить ModeShift на правую клавишу
Alt, то вы должны поместить следующую директиву в ван XF86Config:
RightAlt ModeShift
Если вы хотите иметь ModeLock на этой клавише, то:
RightAlt ModeLock
Смотрите XF86Config(4/5) для больших подробностей.
Другой способ - это снова использование утилиты xmodmap. Это более
хитрая штука. Вы должны:
- азначить Mode_switch кокой-либо калвише и
- Добавить Mode_switch в таблицу модификаторов
Теперь клавиша для которой назначили ModeShift будет выполнять пере-
ключение режимов. Пока она нажата, клавиатура в альтернативном режиме.
Кроме того, если вы добавите клавишу ModeLock, то она будет удерживать
альтернативный режим.
Замечание: Однако это может вызвать проблемы. Serge Vakulenko
(vak@cronyx.com) указывает, что различные реализации X серверов могут
иметь различные правила для назначения переключателей режимов (так
например, некоторые серверы ограничивают установку клавиш, которые
могут работать в переключающемся режиме: CapsLock,NumLock,ScrollLock).
адеюсь, что эти проблемы будут устранены в следующих версиях системы
X Window. Для более подробной информации смотрите спецификацию прото-
кола X.
иже приведен пример. Предполагается, что мы хотим использовать пра-
вый Alt как переключатель режимов без фиксации и SrollLock как перек-
лючатель с фиксацией. Сперва нужно проверить таблицу модификаторов по
умолчанию. Это возможно сделать запустив xmodmap без аргументов:
$ xmodmap
xmodmap: up to 2 keys per modifier, (keycodes in parentheses):
Если вы используете более позднюю версию, то вы можете комбинировать
и таблицу и директивы режимов в вашем файле ~/.Xmodmap.
Такие файлы в основном поставляются с разными пакетами по установке
кириллицы для X. Хороший пример таких таблиц прилагается в пакете
Serge Vakulenko, про который говорилось выше.
Чтобы активизировать таблицу, которую содержит файл нужно выполнить:
xmodmap filename
после запуска X. Модифицируйте ваш файл .xinitrc для выполнения этого.
Замечание: ваш файл .xinitrc может уже содержать код для запуска
xmodmap с вашей локальную таблицу, если она существует.
Таблица распостраняемая с пакетом Serge Vakulenko не работает у ав-
тора. иже приводится заплата устраняющая эту проблему:
diff -u --new-file jcuken.xmm jcuken.xmm.mod
--- xMail/beta
+++ jcuken.xmm.mod Sun Aug 13 15:44:06 1995
@@ -2,6 +2,8 @@
! Cyrillic keyboard mapping table.
! Produced by Serge Vakulenko, <vak@kiae.su>, Moscow.
!
+! Modified by Alexander L. Belikoff (abel@wisdom.weizmann.ac.il), 1995
+!
! Russian JCUKENG keyboard layout implemented.
! Cyrillic characters are entered in koi8 encoding.
!
@@ -10,7 +12,9 @@
From cola@tcsb.perm.su Sat May 3 04:48:09 1997
Path: tcsb.perm.su!news
From: cola@tcsb.perm.su (Kosta Kudrin)
Newsgroups: fido7.perm.unix
Subject: Re: К вопросу о русификации Linux
HI, Victor !
> Hиже приведен пример сценария для установки кириллицы на консоли:
>
> #!/bin/bash
> # load cyrillic defs for console
> # *** NEVER TRY IT UNDER X!!! ***
>
> loadkeys /usr/lib/kbd/keytables/ru.map
> setfont /usr/lib/kbd/consolefonts/Cyr_a8x16
> mapscrn /usr/lib/kbd/consoletrans/koi2alt
Тут надо добавить цикл , что бы все работало на всех
консолях
for i in 1 2 3 4 5 6 7 8
do
> echo -ne 'ESC(K' # используйте АТУРАЛЬЫЙ ESCAPE символ здесь!
> echo "Use the right Ctrl key to switch the mode..."
и чуть чуть изменить строку выше на:
echo -ne 'ESC(K' >/dev/tty$i
done
Все выше приведенное действительно для koi8.
Для альтернативки (Если есть такие извращенцы, а они есть)
необходимо следующее.
loadkeys /_путь_/ru2.map
setfont /_путь_/Cyr_a8x? #Где ?=8,14,16 кому как нравиться
mapscrn /_путь_/trivial
for i in 1 2 3 4 5 6 7 8
do
echo -ne 'ESC(K' >/dev/tty$i
done
Теперь вам можно читать и писать как в ДОСе :))
Hо предупреждаю заранее , почти все надо будет патчить :))
> 4.2. Система X Window
>
.............
> 4.2.2. Трансляция ввода
> 4.2.2.2. Правила переключения режимов
Для X-Windows версии 3.2 и выше
подходит и этот вариант , если в
файле конфигурации XF86Config в секции Keyboard
выставить
XKBDisable
В противном случае настроить модуль XKB - сам не
настраивал живу под 3.1.2
Хотя в доках все написано! :)