Sun, 11 Apr 2004

Да си чукнеш яйцето с XKB

По празниците отново се озовах в София. Използвах случая за да обновя системата на лаптопа на Елена. Без много да му мисля (нали знаех решението на проблема с GNOME) изплющях:

apt-get update

apt-get dist-upgrade

Всичко се обнови както си му е реда, GNOME не се прецака при обновяването, само дето забравих да включа pcmcia-модулите на новото ядро. Дебиан ме предупреди с големи надписи, но аз надменно ги подминах без да съзнавам, че всъщност работя на лаптоп без вградена мрежова карта и мрежата ми зависи изцяло от PCMCIA. Рестартирах системата, оказах се без мрежа, разбрах каква глупост съм сторил и легнах да спя.

Сутринта с помощта на обикновена дискета качих липсващите модули и върнах машината към света. Усмихнах се, изправен пред друг проблем -- превключването между латиница и кирилица в X. Елена (както в прочем и аз) е свикнала да използва десен Alt за превключване на режимите. Но при обновяването на Дебиан идва XFree86 4.3, който не ще да превключва от кирилица на латиница с AltGr. Преди няколко седмици бях изпищял заради това, но тогава Сашо Шопов ми помогна предлагайки да използвам десен Win, който стои точно до Alt. Хубаво, ама клавиатурата на Елена е със 102-клавиша, там няма Win и Menu...

Запретнах ръкави и се зарових в дефинициите и настройките на XKB. Междувременно отидохме на гости у Илия. Елена и Илийката взеха да готвят кокошка на фурна, а аз продължих да хаквам XKB (това му е хубавото на лаптопа, можеш да си го носиш навсякъде и да си го човъркаш без оглед на пространство и време). Илия ми отвори една бира и аз зачетох An Unreliable Guide to XKB Configuration. На втората бира вече го бях прочел и разглеждах файловете в /etc/X11/xkb. Голяма работа върши инструмента xev. С него забелязах, че когато си на латиница (us) и натиснеш десен Alt, системата разбира, че си натиснал ISO_Next_Group и сменя групата на bg. Оттам нататък събитията от този клавиш вече се интерпретират просто като чист RAlt и няма никакъв намек за ISO_Next_Group. (Апропо, очарован съм от програмата xprint. Авторът й определено трябва да обича хората, за да напише тази програма.) Очевидно на десния Alt трябва да е обърнато някакво особено внимание в дефинициите на българската клавиатурна подредба.

След известно боричкане по метода на пробите и грешките, стигнах до следното решение:

Файлът с дефинициите на българсктие символи е /etc/X11/xkb/symbols/pc/bg. Той се отваря с обикновен текстов редактор и редовете, започващи с:

  key <RALT>

трябва да се блокират с коментар, ето така:

//  key <RALT>

Трябва да има два подобни реда -- по един за bds и phonetic. След това се извиква стандартната команда:

setxkbmap -rules xfree86 -model pc102
-layout "us,bg" -variant "basic,phonetic"
-option "grp:toggle,grp_led:scroll"

Оттук нататък клавиатурата се превключва с десен Alt, "Scroll Lock" свети за да индикира български език. :-)

Впрочем Илийката има перфектна клавиатура "Chicony", произведена през 1988 г. Рай за пръстите. Бих му я свил ако бях по-лош човек. ;-)