Мої експеременти з xkb та індикатором І. Паскаля xxkb

Date: Thu, 28 Sep 2000 17:43:13 +0300 (EEST)
From: "Dmitry V.Titkov" dima at ztri.ntu-kpi.kiev.ua
To: linux at linux.org.ua
Subject: Як я настроїв xkb + xxkb.

Вирішив налагодити переключення трьох розкладок. Після нетривалих пошуків|роздумів зупинився на варіанті xkb - спосіб переключення розкладок + xxkb - індікатор розкладки. Далі я опишу чого я досяг і яким чином.

Результат:

  1. Маю три розкладки. en+ru+ua
  2. В заголовку кожного вікна, в залежності від розкладки, відображаються різні прапорці. ;-)
  3. Перемиканя розкладок або по колу, або між двома групами.
  4. Перемикання або мишою, або клавіатурою (rctrl+rshift)

Дії які до цього призвели.

  1. Уважно прочитив документацію від Паскаля.
  2. Зкачав останню версію xxkb.
  3. Зкомпілював xxkb.
  4. На perl'і написав скрипт, яким зробив з двох файлів /usr/X11R6/lib/X11/xkb/symbols/ru та /usr/X11R6/lib/X11/xkb/symbols/ua одим з трьома групами. І трохи їого переробив під себе (ненавиджу українську "і" на тій клавіші, де російська "и", тому поміняв їх місцями).
  5. Назвав новий файл з розкладкою (хоча так казати не зовсім правильно) ur_my і поклав /usr/X11R6/lib/X11/xkb/symbols/ur_my.
  6. Підтримка xkb в мене була включена весь час, тому просто наведу рядки з файла конфігурації /etc/X11/XF86Config

    ... Section "Keyboard" ... LeftAlt Meta RightAlt Meta ScrollLock Compose RightCtl Control ... # To disable the XKEYBOARD extension, uncomment XkbDisable. # XkbDisable

    XkbKeycodes "xfree86" XkbTypes "default" XkbCompat "default" XkbSymbols "us(pc101)" XkbGeometry "pc" XkbRules "xfree86" XkbOptions "grp:ctrl_shift_toggle" XkbModel "pc101" XkbLayout "ur_my"

    EndSection ...

Треба звернути увагу на рядок «XkbLayout "ur_my"» тут вказується ім'я файлу з новою розкладкою.

  1. Вирішив, що краще настройки тримати у файлі ~/.xxkbrc. Пристосував стандартний файл який йшов з xxkb до своїх смаків.

  2. Прописав виклик xxkb у файлі ~/.xinitrc. Я вирішив, що краще кожен користувач буде запускати той індикатор, який йому більше подобається.

  3. З наступного старту X маємо все що описане в розділі "Результат". xxkb також можна запускати і в той час коли Х вже працюють, просто з терміналу.

3.3.3 Перелік посилань.

Успіхів. (Дмитрий Титков)

Українські літери в бічних панелях Nautilus

Для того, щоб Nautilus у бічних панелях відображав українські літери, потрібно зробити наступне:

Як вводити українськи і російськи літери в XFREE86 4 одночасно

Простий варіант для необмеженої кількості розкладок.

Можна повісити декілька команд виду

setxkbmap "ua(winkeys)+group(toggle)"
setxkbmap "ru(winkeys)+group(toggle)"
...

на різні клавіатурні комбінації, наприклад на Win-1, Win-2, і т.д. або вводити їх з клавіатури чи зробити для них піктограмки на стільниці чи на панелі.

Тоді можна перемикнутися на потрібну розкладку одним рухом.

(lvm at mystery.lviv.net)

