Як створити власну розкладку клавіатури під Linux?

Як створити власну розкладку клавіатури під Linux?
5 хв. читання

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

За основу для нашої клавіатури візьмемо стандартну англійську розкладку (QWERTY) і додамо до неї літери ğ, ž, č та š, які відповідають кириличним ґ, ж, ч та ш. Літери набиратимуться через праву клавішу Alt.

Як створити власну розкладку клавіатури під Linux?

У GNU/Linux усі файли з розкладками знаходяться в каталозі /usr/share/X11/xkb/symbols/. Хоча в різних дистрибутивах розташування файлів може відрізнятися. В мене стоїть Debian 10 зі стільницею Xfce 4.12.

Отже, переходимо у згаданий вище каталог і додаємо вкінці файлу ua наступний код:

partial alphanumeric_keys
xkb_symbols "latynka" {
    include "us(basic)"
    name[Group1]="Ukrainian (latynka)";

    key <AC02> { [ s, S, scaron, Scaron ] };
    key <AC05> { [ g, G, gbreve, Gbreve ] };
    key <AB01> { [ z, Z, zcaron, Zcaron ] };
    key <AB03> { [ c, C, ccaron, Ccaron ] };

    include "level3(ralt_switch)"
};

Параметр partial означає, що блок коду описує не всю клавіатуру. Параметр alphanumeric_keys вказує, яку саме частину клавіатури описує код. Інструкція xkb_symbols "latynka" задає назву для даного варіанту розкладки.

Команда include "us(basic)" імпортує літери з англійської розкладки клавіатури (в кінці крапка з комою не ставиться). Команда name[Group1]="Ukrainian (latynka)"; задає повну назву для групи символів.

Далі описуємо літери, які треба додати чи замінити. Інструкція складається з ключового слова key; ідентифікатора, що позначає розташування клавіші на клавіатурі; та переліку символів, які будуть пов'язані з клавішею.

key <AC02> { [ s, S, scaron, Scaron ] };

Є чотири рівні натискання по клавіші: звичайне натискання; натискання з клавішею Shift; натискання з клавішею ПравAlt; натискання з клавішами ПравAlt та Shift одночасно.

2-й рівень - | S Š | - 4-й рівень
1-й рівень - | s š | - 3-й рівень

Ідентифікатори фізичного розташування клавіш на клавіатурі:

  • <TLDE> позначає клавішу наголос/тильда;
  • <BKSL> позначає клавішу зворотній слеш;
  • <AB01>, <AB02>, .. позначають клавіші Z, X, ..;
  • <AC01>, <AC02>, .. позначають клавіші A, S, ..;
  • <AD01>, <AD02>, .. позначають клавіші Q, W, ..;
  • <AE01>, <AE02>, .. позначають клавіші 1, 2, ...

Замість символів можна вказувати номери Юнікоду (наприклад, U0041 відповідає літері A) або їхні унікальні назви. Назви я підглядав у розкладках сусідніх мов (в польській (pl) і хорватській (hr)). Можна подивитися у Вікіпедії, але не факт, що вони будуть працювати.

У кінці додано інструкцію include "level3(ralt_switch)", яка дозволяє набирати символи 3-го і 4-го рівня через відповідну клавішу. В даному випадку це ПравийAlt.

Після опису розкладки треба додати метадані. Відкриваємо файл /usr/share/X11/xkb/rules/evdev.xml і шукаємо там фрагмент коду, що описує варіанти українських розкладок:

    <layout>
      <configItem>
        <name>ua</name>
        <shortDescription>uk</shortDescription>
        <description>Ukrainian</description>
        <languageList>
          <iso639Id>ukr</iso639Id>
        </languageList>
      </configItem>
      <variantList>
        <variant>
          <configItem>
            <name>phonetic</name>
            <description>Ukrainian (phonetic)</description>
          </configItem>
        </variant>
        ...
      </variantList>
    </layout>

і додаємо інформацію про свій варіант:

        ...
        <variant>
          <configItem>
            <name>latynka</name>
            <description>Ukrainian (latynka)</description>
          </configItem>
        </variant>

Щоб користуватися новою розкладкою треба додати її через меню Налаштування/Клавіатура, або відредагувати файл /etc/default/keyboard. В мене він виглядає так:

# KEYBOARD CONFIGURATION FILE

# Consult the keyboard(5) manual page.

XKBMODEL="pc105"
XKBLAYOUT="ua,ua"
XKBVARIANT="latynka,"
XKBOPTIONS="grp:caps_toggle,grp_led:scroll"

BACKSPACE="guess"

Після змін слід перезавантажити систему.

У графічному режимі повинно працювати добре, але в консолі можуть не набиратися діакритичні знаки. Це виправляється командою:

dpkg-reconfigure console-setup

і в другому вікні обрати шостий варіант зверху:

# Кирилиця - Слов'янські мови (а також боснійська та сербська латиниця)

Ось і все. Нова розкладка без проблем працює в емаксі, вімі та інших редакторах. Цікавтеся українською латинкою і вигадуйте свої розкладки!

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Axmed 24
Приєднався: 3 роки тому
Коментарі (2)
  1. Сергій Секіро

    На якій мові пишите код? Я новачок в Лінукс. Нещодавно перейшов з убунту на мінт. Трохи знаю баш-скріпти. але цього замало. Хочу додати собі на клваатуру довге тире та нормальні лапки :)

    2 місяці тому ·
    0
  2. p.s.

    Дякую за матеріал!

    Мені подобається варіант латинки Максима Прудеуса: https://www.ukr-latynka.org/

    Давно цікавлюсь темою, покищо встановив собі наступну конфігурацію:

    /usr/share/X11/xkb/symbols/ue

    partial alphanumeric_keys
    
    xkb_symbols "ue" {
        include "us(basic)"
        name[Group1]= "Adaptive (UE)";
        key <AB01> { [z, Z, zcaron, Zcaron] };
        key <AB03> { [c, C, ccaron, Ccaron] };
        key <AC02> { [s, S, scaron, Scaron] };
        key <AC05> { [g, G, gcircumflex, Gcircumflex] };
        include "level3(ralt_switch)"
    };
    

    Користуюсь i3 (mod/win), перемикаюсь додавши до /.xinitrc:

    setxkbmap -layout ue,ua
    setxkbmap -option 'grp:alt_shift_toggle'
    

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

    3 тижні тому ·
    1
Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація