Настройка и работа в Linux
adb5321d

Настройка системы


Если у вас клавиатура уже руссифицирована каким-нибудь "старым" способом (с помощью xmodmap или программ-руссификаторов xruskb, xes и т.п.), то уберите их. Они будут только мешать. Во всяком случае, если будет "очень надо", вернете их потом.

Короче, позаботьтесь о том, чтобы у вас не было русского .Xmodmap

в домашней директории (и/или в {XROOT}/lib/X11/xinit/) и никакие xruskb не стартовали бы автоматически при запуске "иксов".

Итак. Прежде всего убедитесь, что у вас правильно установлены "русские фонты". Для этого нужно взять текст, "набитый" в koi8 (например, в какой-нибудь "консольной" программе). Если он нормально читается в xterm, то шрифты установлены "правильные". (Как установить "кириллические" шрифты я здесь описывать не буду. В Интернете достаточно инструкций на эту тему.)

Дальше. Проверьте, что у вас правильно установлена locale. Обычно она устанавливается переменной окружения LANG. Убедитесь, что значение этой переменной указывает на существующие файлы для "libc'ишной" locale (в /usr/share/locale) и "иксовой" locale (через locale.dir и, если нужно, locale.alias).

Не полагайтесть на результаты выдачи команды locale. В некоторых случаях она может показывать не совсем то, что и процедура setlocale()

вызываемая внутри прикладных программ.

Если будут проблемы, можете воспользоваться моей тестовой программкой testXlc.


Она определяет

  • "системную" locale,
  • locale для Xlib,
  • полный путь до файла XLC_LOCALE,
  • значения некоторых классов "иксовой" locale,
  • в том числе - "encodingName" (которое влияет на работу *LookupString).

Для "сборки" этой программы надо последовательно набрать команды

xmkmf make

Надо также заметить, что эта программа использует внутренние процедуры Xlib (не предназначенные для вызова в прикладных программах). Поэтому, нет гарантии, что она будет "собираться" и правильно работать во всех версиях XFree. Во всяком случае, она должна давать требуемый результат в версиях 3.3.2, 3.3.3, 3.3.3.1.




Далее. Можно проверить, что XKB действительно переключается на "русскую" раскладку и выдает коды Cyrillic.

Для этого можно воспользоваться программой xev (если ее нет в вашей системе, то можно найти ее в XFree86-contrib).

Вообще-то, это "универсальный тестер" "событий" (X events). Ее надо запустить из под xterm. При нажатии кнопок она должна писать что-то вроде этого

KeyPress event, serial 21, synthetic NO, window 0x5800001, root 0x25, subw 0x0, time 3744190622, (533,270), root:(610,437), state 0x2000, keycode 38 (keysym 0x6c6, Cyrillic_ef), same_screen YES, XLookupString gives 0 characters: ""

KeyRelease event, serial 21, synthetic NO, window 0x5800001, root 0x25, subw 0x0, time 3744190755, (533,270), root:(610,437), state 0x2000, keycode 38 (keysym 0x6c6, Cyrillic_ef), same_screen YES, XLookupString gives 0 characters: ""

Обратите внимание, что если у вас клавиатура перключена в "русский режим", то в третей строчке сообщения должно быть название Cyrillic кода клавиши

Кстати, xev - "неправильная" программа. Если сделать ее "правильной", добавив в начале вызов (и "пересобрав" ее)

setlocale(LC_CTYPE, "");

то она будет показывать и результат трансляции Cyrillic кодов в koi8-r

(ну, или iso8859-5), например -

KeyPress event, serial 21, synthetic NO, window 0x5800001, root 0x25, subw 0x0, time 3744190622, (533,270), root:(610,437), state 0x2000, keycode 38 (keysym 0x6c6, Cyrillic_ef), same_screen YES, XLookupString gives 1 characters: "ф"

KeyRelease event, serial 21, synthetic NO, window 0x5800001, root 0x25, subw 0x0, time 3744190755, (533,270), root:(610,437), state 0x2000, keycode 38 (keysym 0x6c6, Cyrillic_ef), same_screen YES, XLookupString gives 1 characters: "ф"

Ну и, наконец, надо убедится, что у вас не XFree86 3.3.3 (хотя с этого надо было начинать :-).
(Надо бы написать простенький "тестер", который проверяет правильность работы *LookupString при заведомо правильной encoding_name. Но пока сойдет "подправленная" xev. Она, кстати, использует только XLookupString.)

Итак, если


  • у вас стоят "кириллические" шрифты;
  • программа testXlc показала, что название "системной" и "иксовой" locale совпадают, и значение "encodingName" - KOI8-R;
  • xev показывает Cyrillic коды;
  • "поправленный" xev транслирует их в нормальные koi8-r коды;


то система у вас настроена. И "правильные" программы должны работать нормально.

А вот что делать с "неправильными" программами - разговор отдельный...


Содержание раздела