Как использовать русскую, английскую и исландскую кодировку в консоли Linux.

    Приспособление персонального компьютера для работы сразу с несколькими языками в некоторых случаях превращается в нетривиальную задачу. Операционные системы семейства UNIX и примыкающий к ним Linux не являются исключением. Надо сказать, что в современных дистрибутивах Линукса эта проблема решена для графической системы XFree/Xorg, где пользователь может указать различные кодировки и способ переключения между ними в главном конфигурационном файле XF86Config/Xorg.conf или же воспользоваться стандартными средствами KDE/GNOME. Но как быть, если хочется воспользоваться возможностями разных кодировок при работе в консоли?

    Ответ на этот вопрос - может быть вопреки тому, что читатель ожидает от статьи с таким названием - никак! Увы, консоль в Линуксе настроена только на одну кодировку (+ английская). Но если вот приспичило работать в консоле и писать на нескольких языках (например, русском, английском и исландском), то ваше положение всё-таки не такое безнадёжное, как может показаться после такого вступления. Попробуем разобраться с этой проблемой в дистрибутиве Fedora Core 3.

    Прежде всего убедимся, что наша консоль русифицирована. Для этого достаточно открыть файл /etc/sysconfig/keyboard и поменять строчку KEYTABLE="us" на KEYTABLE="ru". Также стоит заглянуть и в файл /etc/sysconfig/i18n, чтобы убедиться, что в нём стоит юникодовская версия языка, напр. LANG="us_US.UTF-8". Если это так, то больше ничего трогать не надо, вообще этот файл касается не столько кодировки, сколько локализации консоли, т.е. перевода служебных сообщений, формата даты и времени и тп. с английского соответственно на русский, исландский и тд. (Переключение между языками в консоли производится одновременным нажатием правых клавиш CTRL+SHIFT или же так: для переключения на 1 язык нажатием правой клавиши CTRL, а для обратного переключения - правой клавиши ALT GR или той же правой CTRL.)  Вам необязательно менять язык локали на русский, принципиальна лишь юникодовская кодировка - я лично не люблю русифицированную локаль, т.к. она совершенно недоделана.

    Пойдём дальше. Если мыслить логически, то можно установить, что фактически мы можем пользоваться двумя кодовыми страницами, если консоль настроена на русский язык - английской и русской, или на исландский - английской и исландской. На самом деле, это уже пол-дела - осталось только инкорпорировать третий язык! Разумеется, это легче будет сделать с исландским, который, как и английский, пользуется латинским алфавитом, но с добавлением 10 пар собственных букв - Þþ, Ðð, Ææ, Öö, Áá, Éé, Óó, Íí, Úú, Ýý. Именно эти символы нам надо как-то научиться печатать. (Очевидно, что в случае добавления русских букв к исландской кодировке нам пришлось бы добавить все 33 пары русских букв).

    Как известно, консольный драйвер клавиатуры использует т.наз. keymaps, в которых указаны соответствия клавиш (или их комбинаций) определённым символам. Эти файлы лежат в папке /lib/kbd/keymaps/i386/qwerty/ (в других дистрибутивах эти файлы могут лежать в папке /usr/lib/kbd/...). За русский отвечает файл ru.map, который может быть заархивирован - ru.map.gz. Если мы его откроем, то можем увидеть такие записи:

altgr         keycode 23 = U+0448 # CYRILLIC SMALL LETTER SHA
altgr shift   keycode 23 = U+0428 # CYRILLIC CAPITAL LETTER SHA
              keycode 24 = +o
shift         keycode 24 = +O
altgr         keycode 24 = U+0449 # CYRILLIC SMALL LETTER SHCHA
altgr shift   keycode 24 = U+0429 # CYRILLIC CAPITAL LETTER SHCHA
              keycode 25 = +p
shift         keycode 25 = +P
altgr         keycode 25 = U+0437 # CYRILLIC SMALL LETTER ZE
altgr shift   keycode 25 = U+0417 # CYRILLIC CAPITAL LETTER ZE
              keycode 26 = bracketleft
shift         keycode 26 = braceleft
alt           keycode 26 = Meta_bracketleft
control       keycode 26 = Escape 
altgr         keycode 26 = U+0445 # CYRILLIC SMALL LETTER HA
altgr shift   keycode 26 = U+0425 # CYRILLIC CAPITAL LETTER HA
altgr alt     keycode 26 = Meta_bracketleft
altgr control keycode 26 = Escape 
              keycode 27 = bracketright
