Инструкция по настройке клавиатуры для i2wm с xkb

Шпаргалка по основным командам XKB и настройки клавиатуры для Linux

1. Назначение клавиши для переключения раскладки

Ациклическое переключение (Caps+Shift → русская, Caps → US)

  1. Создайте конфигурационный файл ~/.config/xkb/config с содержимым:
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete" };
    xkb_compat    { include "complete" };
    xkb_geometry  { include "pc(pc105)" };
    
    xkb_symbols "my" {
        include "pc+us+ru:2+inet(evdev)"
        
        // Caps - US (первая группа), Caps+Shift - RU (последняя группа)
        key <CAPS> { [ ISO_First_Group, ISO_Last_Group ] };
    };
};
  1. Примените конфигурацию:
xkbcomp $HOME/.config/xkb/config $DISPLAY

Разъяснение по xkb_symbols и группам:

  • Каждая раскладка — это группа (group). us:2 означает US-раскладка во второй группе
  • ISO_First_Group активирует первую группу (US), ISO_Last_Group — последнюю (RU)
  • Клавиши могут иметь разное поведение для разных групп через symbols[group1] и symbols[group2]

2. Название системных клавиш

Основные клавиши и их xkb-имена:

  • <CAPS> — Caps Lock
  • <LALT>, <RALT> — левый и правый Alt
  • <LWIN>, <RWIN> — клавиши Windows/Super
  • <LCTL>, <RCTL> — Control
  • <LSGT>, <RSGT> — Shift
  • <ESC> — Escape
  • <SPCE> — пробел

Для просмотра всех клавиш текущей раскладки:

xev | grep keysym

3. Раздельное включение раскладок через Caps

Модифицированный вариант для раздельного управления:

xkb_symbols "split_layouts" {
    include "pc+us+ru:2+inet(evdev)"
    
    // Назначаем Caps как переключатель групп
    key <CAPS> {
        symbols[Group1] = [ ISO_First_Group ],  // Только US для группы 1
        symbols[Group2] = [ ISO_First_Group ]   // Только US для группы 2
    };
    
    // Caps+Shift всегда переключает на русскую
    modifier_map Shift { <CAPS> };
};

Добавьте в ~/.config/xkb/config и примените xkbcomp.

4. Переназначение клавиш

Примеры переназначения

  1. Поменять местами CapsLock и Escape:
xkb_symbols "swapescape" {
    key <CAPS> { [ Escape ] };
    key <ESC>  { [ Caps_Lock ] };
};
  1. Поменять Alt и Win (удобно для i3):
xkb_symbols "altwin" {
    key <LALT> { [ Super_L ] };
    key <LWIN> { [ Alt_L ] };
};
  1. Двоеточие и точка с запятой
key <AC10> { [ colon, semicolon ] };  // Вместо [ semicolon, colon ]

5. Настройка Compose

  1. Установите необходимые пакеты:
# Для Arch Linux
sudo pacman -S xorg-xmodmap libx11 libxt

# Для Debian/Ubuntu
sudo apt install x11-xkb-utils libx11-dev
  1. Создайте файл ~/.XCompose:
include "%L"

# Пользовательские комбинации
<Multi_key> <apostrophe> <a> : "á"
<Multi_key> <apostrophe> <e> : "é"
<Multi_key> <quotedbl> <a>  : "ä"
<Multi_key> <c> <slash>     : "¢"
  1. Добавьте в автозагрузку i3 (файл ~/.config/i3/config):
exec --no-startup-id setxkbmap -option compose:ralt  # Правый Alt как Compose
exec --no-startup-id xmodmap ~/.Xmodmap  # Если используете xmodmap

6. Работа с уровнями (Levels) и модификаторами

Третий уровень (Level3) для дополнительных символов

xkb_symbols "my_layers" {
    // Назначаем Caps как модификатор Level3
    key <CAPS> { [ ISO_Level3_Shift ] };
    
    // Клавиши h,j,k,l со стрелками на Level3
    key <AC06> { [ h, H, Left  ] };
    key <AC07> { [ j, J, Down  ] };
    key <AC08> { [ k, K, Up    ] };
    key <AC09> { [ l, L, Right ] };
    
    // Для разных раскладок разное поведение Caps
    name[Group1] = "English (US)";
    name[Group2] = "Russian";
    
    key <CAPS> {
        symbols[Group1] = [ ISO_Level3_Shift ],
        symbols[Group2] = [ ISO_First_Group ]  // Или Caps_Lock
    };
};

7. Автозагрузка в i3wm

Добавьте в ~/.config/i3/config:

# Загрузка xkb конфигурации
exec --no-startup-id xkbcomp $HOME/.config/xkb/config $DISPLAY

