![]() |
Русский в X-ах. | Версия для печати |
Что нужно? Section "InputDevice" Identifier "Keyboard1" Driver "Keyboard" Option "XkbRules" "xfree86" Option "XkbModel" "pc105" Option "XkbLayout" "ru" Option "XkbOptions" "grp:ctrl_shift_toggle,grp_led:scroll" EndSection Пояснения- XkbRules - правила по которым из последущих опций строятся параметры клавиатуры - геометрия, раскладка, charmap. xfree86 - это файл, который находится в /usr/X11R6/lib/X11/xkb/rules. XkbOptions - переключатель раскладок Ctrl+Shift, при переключении на русскую раскладку включается LED Scroll. В этой опции можно выбрать другие варианты grp:switcр grp:toggle grp:shift_toggle grp:ctrl_shift_toggle grp:caps_toggle grp:ctrl_alt_toggle grp:alt_shift_toggle grp:menu_toggle grp_led:num grp_led:caps grp_led:scroll Шрифты Русские шрифты также необходимо прописать в файле XF86Config в Section "Files". Простые bitmapped шрифты от cronyx включены в стандаотную поставку xfree86. Вписываем путь к ним в указанную секцию FontPath "/usr/X11R6/lib/X11/fonts/local/" Чтобы х-овые приложения могли использовать эти шрифты, нужно запускать приложения с ключом -fn <нужный фонт> или (что в принципе то-же самое) отредактировать ваш файл ресурсов ~/.Xdefaults. Вот как например будет выглядеть запись для xeditа (чтобы тот по умолчанию использовал times roman в кодировке koi8-r): xedit*Font : -cronyx-times-medium-r-*-*-14-*-*-*-*-*-koi8-r Локаль Теперь попробуйте написать что-нибудь на русском. Запустите xterm и в командной строке наберите команду export LC_ALL=ru_RU.KOI8-R затем запустите xedit -fn -cronyx-times-medium-r-*-*-14-*-*-*-*-*-koi8-r (или отредактируйте файл ресурсов), переключайтесь на русскую клавиатуру и печатайте. Получилось? Если курсор просто стоит на месте и никаких букв не видно, то это признак, что такой локали у вас нет (загляните в директорию /usr/lib/locale - если такая локаль существует, то там должна находится папка с названием локали). Впрочем, при отсутствии нужной локали вы получите предупреждение (Warning: locale not supported by C library, locale unchanged). Определите локаль. Для этого как раз и понадобится unstripped версия glibc. cd /usr/share/i18n Там находятся две папки с исходниками для локалей (locales) и charmaps (charmaps). "Откомпилируйте" локаль командой (ru_RU, KOI8-R - файлы из locales и charmaps соответственно) localedef -f KOI8-R -i ru_RU ru_RU.koi8-r Затем переименуйте (или сделайте линк) вновь созданную папку /usr/lib/locale/ru_RU.koi8-r в /usr/lib/locale/ru_RU.KOI8-R (для Х-ов это не особенно важно, тк они понимают оба названия, но при руссификации консольных программ могут возникнуть проблемы). В принципе все уже настроено. Несколько заключительных штрихов. Для troubleshootingа можно использовать программку xev. Запускаете ее, наводите курсор на ее окошко и печатаете. При этом в окне xterma должны появляться надписи типа: KeyRelease event, serial 27, synthetic NO, window 0x1a00001, root 0x2b, subw 0x0, time 178246257, (91,139), root:(271,191), state 0x2000, keycode 44 (keysym 0x6cf, Cyrillic_o), same_screen YES, XLookupString gives 1 characters: "о" Слово Cyrillic_o означает как раз, что ввод русского текста у вас настроен правильно. Если такого не происходит, то что-то у вас не так. Просмотреть текущую локаль можно командой locale (разумеется) $ locale LANG=POSIX LC_CTYPE="ru_RU.KOI8-R" LC_NUMERIC="POSIX" LC_TIME="ru_RU.KOI8-R" LC_COLLATE="ru_RU.KOI8-R" LC_MONETARY="ru_RU.KOI8-R" LC_MESSAGES="POSIX" LC_PAPER="ru_RU.KOI8-R" LC_NAME="ru_RU.KOI8-R" LC_ADDRESS="ru_RU.KOI8-R" LC_TELEPHONE="ru_RU.KOI8-R" LC_MEASUREMENT="ru_RU.KOI8-R" LC_IDENTIFICATION="ru_RU.KOI8-R" LC_ALL=ru_RU.KOI8-R Как видите у меня отдельные пункты (LC_NUMERIC, LC_MESSAGES) имеют значения POSIX. Сделал я это для того чтобы иметь точку в качестве знака дробного числа, и интерфейс программ на английском (мне так удобнее). Теперь осталось вписать все настройки в скрипты инициализаци. Открывайте /etc/profile, ищите где у вас определяется локаль и редактируйте: export LC_ALL=ru_RU.KOI8-R export LC_ALL= export LC_NUMERIC=POSIX export LC_MESSAGES=POSIX Вторая русская локаль (небольшое отступление) Иногда бывает нужно просматривать и читать тексты сделанные в windose кодировке (и не заморачиваться при этом с iconv туда и обратно). В принципе сведений, приведенных в предыдущем параграфе, достаточно, чтобы вы смогли определить вторую локаль (Ответ: localedef -f СP1251 -i ru_RU ru_RU.cp1251 export LC_ALL=ru_RU.cp1251 ) Единственная проблема - найти шрифты в соответствующей кодировке. Для этого можно просто перекодировать scalable шрифты - *.ttf и *.pfb (c bitmapped шрифтами такой фокус у меня не получился). (Примечание - Как установить truetype фонты написано в дополнении к этому постингу Ananasом.) Идея состоит в том, чтобы дописать в файл /usr/X11R6/lib/X11/fonts/FONT_TYPE/fonts.scale (который либо поставляется вместе с шрифтами, либо вам придется создать его с помощью программки ttmkfdir) имена фонтов, соответствующих имеющимся шрифтам, но с кодировкой -microsoft-cp1251. Вот простой tcl скрипт, который автоматизирует эту задачу: #!/usr/bin/tclsh set FScale [open ./fonts.scale "r+"] while {![eof $FScale]} { #substitute all fonts with koi8-r at the end with cp1251 and #append them to fonts.scale if { [regsub -all -- {koi8-r$} [gets $FScale] {microsoft-cp1251} newfont]>0} { puts $FScale $newfont } } close $FScale Теперь заставим Xserver переписать базу данных шрифтов mkfontdir mkfontdir -e /usr/X11R6/lib/X11/fonts/encodings xset fp rehash и запускаем xedit -fn *-microsoft-cp1251 Упражнение для желающих - Создайте локаль и шрифты для досовской кодировки. Gnome и GTK+ С GTK+ программами существует единственная проблема - они не понимают X-resource-ов ( и соответственно ключа -fn). По этому поводу было уже высказано немало флейма, так что не буду повторяться. Вместо файлов ~/.Xdefaults разработчики ГТК предлагают сходную функциональность через файлы gtkrc. Кроме того некоторые разработчики программ под gtk, "забывают" вызывать функцию gtk_set_locale, необходимую для того, чтобы программа могла использовать системные настройки локали (но тут уже ничего не поделаешь). Функциональность файлов gtkrc, правда, при этом оказывается урезанной - в них можно установливать картинки для фона, цвета, шрифты, и вообщем-то все (таким образом устроена поддержка тем). При этом rc файлы считываются в следующей последовательности - сначала общесистемные /opt/gnome/share/gtkrc, затем читается файл специфичный для выбранной локали (для русской например это будет /opt/gnome/share/gtkrc.ru - если таковой имеется) и в заключении файл пользователя ~/.gtkrc (у меня это просто линк на файл с темой /opt/gnome/share/themes/StepPastel/gtkrc). В сущности все что нужно - это прописать "правильные" (те с кириллическими символами) шрифты в любом из этих файлов, но при этом убедится, что эти фонты не переопределяются в других gtkrc файлах (так что лучше всего это делать в ~/.gtkrc). CopyLeft geekkoo Дополнение от Logvinon Хотелось бы немного добавить к данному тексту. X11 расширяют для себя понятия локали, и, соотвественно, хранят свои расширения в каталоге, например: /usr/lib/X11/locale Каждая локаль, известная X11, хранится в своем каталоге и состоит из трех файлов, например: koi8-r/Compose koi8-r/XI18N_OBJS koi8-r/XLC_LOCALE Все файлы текстовые и делаются руками в обычном редакторе по аналогии с существующими. Надо еще обратить внимание на файлы locale.alias и locale.dir. Структура и назначение их проста и, главное, описана в начале файлов. Заковырка только в одном, в файле locale.dir строки записываются в двух экземплярах, например: koi8-r/XLC_LOCALE ru_RU.KOI8-R koi8-r/XLC_LOCALE: ru_RU.KOI8-R Проверить локаль на поддержку X11 можно простой программкой: #include Далее, в файле XLC_LOCALE в секции XLC_CHARSET_DEFINE описывается charset, используемый XKB (XIM_methods). Вот здесь наступает некоторое разочарование, все charset'ы предопределены и добавить новый (загружаемый) пока невозможно. Список доступных charset'ов можно посмотреть, например, при помощи: luit -list Среди выведенного списка отсутствует CP866, поэтому честно сделать Досовскую кодировку, используя стандартный XKB, увы, не получается. А если не честно, то это уже совсем другая история. :) Дополнение от Ananas'а добавлю и свои 5 копеек в эту сокровищницу мысли :) Подключение TrueType шрифтов (для Х > 4.0): 1. скопировать шрифты в куда надо (например - /usr/X11R6/lib/X11/fonts/ttf) 2. в этой директории выполнить команду ttmkfdir -o fonts.scale 3. там же выполнить mkfontdir 4. прописать путь к шрифтам в /etc/X11/XF86Config[-4] или /etc/X11/fs/config (если используется xfs) 5. перезапустить Х-сервер или xfs Опубликовал: geekkoo |