shift         keycode 27 = braceright
alt           keycode 27 = Meta_bracketright
control       keycode 27 = Control_bracketright
altgr         keycode 27 = U+044A # CYRILLIC SMALL LETTER HARD SIGN
altgr shift   keycode 27 = U+042A # CYRILLIC CAPITAL LETTER HARD SIGN
altgr alt     keycode 27 = Meta_bracketright
altgr control keycode 27 = Control_bracketright

    В первом столбце стоят дополнительные клавиши, используемые при нажатии вместе с основной. altgr означает вариант при переключении клавиатуры. Далее идёт код основной клавиши. После знака "=" указывается символ, который может быть выражен буквально (+p означает строчную латинскую букву 'p', +P - 'P', bracketleft - открывающую квадратную скобку и тд.) или по юникодовскому коду - если речь идёт о русских буквах, напр. U+0445 для русской строчной 'х' (подробнее см. коды на http://www.unicode.org/Public/UNIDATA/UnicodeData.txt). Итак, нам надо найти неиспользуемые комбинации клавиш и присвоить им столь нужные нам буквы исландского алфавита. Мы будем использовать их именованные обозначения, благо они известны: 

þ/Þ - +thorn/+THORN;
ð/D - +eth/+ETH;
æ/Æ - +ae/+AE;
ö/Ö - +odiaeresis/+Odiaeresis;
á/Á - +aacute/+Aacute;
ó/Ó - +oacute/+Oacute;
ú/Ú - +uacute/+Uacute;
ý/Ý - +yacute/+Yacute;
í/Í - +iacute/+Iacute;
é/É - +eacute/+Eacute;

    Нам осталось лишь найти, куда вставить эти коды букв. К сожалению, клавиши, которые используются для ряда этих букв в исландской раскладке, уже не имеют свободных мест. Более того, мне не получилось "научить" консоль воспринимать т.наз. "dead acute", когда буквы с акутом набираются при помощи нажатия клавиши акута и последующего нажатия клавиши соответствующей гласной (в результате чего эта гласная появляется со значком акута), т.е. á = ´ - a. Мы присвоим все гласные с акутом соответствующим гласным клавишам. Þ/þ мы присвоим клавише t, Ð,ð - d, а оставшиеся буквы пристроим без оглядки на фонетическое сходство: Ö/ö к q, а Æ/æ - к w. Разумеется, коды этих букв мы припишем латинской половине keymap'а. Кроме того, строчная буква будет выводиться при помощи дополнительной клавиши CTRL, а заглавная - ALT. В итоге мы внесём следующие изменения в файл ru.map:

              keycode 16 = +q
shift         keycode 16 = +Q
control     keycode 16 = +odiaeresis
alt         keycode 16 = +Odiaeresis

altgr         keycode 16 = U+0439 # CYRILLIC SMALL LETTER SHORT I
altgr shift   keycode 16 = U+0419 # CYRILLIC CAPITAL LETTER SHORT I
              keycode 17 = +w
shift         keycode 17 = +W
control     keycode 17 = +ae
alt         keycode 17 = +AE

altgr         keycode 17 = U+0446 # CYRILLIC SMALL LETTER TSE
altgr shift   keycode 17 = U+0426 # CYRILLIC CAPITAL LETTER TSE
              keycode 18 = +e
shift         keycode 18 = +E
control     keycode 18 = +eacute
alt         keycode 18 = +Eacute

<...>
              keycode 20 = +t
shift         keycode 20 = +T
control     keycode 20 = +thorn
alt         keycode 20 = +THORN

altgr         keycode 20 = U+0435 # CYRILLIC SMALL LETTER IE
altgr shift   keycode 20 = U+0415 # CYRILLIC CAPITAL LETTER IE
              keycode 21 = +y
shift         keycode 21 = +Y
control     keycode 21 = +yacute
alt         keycode 21 = +Yacute

altgr         keycode 21 = U+043D # CYRILLIC SMALL LETTER EN
altgr shift   keycode 21 = U+041D # CYRILLIC CAPITAL LETTER EN
              keycode 22 = +u
shift         keycode 22 = +U
control     keycode 22 = +uacute
alt         keycode 22 = +Uacute

altgr         keycode 22 = U+0433 # CYRILLIC SMALL LETTER GHE
altgr shift   keycode 22 = U+0413 # CYRILLIC CAPITAL LETTER GHE
              keycode 23 = +i
shift         keycode 23 = +I
control     keycode 23 = +iacute
alt         keycode 23 = +Iacute

altgr         keycode 23 = U+0448 # CYRILLIC SMALL LETTER SHA
altgr shift   keycode 23 = U+0428 # CYRILLIC CAPITAL LETTER SHA

<...>

              keycode 24 = +o
shift         keycode 24 = +O

control     keycode 24 = +oacute
alt         keycode 24 = +Oacute

              keycode 30 = +a
shift         keycode 30 = +A
control     keycode 30 = +aacute
alt         keycode 30 = +Aacute

altgr         keycode 30 = U+0444 # CYRILLIC SMALL LETTER EF
altgr shift   keycode 30 = U+0424 # CYRILLIC CAPITAL LETTER EF
<...>

              keycode 32 = +d
shift         keycode 32 = +D
control     keycode 32 = +eth
alt         keycode 32 = +ETH

    Жирным выделены добавленные нами строки. Для редактирования файла ru.map рекомендую использовать Midnight Commander - клавиша F4 позволяет редактировать даже заархивированный файл. Потом вам останется только перезагрузиться и начать наслаждаться триязычием вашей консоли. Для особо ленивых аттачу исправленную вышеописанным способом копию файла ru.map.gz.

В начало сайта

Обсудить



Hosted by uCoz