# Дополнительные настройки
exec --no-startup-id setxkbmap -option compose:ralt
exec --no-startup-id xcape -t 500 -e "ISO_Level3_Shift=Escape"  # Caps как Escape при коротком нажатии

Важные примечания

  1. Проверка текущей конфигурации:
setxkbmap -print  # Показать текущую xkb конфигурацию
setxkbmap -query  # Показать активные опции
  1. Файлы xkb находятся в /usr/share/X11/xkb/:

    • symbols/ — файлы раскладок
    • types/ — типы клавиш
    • compat/ — совместимость модификаторов
  2. Для отладки используйте xev для просмотра кодов клавиш.

  3. Сброс к настройкам по умолчанию:

setxkbmap -layout us,ru -option ''

8.1 Основные утилиты настройки клавиатуры

setxkbmap — основная утилита для настройки раскладки

Синтаксис:

setxkbmap [-model модель] [-layout раскладка] [-variant вариант] [-option опции]

Примеры использования:

  1. Базовый пример с US и русской раскладкой:

    setxkbmap -model pc105 -layout us,ru -option grp:alt_shift_toggle
    
  2. С несколькими опциями:

    setxkbmap -model pc105 -layout us,ru -variant ",winkeys" -option "grp:caps_toggle,compose:ralt"
    
  3. Просмотр текущих настроек:

    setxkbmap -print        # Полная xkb конфигурация
    setxkbmap -query        # Текущие параметры
    

xkbcomp — компилятор xkb конфигураций

Использование:

xkbcomp файл_конфигурации $DISPLAY

Пример загрузки пользовательской конфигурации:

xkbcomp ~/.config/xkb/keymap.xkb $DISPLAY

localectl — системная утилита (systemd)

Просмотр и установка системной раскладки:

localectl status                    # Текущая раскладка
localectl set-x11-keymap us,ru     # Установка для X11
localectl set-keymap us,ru         # Установка для консоли

xkbset — дополнительные опции (светодиоды, повторение)

Примеры:

xkbset led named                    # Светодиоды для Caps/Num Lock
xkbset repeatkeys rate 300 30      # Настройка autorepeat

xcape — двойное назначение клавиш

Синтаксис:

xcape -e "код_клавиши1=код_клавиши2;код_клавиши3=код_клавиши4"

Примеры:

  1. CapsLock как Escape и модификатор:

    xcape -t 500 -e "ISO_Level3_Shift=Escape"
    
  2. Shift как скобки при коротком нажатии:

    xcape -e "Shift_L=parenleft;Shift_R=parenright"
    

8.2 Допустимые значения параметров

XkbModel — модели клавиатур

Модель Описание Подходит для
pc101 Стандартная 101-клавишная (ANSI, США) Настольные клавиатуры США
pc102 Расширенная 102-клавишная (ISO, Европа) Европейские клавиатуры
pc104 104-клавишная (ANSI с Win-клавишами) Современные настольные
pc105 105-клавишная (ISO с Win-клавишами) Наиболее распространена в РФ
thinkpad Ноутбуки Lenovo ThinkPad ThinkPad серии
macbook79 Ноутбуки Apple MacBook Pro 2015+
chromebook Хромбуки Устройства Chrome OS

Определение модели вашей клавиатуры:

# Посмотреть информацию о подключенных устройствах
lsusb
# Или
cat /proc/bus/input/devices | grep -i keyboard

XkbLayout — раскладки клавиатуры

Основные раскладки:

  • us — Английская (США)
  • ru — Русская
  • by — Белорусская
  • de — Немецкая
  • fr — Французская
  • es — Испанская

Множественные раскладки через запятую:

# Три раскладки
setxkbmap -layout us,ru

Пример комбинаций:

# Английская и русская с вариантом для программистов
setxkbmap -layout us,ru -variant ",winkeys"

XkbVariant — варианты раскладок

Для раскладки us (английская):

Вариант Описание
basic Стандартная qwerty
dvorak Альтернативная раскладка Dvorak
colemak Альтернативная раскладка Colemak
intl С международными символами
altgr-intl С AltGr для дополнительных символов
rus Фонетическая русская (яверты)

Для раскладки ru (русская):

Вариант Описание
basic Стандартная йцукен
winkeys Как в Windows (ё в другом месте)
dos Как в старых DOS системах
mac Как в macOS
legacy Устаревший вариант
phonetic Фонетическая (я=ja, ш=sh)

Примеры с вариантами:

# Русская раскладка как в Windows
setxkbmap -layout us,ru -variant ",winkeys"

# Английская Dvorak и русская стандартная
setxkbmap -layout us,ru -variant dvorak,

XkbOptions — дополнительные опции