У мандрейку 8 немає проблем із вводом національних літер під X-ми, тому що в 4 версії XFree добре продумана система інтернаціоналазації. Тобто Ви легко можите отримати англо/українську або англо/російську розкладку, вказавши KeyBoard Layout "ua" чи "ru" у XF86Config-4. Але, нажаль, дуже часто виникає потреба мати три розкладки одночасно, тобто зробити англо/укро/російську розкладку. Під MSWindows це не викликає питань, а от під Linux .... Переходимо до кухарського рецепту:

  1. Створіть у каталозі /etc/X11/xkb/symbols файл під назвою rua і пропишіть туди такі рядки:

     // // ukrainian-russian hybrid keyboard // //
    
     partial default alphanumeric_keys xkb_symbols "basic" {
    
         // Describes the differences between a very simple en_US
         // keyboard and a very simple Russian keybaord and a very simple ukrainian keyb
    
         name[Group1]= "US/ASCII";
         name[Group2]= "Russian";
         name[Group3]= "Ukrainian";
    
     partial default alphanumeric_keys xkb_symbols "basic" {
    
         // Describes the differences between a very simple en_US
         // keyboard and a very simple Russian keybaord
    
         name[Group1]= "US/ASCII";
         name[Group2]= "Russian";
         name[Group3]= "Ukrainian";
    
         key TLDE {        [           grave,      asciitilde      ],
                             [     Cyrillic_io,     Cyrillic_IO      ]       ,
                             [ Ukrainian_ghe_with_upturn, Ukrainian_GHE_WITH_UPTURN ] };
         key LSGT {        [            less,         greater      ],
                             [             bar,       brokenbar      ]       ,
                             [             bar,       brokenbar      ]       };
         key AD01 {        [               q,               Q      ],
                             [ Cyrillic_shorti, Cyrillic_SHORTI      ]       ,
                             [ Cyrillic_shorti, Cyrillic_SHORTI      ]       };
         key AE01 {        [               1,          exclam      ],
                             [               1,          exclam      ]       ,
                             [               1,          exclam      ]       };
         key AB01 {        [               z,               Z      ],
                             [     Cyrillic_ya,     Cyrillic_YA      ]       ,
                             [     Cyrillic_ya,     Cyrillic_YA      ]       };
         key AC02 {        [               s,               S      ],
                             [   Cyrillic_yeru,   Cyrillic_YERU      ]       ,
                             [     Ukrainian_i,     Ukrainian_I      ]       };
         key AC01 {        [               a,               A      ],
                             [     Cyrillic_ef,     Cyrillic_EF      ]       ,
                             [     Cyrillic_ef,     Cyrillic_EF      ]       };
         key AD02 {        [               w,               W      ],
                             [    Cyrillic_tse,    Cyrillic_TSE      ]       ,
                             [    Cyrillic_tse,    Cyrillic_TSE      ]       };
         key AE02 {        [               2,              at      ],
                             [               2,        quotedbl      ]       ,
                             [               2,        quotedbl      ]       };
         key AB03 {        [               c,               C      ],
                             [     Cyrillic_es,     Cyrillic_ES      ]       ,
                             [     Cyrillic_es,     Cyrillic_ES      ]       };
         key AB02 {        [               x,               X      ],
                             [    Cyrillic_che,    Cyrillic_CHE      ]       ,
                             [    Cyrillic_che,    Cyrillic_CHE      ]       };
         key AC03 {        [               d,               D      ],
                             [     Cyrillic_ve,     Cyrillic_VE      ]       ,
                             [     Cyrillic_ve,     Cyrillic_VE      ]       };
         key AD03 {        [               e,               E      ],
                             [      Cyrillic_u,      Cyrillic_U      ]       ,
                             [      Cyrillic_u,      Cyrillic_U      ]       };
         key AE04 {        [               4,          dollar      ],
                             [               4,        asterisk      ]       ,
                             [               4,        asterisk      ]       };
         key AE03 {        [               3,      numbersign      ],
                             [               3,      numbersign      ]       ,
                             [               3,      numbersign      ]       };
         key AB04 {        [               v,               V      ],
                             [     Cyrillic_em,     Cyrillic_EM      ]       ,
                             [     Cyrillic_em,     Cyrillic_EM      ]       };
         key AC04 {        [               f,               F      ],
                             [      Cyrillic_a,      Cyrillic_A      ]       ,
                             [      Cyrillic_a,      Cyrillic_A      ]       };
         key AD05 {        [               t,               T      ],
                             [     Cyrillic_ie,     Cyrillic_IE      ]       ,
                             [     Cyrillic_ie,     Cyrillic_IE      ]       };
         key AD04 {        [               r,               R      ],
                             [     Cyrillic_ka,     Cyrillic_KA      ]       ,
                             [     Cyrillic_ka,     Cyrillic_KA      ]       };
         key AE05 {        [               5,         percent      ],
                             [               5,           colon      ]       ,
                             [               5,           colon      ]       };
         key AB06 {        [               n,               N      ],
                             [     Cyrillic_te,     Cyrillic_TE      ]       ,
                             [     Cyrillic_te,     Cyrillic_TE      ]       };
         key AB05 {        [               b,               B      ],
                             [      Cyrillic_i,      Cyrillic_I      ]       ,
                             [      Cyrillic_i,      Cyrillic_I      ]       };
         key AC06 {        [               h,               H      ],
                             [     Cyrillic_er,     Cyrillic_ER      ]       ,
                             [     Cyrillic_er,     Cyrillic_ER      ]       };
         key AC05 {        [               g,               G      ],
                             [     Cyrillic_pe,     Cyrillic_PE      ]       ,
                             [     Cyrillic_pe,     Cyrillic_PE      ]       };
         key AD06 {        [               y,               Y      ],
                             [     Cyrillic_en,     Cyrillic_EN      ]       ,
                             [     Cyrillic_en,     Cyrillic_EN      ]       };
         key AE06 {        [               6,     asciicircum      ],
                             [               6,           comma      ]       ,
                             [               6,           comma      ]       };
         key AB07 {        [               m,               M      ],
                             [Cyrillic_softsign,Cyrillic_SOFTSIGN    ]       ,
                             [Cyrillic_softsign,Cyrillic_SOFTSIGN    ]       };
         key AC07 {        [               j,               J      ],
                             [      Cyrillic_o,      Cyrillic_O      ]       ,
                             [      Cyrillic_o,      Cyrillic_O      ]       };
         key AD07 {        [               u,               U      ],
                             [    Cyrillic_ghe,    Cyrillic_GHE      ]       ,
                             [    Cyrillic_ghe,    Cyrillic_GHE      ]       };
         key AE07 {        [               7,       ampersand      ],
                             [               7,          period      ]       ,
                             [               7,          period      ]       };
         key AE08 {        [               8,        asterisk      ],
                             [               8,       semicolon      ]       ,
                             [               8,       semicolon      ]       };
         key AB08 {        [           comma,            less      ],
                             [     Cyrillic_be,     Cyrillic_BE      ]       ,
                             [     Cyrillic_be,     Cyrillic_BE      ]       };
         key AC08 {        [               k,               K      ],
                             [     Cyrillic_el,     Cyrillic_EL      ]       ,
                             [     Cyrillic_el,     Cyrillic_EL      ]       };
         key AD08 {        [               i,               I      ],
                             [    Cyrillic_sha,    Cyrillic_SHA      ]       ,
                             [    Cyrillic_sha,    Cyrillic_SHA      ]       };
         key AD09 {        [               o,               O      ],
                             [  Cyrillic_shcha,  Cyrillic_SHCHA      ]       ,
                             [  Cyrillic_shcha,  Cyrillic_SHCHA      ]       };
         key AE10 {        [               0,      parenright      ],
                             [               0,      parenright      ]       ,
                             [               0,      parenright      ]       };
         key AE09 {        [               9,       parenleft      ],
                             [               9,       parenleft      ]       ,
                             [               9,       parenleft      ]       };
         key AB09 {        [          period,         greater      ],
                             [     Cyrillic_yu,     Cyrillic_YU      ]       ,
                             [     Cyrillic_yu,     Cyrillic_YU      ]       };
         key AB10 {        [           slash,        question      ],
                             [           slash,        question      ]       ,
                             [           slash,        question      ]       };
         key AC09 {        [               l,               L      ],
                             [     Cyrillic_de,     Cyrillic_DE      ]       ,
                             [     Cyrillic_de,     Cyrillic_DE      ]       };
         key AC10 {        [       semicolon,           colon      ],
                             [    Cyrillic_zhe,    Cyrillic_ZHE      ]       ,
                             [    Cyrillic_zhe,    Cyrillic_ZHE      ]       };
         key AD10 {        [               p,               P      ],
                             [     Cyrillic_ze,     Cyrillic_ZE      ]       ,
                             [     Cyrillic_ze,     Cyrillic_ZE      ]       };
         key AE11 {        [           minus,      underscore      ],
                             [           minus,      underscore      ]       ,
                             [           minus,      underscore      ]       };
         key AC11 {        [      apostrophe,        quotedbl      ],
                             [      Cyrillic_e,      Cyrillic_E      ]       ,
                             [    Ukrainian_ie,    Ukrainian_IE      ]       };
         key AD11 {        [     bracketleft,       braceleft      ],
                             [     Cyrillic_ha,     Cyrillic_HA      ]       ,
                             [     Cyrillic_ha,     Cyrillic_HA      ]       };
         key AE12 {        [           equal,            plus      ],
                             [           equal,            plus      ]       ,
                             [           equal,            plus      ]       };
         key AD12 {        [    bracketright,      braceright      ],
                             [Cyrillic_hardsign,Cyrillic_HARDSIGN    ]       ,
                             [    Ukrainian_yi,    Ukrainian_YI      ]       };
         key BKSL {        [       backslash,             bar      ],
                             [       backslash,             bar      ]       ,
                             [       backslash,             bar      ]       };
    
         // End alphanumeric section
    
         // Begin modifier mappings
    
         modifier_map Shift  { Shift_L };
         modifier_map Lock   { Caps_Lock, ISO_Lock };
         modifier_map Control{ Control_L };
         modifier_map Mod3   { Mode_switch };
    
     };
     partial alphanumeric_keys xkb_symbols "winkeys" {
    
         include "rua(basic)"
         key AE04 {        [               4,          dollar      ],
                             [               4,       semicolon      ]       ,
                             [               4,       semicolon      ]       };
         key AE03 {        [               3,      numbersign      ],
                             [               3,      numbersign      ]       ,
                             [               3,      numbersign      ]       };
         key AE05 {        [               5,         percent      ],
                             [               5,         percent      ]       ,
                             [               5,         percent      ]       };
         key AE06 {        [               6,     asciicircum      ],
                             [               6,           colon      ]       ,
                             [               6,           colon      ]       };
         key AE07 {        [               7,       ampersand      ],
                             [               7,        question      ]       ,
                             [               7,        question      ]       };
         key AE08 {        [               8,        asterisk      ],
                             [               8,        asterisk      ]       ,
                             [               8,        asterisk      ]       };
         key AB10 {        [           slash,        question      ],
                             [          period,           comma      ]       ,
                             [          period,           comma      ]       };
         key BKSL {        [       backslash,             bar      ],
                             [           slash,             bar      ]       ,
                             [           slash,             bar      ]       };
    
  2. Налаштуйте Х сервер саме на цю гібрідну розкладку. Робиться це у файлі XF86Config-4, що лежить у /etc/X11. Туда треба написати у розділі "Keyboard"

      # ********************************************************************** 
      # Keyboard section 
      # **********************************************************************
      Section "InputDevice"
    
         Identifier "Keyboard1"
         Driver     "Keyboard"
         Option "AutoRepeat"  "250 30"
    
         Option "XkbRules"   "xfree86"
         Option "XkbModel"   "pc104"
         Option "XkbLayout"  "rua"
         Option "XkbVariant" "winkeys"
         Option "XkbOptions" "ctrl:nocaps,grp:ctrl_shift_toggle,grp:switch"
    
      EndSection
    

    Після цього у Вас буде 3 розкладки клавіатури і Ви зможете перемикати їх у таком у порядку: en/ru/ua, натискаючи Ctrl+Shift.

  3. не забувайте виставити українську локаль. у файлі /etc/sysconfig/i18n має бути таке:

     SYSFONT=UniCyr_8x16
     LC_CTYPE=uk_UA.KOI8-U
     LC_MONETARY=uk_UA.KOI8-U
     LANGUAGE=uk_UA:uk
     LC_TIME=uk_UA.KOI8-U
     LC_NUMERIC=uk_UA.KOI8-U
     LC_COLLATE=uk_UA.KOI8-U
     LC_MESSAGES=uk_UA.KOI8-U
     LANG=uk
     SYSFONTACM=koi8-u
    

Після таких нескладних кроків Ваш мандрейк почне до огиди нагадувати MS Windows із єдиною відміною: Ви ніколи не будете знати, яка розкладка у Вас зараз, і у Ваших файлах будуть проскакувати фрази на кшалт "шановны пани украънцы".

Питання слати на ivanpetrichenko@yahoo.com ivanpetrichenko@nbc.com.ua

До цього можно додати лише одне. Щоб завжди мати уяву яка у вас зараз розкладка, налаштуйте собі xxkb. Як це зробити записано в його документаціі.

Щоб не мучатися з генерацією потрійних та більше розкладок, скористайтеся пропозицією на початку розділу. Вона більш універсальна.

Налаштуйте спочатку XFree86-4 на нормальну роботу з украінською розкладкою (тип - winkeys, чи що потрібно, перемикання), а потім "завісьте" команду типу: setxkbmap -layout ru -option winkeys у потрібній кількості на зручні для вас клавіши. Інших параметрів не треба бо Ви вже налаштували все інше. Ще одна зручність такого варіанту, зникнення потреби перемикати послідовно всі існуючі розкладки, щоб отримати потрібну. Крім того, після виклику розкладки зберігається стан групи. Коли ви друкували українською, то викликавши російську, наприклад, зможите одразу друкувати російською, а потім повернутися до української. Щоб бачити стан групи, налаштуйте собі xxkb. От лише, він не буде відслідковувати зміну мови, лише групи. Успіхів!

Як змусити lyx писати українською

Якщо ви налаштували укр локаль, шрифти та розкладку, то все це зовсім не означає, що ваш улюбленний LyX почне друкувати укр. літери З ним треба боротися окремо. Рецепт для Мандрейк Лінакс 8 та Лікс 1.1.6фікс3 Для інших - по аналогії

  1. Створити файл розкладки для ликс /usr/share/lyx/bind/cyrillyc.bind і написати там таке

      \bind "Cyrillic_yu" "self-insert"
      \bind "Cyrillic_a" "self-insert"
      \bind "Cyrillic_be" "self-insert"
      \bind "Cyrillic_tse" "self-insert"
      \bind "Cyrillic_de" "self-insert"
      \bind "Cyrillic_ie" "self-insert"
      \bind "Cyrillic_ef" "self-insert"
      \bind "Cyrillic_ghe" "self-insert"
      \bind "Cyrillic_ha" "self-insert"
      \bind "Cyrillic_i" "self-insert"
      \bind "Cyrillic_shorti" "self-insert"
      \bind "Cyrillic_ka" "self-insert"
      \bind "Cyrillic_el" "self-insert"
      \bind "Cyrillic_em" "self-insert"
      \bind "Cyrillic_en" "self-insert"
      \bind "Cyrillic_o" "self-insert"
      \bind "Cyrillic_pe" "self-insert"
      \bind "Cyrillic_ya" "self-insert"
      \bind "Cyrillic_er" "self-insert"
      \bind "Cyrillic_es" "self-insert"
      \bind "Cyrillic_te" "self-insert"
      \bind "Cyrillic_u" "self-insert"
      \bind "Cyrillic_zhe" "self-insert"
      \bind "Cyrillic_ve" "self-insert"
      \bind "Cyrillic_softsign" "self-insert"
      \bind "Cyrillic_yeru" "self-insert"
      \bind "Cyrillic_ze" "self-insert"
      \bind "Cyrillic_sha" "self-insert"
      \bind "Cyrillic_e" "self-insert"
      \bind "Cyrillic_shcha" "self-insert"
      \bind "Cyrillic_che" "self-insert"
      \bind "Cyrillic_hardsign" "self-insert"
      \bind "S-Cyrillic_YU" "self-insert"
      \bind "S-Cyrillic_A" "self-insert"
      \bind "S-Cyrillic_BE" "self-insert"
      \bind "S-Cyrillic_TSE" "self-insert"
      \bind "S-Cyrillic_DE" "self-insert"
      \bind "S-Cyrillic_IE" "self-insert"
      \bind "S-Cyrillic_EF" "self-insert"
      \bind "S-Cyrillic_GHE" "self-insert"
      \bind "S-Cyrillic_HA" "self-insert"
      \bind "S-Cyrillic_I" "self-insert"
      \bind "S-Cyrillic_SHORTI" "self-insert"
      \bind "S-Cyrillic_KA" "self-insert"
      \bind "S-Cyrillic_EL" "self-insert"
      \bind "S-Cyrillic_EM" "self-insert"
      \bind "S-Cyrillic_EN" "self-insert"
      \bind "S-Cyrillic_O" "self-insert"
      \bind "S-Cyrillic_PE" "self-insert"
      \bind "S-Cyrillic_YA" "self-insert"
      \bind "S-Cyrillic_ER" "self-insert"
      \bind "S-Cyrillic_ES" "self-insert"
      \bind "S-Cyrillic_TE" "self-insert"
      \bind "S-Cyrillic_U" "self-insert"
      \bind "S-Cyrillic_ZHE" "self-insert"
      \bind "S-Cyrillic_VE" "self-insert"
      \bind "S-Cyrillic_SOFTSIGN" "self-insert"
      \bind "S-Cyrillic_YERU" "self-insert"
      \bind "S-Cyrillic_ZE" "self-insert"
      \bind "S-Cyrillic_SHA" "self-insert"
      \bind "S-Cyrillic_E" "self-insert"
      \bind "S-Cyrillic_SHCHA" "self-insert"
      \bind "S-Cyrillic_CHE" "self-insert"
      \bind "S-Cyrillic_HARDSIGN" "self-insert"
      \bind "Ukrainian_ghe_with_upturn" "self-insert"
      \bind "S-Ukrainian_GHE_WITH_UPTURN" "self-insert"
      \bind "Ukrainian_i" "self-insert"
      \bind "S-Ukrainian_I" "self-insert"
      \bind "Ukrainian_ie" "self-insert"
      \bind "S-Ukrainian_IE" "self-insert"
      \bind "Ukrainian_yi" "self-insert"
      \bind "S-Ukrainian_YI" "self-insert"
    

    сам я знайшов подібне файло на якомусь болгарському сайті і додав укр. літери

  2. додати цю розкладку до розкладки по замовчанню "куа". Для цього у файл /usr/share/lyx/bind/cua.bind дописати останній рядок

      \bind_file cyrillic.bind
    
  3. налаштувати шрифти лікса

    • Меню Edit/preference
    • закладка Look&Feel закладка Screen Fonts Encoding=koi8-u
    • закладка Look&Feel закладка Interface Encoding=koi8-u
    • закладка Lang Opt закладка Language DefaultLanguage=ukrainian

Все. Друкуйте наукові праці українською !

ivanpetrichenko@nbc.com.ua

Не намагайтеся так лікувати LyX з комплектів ALTLinux. Там він налаштований на роботу з системними розкладками. Тому все працює з коробки. Лише налаштуйте системну клавіатуру під свої потреби.

andobr at ukr.net

Українізація emacs та xemacs

Оскільки ці питання вже висвітлені в публікаціях в мережі, я тут наводжу тільки посилання на вже існуючі джерела:

--Дмитро