…проблема виникає тоді, коли треба бодай трішки щось зробити на іншій клавіатурі. отже, давня мрія: переналаштувати обробника клавіатури linux так, щоби capslock+ijkl (і кілька інших комбінацій) працювали, як на pok3r'і.
щойно подужав… але поки що не впетраю, як це до ладу автоматизувати. поки що просто занотую, як робиться руцями.
capslock
спершу я спробував зробити справу за допомогою xmodmap — вийшло лише частково. але принаймні переналаштування capslock працює:! ----------------------------------------
! CapsLock працюватиме як ISO_Level3_Shift
! (третій рівень, зазвичай правий Alt)
! ----------------------------------------
clear lock
clear mod5
add mod5 = Caps_Lock ISO_Level3_Shift
keycode 66 = ISO_Level3_Shift Caps_Lock
це треба зберегти до текстового файлу (приміром, capslock.xmodmap) і завантажити:
xmodmap capslock.xmodmap
після цього capslock дублює функцію правого alt'а (який на моїх обох розкладках, канадській багатомовній та українській unicode, дає доступ до «третього шару» — символів на кшалт µ, {} ы тощо), але разом із shift'ом працює як звичайний capslock.
ijkl та латинка
в канадській багатомовній отримати навігацію з altr+ijkl можна так само за допомогою xmodmap. по-перше, можна експортувати поточну розкладку (xmodmap -pke) і підглянути налаштування саме для цих клавіш (grep):xmodmap -pke | grep -e "^.*=\ *[ijkl]" > ijkl.xmodmap
маю щось таке у файлі ijkl.xmodmap:
keycode 31 = i I Cyrillic_sha Cyrillic_SHA NoSymbol NoSymbol rightarrow idotless
keycode 44 = j J Cyrillic_o Cyrillic_O NoSymbol NoSymbol U0133 U0132
keycode 45 = k K Cyrillic_el Cyrillic_EL NoSymbol NoSymbol kra NoSymbol NoSymbol NoSymbol Cyrillic_lje Cyrillic_LJE
keycode 46 = l L Cyrillic_de Cyrillic_DE NoSymbol NoSymbol U0140 U013F NoSymbol NoSymbol Serbian_dje Serbian_DJE
ліворуч (від =) коди клавіш на вході обробника клавіатури xorg. праворуч — те, що обробник подає на вихід, залежно від стану (shift, ctrl тощо). приміром, j та J — це символи (насправді псевдоніми) при нормальному натисканні та з shift'ом. далі — другий рівень (в моєму випадку українська розкладка), нормально та з shift'ом; тут вже добре видно, що це псевдоніми: cyrillic_sha (ш) та cyrillic_SHA (Ш).
емпіричним шляхом виявляю, що наступні два псевдоніми (NoSymbol NoSymbol) — це третій рівень першої розкладки, саме те, що вмикає правий alt: так само нормальний ввід та з shift'ом. міняю на псевдоніми потрібних дій:
keycode 31 = i I Cyrillic_sha Cyrillic_SHA Up Up rightarrow idotless
keycode 44 = j J Cyrillic_o Cyrillic_O Left Left U0133 U0132
keycode 45 = k K Cyrillic_el Cyrillic_EL Down Down kra NoSymbol NoSymbol NoSymbol Cyrillic_lje Cyrillic_LJE
keycode 46 = l L Cyrillic_de Cyrillic_DE Right Right U0140 U013F NoSymbol NoSymbol Serbian_dje Serbian_DJE
згодовую xmodmap'ові й маю бажану навігацію capslock+ijkl, але лише на першій розкладці, канадській:
xmodmap ijkl.xmodmap
ijkl та кирилиця
коли я спробував той самий фокус для української розкладки, здогадуючись (див. псевдоніми в рядках keycode 45 та 46), що 11-й та 12-й псевдоніми мають відповідати за третій рівень (altr) другої розкладки — виявилося, що [k] та [l] працюють, а от [i] та [о] — дзуськи. після не дуже результативного гугління поліз глибше — в налаштування xkb, і знайшов.щоби вивантажити налаштування xkb до файлу layout.xkbcomp:
xkbcomp $DISPLAY layout.xkbcomp
по-перше, аліаси потрібних клавіш (коди 31, 44, 45 та 46):
<AD08> = 31;
...
<AC07> = 44;
<AC08> = 45;
<AC09> = 46;
тут A — основна частина клавіатури, D та C — ряди (знизу вгору), 07 — номер клавіші. далі шукаю налаштування для кожної клавіші. ось моя j:
key <AD08> {
type[group1]= "EIGHT_LEVEL_SEMIALPHABETIC",
type[group2]= "ALPHABETIC",
symbols[Group1]= [ i, I, Up, Up, rightarrow, idotless, NoSymbol, NoSymbol ],
symbols[Group2]= [ Cyrillic_sha, Cyrillic_SHA ]
порівнюючи це з одним рядком виводу xmodmap для клавіші [i] (код 31), здогадуюсь: це мої розкладки (type[groupX]) і відповідний набір псевдонімів (symbols[groupX]). українська для j відформатована за шаблоном "alphabetic", котрий містить (це видно вище у файлі) лише два символи: нормальний та з shift'ом (оті cyrillic_sha та cyrillic_SHA). ось шаблон:
type "ALPHABETIC" {
modifiers= Shift+Lock;
map[Shift]= Level2;
map[Lock]= Level2;
level_name[Level1]= "Base";
level_name[Level2]= "Caps";
};
так само [j] має лише два символи в українській розкладці. натомість, клавіші [k] та [l] в українській розкладці відформатовано за іншим шаблоном, в якому визначено чотири символи (і після спроби редагування xmodmap'ом тут вже є потрібні псевдоніми down):
key{
type[group1]= "EIGHT_LEVEL_SEMIALPHABETIC",
type[group2]= "FOUR_LEVEL_ALPHABETIC",
symbols[Group1]= [ k, K, Down, Down, kra, NoSymbol, NoSymbol, NoSymbol ],
symbols[Group2]= [ Cyrillic_el, Cyrillic_EL,Down, Down ]
шаблон «four_level_alphabetic»:
type "FOUR_LEVEL_ALPHABETIC" {
modifiers= Shift+Lock+LevelThree;
map[Shift]= Level2;
map[Lock]= Level2;
map[LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
map[Lock+LevelThree]= Level4;
map[Shift+Lock+LevelThree]= Level3;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
};
отже, щоби навігація працювала і в українській розкладці, треба «поремонтувати» налаштування клавіш [i] (AD08) та [j] (AC07) — замінити шаблон і додати по два псердоніми:
key <AD08> {
type[group1]= "EIGHT_LEVEL_SEMIALPHABETIC",
type[group2]= "FOUR_LEVEL_ALPHABETIC",
symbols[Group1]= [ i, I, Up, Up, rightarrow, idotless, NoSymbol, NoSymbol ],
symbols[Group2]= [ Cyrillic_sha, Cyrillic_SHA, Up, Up ]
};
...
key <AC07> {
type[group1]= "EIGHT_LEVEL_SEMIALPHABETIC",
type[group2]= "FOUR_LEVEL_ALPHABETIC",
symbols[Group1]= [ j, J, Left, Left, U0133, U0132, NoSymbol, NoSymbol ],
symbols[Group2]= [ Cyrillic_o, Cyrillic_O, Left, Left ]
};
після цього завантажую налаштування:
xkbcomp layout.xkbcomp $DISPLAY
і навігація capslock+ijkl працює з обома розкладками.
проблеми
на жаль, налаштування працюють до перезавантаження, перелогінення, ба навіть перепідключення зовнішньої клавіатури. можливе вирішення —- модифіковані розкладки вже з потрібними налаштуваннями (але доведеться щоразу після поновлення системи їх відновлювати, мабуть);
- або ж якийсь скрипт для вивантаження налаштувань xkbcomp, автоматичного редагування і зворотнього завантаження.