Группы опций и их формат: категория:значение

1. Переключение раскладок (группы)

Опция Описание Поведение
grp:shift_caps_toggle Shift+CapsLock Переключение по Shift+Caps
grp:alt_shift_toggle Alt+Shift Переключение по Alt+Shift
grp:ctrl_shift_toggle Ctrl+Shift Переключение по Ctrl+Shift
grp:caps_toggle CapsLock Переключение только по Caps
grp:toggle Правый Alt Только правый Alt
grp:lwin_toggle Левая Win Левая клавиша Super
grp:switch Правый Ctrl Правый Control
grp:alt_space_toggle Alt+Space Alt с пробелом
grp:shifts_toggle Оба Shift Оба Shift одновременно
grp:lctrl_lwin_toggle Ctrl+Win слева Комбинация слева

Ациклические варианты:

# Caps → US, Caps+Shift → RU
setxkbmap -option grp:caps_switch

2. Индикация раскладки

Опция Описание
grp_led:scroll Индикация Scroll Lock
grp_led:caps Индикация Caps Lock
grp_led:num Индикация Num Lock

Пример с индикацией:

setxkbmap -option "grp:alt_shift_toggle,grp_led:caps"

3. Режим Compose

Опция Описание
compose:ralt Правый Alt
compose:lwin Левая Win
compose:rwin Правая Win
compose:menu Клавиша Menu
compose:caps Caps Lock
compose:paus Pause/Break
compose:prsc Print Screen

Пример:

setxkbmap -option compose:ralt

4. Прочие полезные опции

Опция Описание
ctrl:nocaps Делает CapsLock Control
ctrl:swapcaps Меняет местами Control и CapsLock
terminate:ctrl_alt_bksp Ctrl+Alt+Backspace завершает X-сессию
lv3:switch Правый Ctrl как Level3
lv3:menu_switch Menu как Level3
numpad:microsoft Цифровая клавиатура как в Windows
keypad:atm Раскладка банкомата
eurosign:e Евро на клавише E

8.3 Примеры комплексных настроек

Пример 1: Полная настройка для i3wm

setxkbmap \
  -model pc105 \
  -layout us,ru \
  -variant ",winkeys" \
  -option "grp:caps_toggle,grp_led:caps,compose:ralt,ctrl:nocaps"

Объяснение:

  • pc105 — стандартная 105-клавишная клавиатура
  • us,ru — две раскладки: английская и русская
  • ,winkeys — для русской раскладки вариант “как в Windows”
  • grp:caps_toggle — CapsLock переключает раскладки
  • grp_led:caps — CapsLock светодиод показывает активную раскладку
  • compose:ralt — правый Alt для ввода спецсимволов
  • ctrl:nocaps — CapsLock работает как Control

Пример 2: Для программиста

setxkbmap \
  -model pc105 \
  -layout us,ru \
  -variant altgr-intl, \
  -option "grp:alt_shift_toggle,lv3:ralt_switch,compose:menu"

Пример 3: Создание постоянного конфига для ~/.xprofile

#!/bin/bash
# Настройки клавиатуры
setxkbmap -model pc105 -layout us,ru -option "grp:caps_toggle"

# Дополнительные назначения клавиш
if command -v xcape &> /dev/null; then
    xcape -t 200 -e "Control_L=Escape"
fi

# Настройка autorepeat
xset r rate 200 30

8.4 Просмотр всех доступных опций

Просмотр всех моделей:

localectl list-x11-keymap-models

Просмотр всех раскладок:

localectl list-x11-keymap-layouts

Просмотр вариантов для конкретной раскладки:

# Для русской раскладки
localectl list-x11-keymap-variants ru

# Для английской
localectl list-x11-keymap-variants us

Просмотр всех опций:

localectl list-x11-keymap-options | less

Просмотр конкретных файлов xkb:

# Файлы раскладок
ls /usr/share/X11/xkb/symbols/

# Файл с описанием опций
cat /usr/share/X11/xkb/rules/evdev.lst | grep grp:

8.5 Устранение проблем

Проблема: Настройки не сохраняются после перезагрузки

Решение 1 — добавить в автозагрузку i3 (~/.config/i3/config):

exec --no-startup-id setxkbmap -model pc105 -layout us,ru -option grp:caps_toggle

Решение 2 — создать файл ~/.xprofile:

#!/bin/sh
setxkbmap -model pc105 -layout us,ru -option "grp:caps_toggle,compose:ralt"

Решение 3 — системная настройка (для Arch Linux):

# Создать файл /etc/X11/xorg.conf.d/00-keyboard.conf
Section "InputClass"
    Identifier "system-keyboard"
    MatchIsKeyboard "on"
    Option "XkbModel" "pc105"
    Option "XkbLayout" "us,ru"
    Option "XkbVariant" ",winkeys"
    Option "XkbOptions" "grp:caps_toggle"
