Настройка международной клавиатуры с помощью Xmodmap Автор: © Juraj Sipos
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1. ВведениеДанная статья представляет собой переработанный вариант HOWTO, который я написал ранее. Переработка потребовалась потому, что в KDE 2.0 больше нет утилиты KIKBD, а XFree86 4.x обработывает определения клавиш ISO8859-2 лучше, чем более старые версии. Речь пойдет только о настройке клавиатуры с помощью Xmodmap, а не XKB. [Замечание: Эта статья описывает только настройку XFree86 версии 4.х, которой может не быть в дистрибутиве, которым Вы пользуетесь. Редактор] 1.2 С чего начатьСоздайте собственный файл .Xmodmap в соответствии с инструкциями ниже. В файл .bash_profile, находящийся в Вашей личной директории ~/ нужно добавить строки: export LANG=language export LC_ALL=language где "language" соответствует языку, который Вы собираетесь использовать. Соответствующее значение для каждого языка можно найти в файле locale.alias в /usr/X11R6/lib/X11/locale. В консоли выполниете команду "exit" и снова войдите в систему для того, чтобы bash перечитал ~/.bash_profile. Установите шрифты (для чешского или словацкого языка лучше подойдут шрифты ISO8859-2 Type 1) и укажите путь к ним в Вашем файле XF86Config. Запустите Х сервер. Обратите внимание, что текстовый редактор из KDE 2.0 иногда не выводит шрифты ISO8859-2 даже если Вы указали путь к ним. Создается впечатление, что команда "Latin2" просто не работает. Установите другой базовый текстовый редактор, в котором можно ВЫБИРАТЬ шрифты (подойдет kedit от старого KDE). Вызвав с помощью меню соответствующий диалог выберите кодировку ISO8859-2. В окне терминала выполните команду "xmodmap ~/.Xmodmap" для того, чтобы система перечитала настройки Xmodmap. Переключайте клавиатуру в свое удовольствие. Настройка международной клавиатуры с помощью XKB не рассматривается подробно, но упоминается, как относящаяся к проблемам интернализации. XKB и XMODMAP независимы друг от друга, поэтому Вы можете отредактировать файл /etc/X11/XF86Config так, как это описано в Danish-HOWTO или выполнить команду в окне X терминала (для Словацкой клавиатуры): setxkbmap -model pc102 -symbols 'czsk(us_sk_qwertz)' setxkbmap cs -option grp:shift_toggle Параметр "grp:shift_toggle" определяет способ изменения раскладки. Можно также написать Option "XkbOptions" "grp:ctrl_shift_toggle" в файле XF86Config, в этом случае переключение будет осуществлятся одновременным нажатием клавиш Ctrl и Shift. Сведения о других языках ищите в файле symbols.dir в каталоге /usr/X11R6/lib/X11/xkb. Имейте в виду, что некоторые символы имеются только в исходном коде, а не в двоичных файлах. Как видите, не все так просто. И все покажется еще сложнее, когда Вы обнаружите, что многие клавиатурные раскладки не входят в стандартную откомпилированную поставку XFree86, хотя их и можно найти в исходных текстах. Утилита kikbd изъята из KDE 2.0, а документация явно недостаточна. Хотелось бы просто запустить KDE, изменить настройки международной клавиатуры и немедленно начать набирать тексты на выбранном языке (это возможно для немецкого и некоторых других языков, но в восточно-европейских клавиатурах есть буквы, которые не работают). Более того, Вы не обнаружите Хорватской или Македонской клавиатур в выводе комманды "kcmshell Personaization/kcmlayout" из KDE 2.0. Зато там есть Чехословацкая клавиатура, хотя самой страны Чехословакии больше нет, а пользователям трудно понять, как указать в настройках чешский или словацкий языки по отдельности. Некоторые оконные менеджеры заменяют установки .Xmodmap своими. Когда установки .Xmodmap не срабатывают, правильным будет заставить систему перечитать их из Вашего личного каталога. Запустите в X-терминале команду: xmodmap ~/.Xmodmap После установки словацкой клавиатуры в KDE, указав в файле .Xmodmap стандартные определения кодов ISO8859-2, я так и не смог набирать словацкие или чешские тексты. Но про то, как решить эту проблему я все объяснил в HOWTO, опубликованном в Linux Gazette ранее. В последних версиях XFree86 больше нет нужды прибегать к этому эксперементальному способу. 2. Настройка международной клавиатуры X Windows с помощью XmodmapВ общем и целом так: 1. Стандартный способ, в котором используются стандартные названия символов (scaron для буквы 'S' с "короной" наверху, uacute для ú - u со знаком "острого" ударения). 2. Экспериментальный способ, в котором имена некоторых символов из набора ISO8859-1 используются, например, для получения scaron. Введите в свой Bash_profile: export LC_ALL=language export LANG=language Или: export LC_CTYPE=SK_SK export LC_ALL=SK_SK OR for csh shell setenv LC_ALL=language setenv LANG=language и поместите неизмененный стандартный файл .Xmodmap в свою личную папку. На вопрос, где можно получить этот самый "стандартный" файл, я отвечу так -- загляните в GNOME'овскую директорию ../share. Файл /usr/X11R6/lib/X11/locale/locale.alias содержит алиасы для языков, так что можете посмотреть там, что означает ca_ES или br_FR и каков точный синтаксис для Вашего языка (нельзя просто написать "croatia", а надо написать "croatian", но ни в коем случае не "Croatian" -- очень важный момент, т.к. система Unix чувствительна к регистру символов). Теперь нужно установить подходящий для выбранного языка шрифт и записать путь к нему в файле XF86Config. Если Вы хотите "интернационализировать" вашу клавиатуру, установите в первую очередь стандартные определения из Xmodmap и пользуйтесь правой клавишей Alt для переключения раскладок (если Вы используете Xmodmap из GNOME). Если не заработает, попробуйте следующее:
Печатать с национальной раскладкой можно только в приложениях, которые имеют доступ к шрифтам в кодировке ISO8859-2 (или другим необходимым шрифтам), но этого может оказаться недостаточным для StarOffice или друх приложений, использующих собственные встроеные шрифты. StarOffice использует собственную директорию для шрифтов -- StarOffice/share/xp3/fontmedtrcs/afm для шрифтов afm и StarOffice/share/xp3/pssoftfonts для шрифтов ps. Так что придется добавить шрифты ISO8859-2 в эти директории (чтобы StarOffice понял, что их надо использовать) и добавить символические ссылки в файл fonts.dir. Попробуйте скрипт, который я приготовил. Переименуйте его в "so52", сделайте его выполнимым (chmod +x so52), скопируйте в каталог StarOffice/share/xp3 и запустите оттуда. StarOffice 5.2 полноценно распознает документы Word 97, даже написанные на разных языках, но для более старых версий или других текстовых редакторов необходима предварительная конвертация из iso8859-2 в win1250. Таким образом, профессиональные переводчики могут с помощью StarOffice 5.2 работать с несколькими языками и экспортировать результаты работы в формат MS Word 97 или rtf. Наборы символовСледующая информация должна помочь Вам правильно задать раскладку клавиатуру в файле .Xmodmap для работы со шрифтами iso8859-2 или любыми другими. Ниже приводится кодовая таблица ISO-8859-1 для того, чтобы Вы могли найти правильные имена символов. Большая часть этой иформации пригодится для построения клавиатурной раскладки для "чистой" кодовой таблицы ISO-8859-1 или для комбинации восточно-европейских символов с западно-европейскими. Если Вам нужны языки, использующие другие, не центрально-европейские и западно-европейские кодовые таблицы, соответствующие таблицы для нужных кодовых страниц ISO*** можно найти в Интернет. В RedHat файл /usr/include/gdk/gdkkeysyms.h содержит все специальные имена символов, которые мы здесь используем (помимо этого там есть имена и для греческих символов). Файл Xmodmap со стандартными определениями ISO8859-2Это пример стандартного файла .Xmodmap с кодами символов от 0x31 по 0x33. Этот файл заставит X сервер корректно отображать символы lcaron, scaron и т.д., если Вы пользуетесь последними версиями XFree86 и в Вашем bash_profile правильные значения LC_LANG=language и LC-ALL=language. Просто скопируйте текст ниже начиная с символа 0x31 по 0x33 в файл Xmodmap из моей предыдущей публикации в Linux Gazette (удалите из него экспериментальные определения кодов клавиш 0x31-0x33). [Здесь можно найти текстовую версию] keycode 0x31 = grave asciitilde semicolon dead_diaeresis keycode 0x0A = 1 exclam plus 1 keycode 0x0B = 2 at lcaron 2 keycode 0x0C = 3 numbersign scaron 3 keycode 0x0D = 4 dollar ccaron 4 keycode 0x0E = 5 percent tcaron 5 keycode 0x0F = 6 asciicircum scaron 6 keycode 0x10 = 7 ampersand yacute 7 keycode 0x11 = 8 asterisk aacute 8 keycode 0x12 = 9 parenleft iacute 9 keycode 0x13 = 0 parenright eacute 0 keycode 0x14 = minus underscore equal percent keycode 0x15 = equal plus dead_acute dead_caron keycode 0x33 = backslash bar ograve parenright Эту таблицу можно использовать для построения Вашей центрально-европейской раскладки клавиатуры для стандартного метода (через Xmodmap)"Корона" [caron] -- это перевернутый значок ^ над буквой. Острое ударение [Acute] -- это маленький штрих на подобие косой черты / над буквой (ú, обозначается uacute). Диаерезис [diaeresis] (умляут) -- две точки .. над буквой. Верхняя точка [dot] -- точка над буквой (как в zdot ż). Рисунок объяснит лучше:
Если Вы хотите построть файл Xmodmap с кодовой таблицей ISO8859-1 для немецкой или датской раскладки, то придется выяснить правильные имена для необходимых символов, если Вы с ними не знакомы. Символьные примитивы [entities] в правой колонке нужны в Xmodmap для определения восточно-европейской клавиатурной раскладки.
3. Как Xmodmap работает в разных системахДля GNOME это не важно, но для корректного использования шрифтов в кодировке ISO8859-2 приложениями KDE 2.x необходимо изменить файл i18n (/etc/sysconfig/i18n) как указано ниже: RedHat: где"sk_SK" -- правильное обозначение нужного Вам языка. Mandrake: Для FreeBSD 4.2 следующим образом отредактируйте /etc/profile:
В Mandrake или FreeBSD воспользуемся раскладкой "cs" из директории /usr/X11R6/lib/X11/xkb/symbols/. Всегда можно воспользоваться методикой, основанной на xmodmap, в качестве альтернативы можно изменить map-файл соответствующим образом, заменив определения клавиш на свои собственные. В KDE 2.x помимо этого требуется выбрать кодовую таблицу iso8859-2 (или другую подходящую) в меню Personalization > Country and Language. Только после этого шрифты ISO8859-2 будут верно отоброжаться в приложениях, написанных для KDE. В этом отношении GNOME будет подружелюбнее. Следующее относится к случаю. когда файл i18n отстался неизмененным. 3.1 SuSe 7.0 с XFree86 3.3.6 и KDE 2.0Можно воспользоваться файлом Xmodmap со стандартными определениями клавиш для кодировки ISO8859-2 ("scaron" вместо "threequarters" и т.д.). К сожалению, хотя Вы и сможете немедленно набирать текст в ISO8859-2, dead keys (Прим. переводчика dead keys -- это клавиши, которые сами по себе не соответствуют никакому символу, а служат для добавления диакретичекских знаков к символу, клавиша для которого будет нажата следующей.:-() работать не будут и команда export LANG=language в этой ситуации не поможет. После копирования файла Compose из /usr/X11R6/lib/X11/locale/iso8859-2/ в /usr/X11R6/lib/X11/locale/iso8859-1/, dead keys начнут работать даже с некоторой элегантностью. В StarOffice 5.2 это тоже проверено. FontPath нужно изменить в /etc/XF86Config, а не в /etc/X11/Xf86Config. Если шрифты ISO8859-2 указать в FontPath в /etc/X11/Xf86Config, StarOffice может их не увидеть. При работе со StarOffice ни в коем случаем нельзя пользоваться шрифтами из самого StarOffice, вместо этого должны использоваться шрифты из директории ../ISO8859-2 (они появятся в меню шрифтов автоматически после выполнения скрипта, приведенного выше). Ниже приводится секция FontPath для шрифтов ISO8859-2 из файла /etc/XF86Config в моей установке SuSE 7.0: FontPath "/usr/X11R6/lib/X11/fonts/ISO8859-2/Type1" FontPath "/usr/X11R6/lib/X11/fonts/ISO8859-2/Type1/afm" FontPath "/usr/X11R6/lib/X11/fonts/ISO8859-2/Type1/pfm" 3.2 SuSE 7.0 with XFree86 version 3.3.6 and KDE 1.xТакже как и в случае KDE 2.0. 3.3 Mandrake Linux 7.2 с XFree86 версии 4.xПравильно установленные опции LANG=language и LC_ALL=langauge в Вашем bash_profile уже достаточны (но не для приложений KDE 2.x). Стандартный прием с использованием кодов клавиш в .Xmodmap (scaron, lcaron, not "threequarters" or "mu", etc.) и исполнение команды: "xmodmap /.Xmodmap" позволит Вам переключать клавиатуру клавишей Scroll Lock (если Вы используете мой файл Xmodmap; в случае другого файла Xmodmap попробуйте правый Alt или другие клавиши, в соответвтсвии с тем, что определено в файле Xmodmap). Установка FontPath в /etc/X11/XF86Config и /etc/X11/XF86Config менять не нужно: FontPath "unix/:1" XFree86 прочтет Ваши новые ISO8859-2 шрифты автоматически из директории /usr/share/fonts (как и в RedHat). Просто удивительно, что нет нужды копировать файл ../ISO8859-2/Compose в директорию ../ISO8859-1 для того, чтобы заработали dead keys. Для использования шрифтов ISO8859-2 с приложениями KDE 2.0 измените файл i18n как указано выше. 3.4 RedHat 6.0, 6.1 и 6.2 (старые версии XFree86)В этом случае будет работать "экспериментальный" файл .Xmodmap ("mu" вместо "lcaron" и т.д.), а файл Compose из ../IS08859-2 нужно скопировать в директорию ISO8859-1 для того, чтобы заработали dead keys. Файл XF86Config только один (в /etc/X11), а секция FontPath надо сделать такой же, как в описаном выше случае SuSE 7.0. 3.5 FreeBSD 3.1 and 3.2Не отличается от RedHat 6.0, 6.1, 6.2 3.6 FreeBSD 4.xКак и FreeBSD 3.1 и 3.2. Но XKB во FreeBSD 4.x обрабатывает установку LANG=language лучше. Это зависит и от XFree86. Так как команда FreeBSD очень консервативно по отношению к новым программам, FreeBSD поставляется с более старой версией XFree86. Во FreeBSD 4.1 работает прием с "экспериментальным" файлом .Xmodmap и для работы dead keys нужно копировать файл ../ISO8859-2/Compose в каталог ../ISO8859-1. Если Вы сами загрузили более свежую версию XFree86, можно использовать путь "стандартного" Xmodmap. Для FreeBSD 4.2, смотрите /etc/profile описанный выше и модифицируйте его в соответствии со своими потребностями. 4. Файлы Xmodmap для нескольких языков
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Copyright © 2001, Juraj Sipos. Copying license http://www.linuxgazette.com/copying.html Published in Issue 64 of Linux Gazette, March 2001 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Вернуться на главную страницу |