EndSection

Проблема: Не работают некоторые комбинации

Проверка текущих опций:

setxkbmap -query

Сброс и установка заново:

# Сброс всех опций
setxkbmap -option

# Установка нужных
setxkbmap -option "grp:alt_shift_toggle,compose:ralt"

8.6 Полезные команды для отладки

Просмотр кодов клавиш в реальном времени:

xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'

Проверка текущих модификаторов:

xmodmap

Тестирование compose-последовательностей:

# Введите RightAlt, затем o, затем c для ©
# Или настройте свои в ~/.XCompose

Экспорт текущей конфигурации в файл:

setxkbmap -print > ~/current_keymap.xkb

Развернутое толкование строки конфигурации xkb

Строка xkb_symbols является основной частью конфигурации клавиатуры в X Window System.

Структура строки

xkb_symbols {
    include "pc+us+ru:2+inet(evdev)+compose(ralt)+group(caps_select)+terminate(ctrl_alt_bksp)+typo(base):1+typo(base):2"
}

Компоненты и их значение

1. pc — Базовый набор символов

  • Что это: Базовая раскладка для 105-клавишной (PC) клавиатуры
  • Что включает: Определения стандартных клавиш (Enter, Shift, Space и т.д.)
  • Аналоги: mac для клавиатур Apple, sun для Sun Microsystems

2. us — Основная раскладка

  • Что это: Английская раскладка QWERTY (США)
  • Позиция: Основная (первая) раскладка в списке
  • Варианты: us(dvorak), us(colemak), us(intl) для альтернативных раскладок

3. ru:2 — Вторая раскладка с указанием группы

  • ru: Русская раскладка ЙЦУКЕН
  • :2: Помещает русскую раскладку во вторую группу (group 2)
    • Группа 1: us (по умолчанию)
    • Группа 2: ru (активируется переключением)
  • Варианты: ru(winkeys) — раскладка как в Windows (ё в другом месте)

4. inet(evdev) — Поддержка мультимедийных клавиш

  • inet: Модуль для интернет/мультимедийных клавиш
  • evdev: Драйвер ввода для современных ядер Linux
  • Что включает: Клавиши VolumeUp/Down, Mute, Browser, Mail, Calculator и т.д.

5. compose(ralt) — Режим Compose

  • Что это: Система ввода спецсимволов через последовательности
  • ralt: Активируется правым Alt (AltGr)
  • Примеры использования:
    • AltGr + " + aä
    • AltGr + o + c©
    • AltGr + < + <«
  • Альтернативы: compose(lwin) — левая Win, compose:menu — клавиша Menu

6. group(caps_select) — Переключение раскладок

  • Что делает: Назначает Caps Lock для переключения раскладок
  • Поведение:
    • Caps Lock — переключает между группами (us ↔ ru)
    • Важно: Caps Lock не работает как обычный Caps Lock!
  • Альтернативные варианты:
    • grp:alt_shift_toggle — Alt+Shift
    • grp:ctrl_shift_toggle — Ctrl+Shift
    • grp:toggle — только правый Alt

7. terminate(ctrl_alt_bksp) — Аварийное завершение

  • Что делает: Ctrl+Alt+Backspace немедленно завершает X-сессию
  • Зачем: Аварийный выход при зависании графического сервера
  • Безопасность: В современных системах часто отключено по умолчанию

8. typo(base):1+typo(base):2 — Автозамена опечаток

  • typo: Модуль автокоррекции/замены
  • base: Базовый набор правил
  • :1 и :2: Применяет правила к обеим группам (и us, и ru)
  • Примеры замен:
    • tehthe (английский)
    • ащквсе (русский, для QWERTY-раскладки)

Полное описание поведения системы

С этой конфигурацией ваша клавиатура будет вести себя так:

Элемент Поведение
Основная раскладка Английская (US QWERTY)
Альтернативная раскладка Русская (ЙЦУКЕН)
Переключение раскладок Клавиша Caps Lock (циклически us→ru→us)
Ввод спецсимволов Правый Alt (AltGr) + последовательности символов
Мультимедийные клавиши Работают через драйвер evdev
Автозамена опечаток Включена для обеих раскладок
Аварийный выход Ctrl+Alt+Backspace завершает X-сессию

Где искать дополнительные опции

# Все доступные опции
less /usr/share/X11/xkb/rules/evdev.lst

# Файлы символов
ls /usr/share/X11/xkb/symbols/

# Конкретные варианты для us
cat /usr/share/X11/xkb/symbols/us

Автор был вдохновлен статьей