Инструкция по настройке клавиатуры для i2wm с xkb
Categories:
1. Назначение клавиши для переключения раскладки
Ациклическое переключение (Caps+Shift → русская, Caps → US)
- Создайте конфигурационный файл
~/.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 ] };
};
};
- Примените конфигурацию:
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. Переназначение клавиш
Примеры переназначения
- Поменять местами CapsLock и Escape:
xkb_symbols "swapescape" {
key <CAPS> { [ Escape ] };
key <ESC> { [ Caps_Lock ] };
};
- Поменять Alt и Win (удобно для i3):
xkb_symbols "altwin" {
key <LALT> { [ Super_L ] };
key <LWIN> { [ Alt_L ] };
};
- Двоеточие и точка с запятой
key <AC10> { [ colon, semicolon ] }; // Вместо [ semicolon, colon ]
5. Настройка Compose
- Установите необходимые пакеты:
# Для Arch Linux
sudo pacman -S xorg-xmodmap libx11 libxt
# Для Debian/Ubuntu
sudo apt install x11-xkb-utils libx11-dev
- Создайте файл
~/.XCompose:
include "%L"
# Пользовательские комбинации
<Multi_key> <apostrophe> <a> : "á"
<Multi_key> <apostrophe> <e> : "é"
<Multi_key> <quotedbl> <a> : "ä"
<Multi_key> <c> <slash> : "¢"
- Добавьте в автозагрузку 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 при коротком нажатии
Важные примечания
- Проверка текущей конфигурации:
setxkbmap -print # Показать текущую xkb конфигурацию
setxkbmap -query # Показать активные опции
-
Файлы xkb находятся в
/usr/share/X11/xkb/:symbols/— файлы раскладокtypes/— типы клавишcompat/— совместимость модификаторов
-
Для отладки используйте
xevдля просмотра кодов клавиш. -
Сброс к настройкам по умолчанию:
setxkbmap -layout us,ru -option ''
8.1 Основные утилиты настройки клавиатуры
setxkbmap — основная утилита для настройки раскладки
Синтаксис:
setxkbmap [-model модель] [-layout раскладка] [-variant вариант] [-option опции]
Примеры использования:
-
Базовый пример с US и русской раскладкой:
setxkbmap -model pc105 -layout us,ru -option grp:alt_shift_toggle -
С несколькими опциями:
setxkbmap -model pc105 -layout us,ru -variant ",winkeys" -option "grp:caps_toggle,compose:ralt" -
Просмотр текущих настроек:
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"
Примеры:
-
CapsLock как Escape и модификатор:
xcape -t 500 -e "ISO_Level3_Shift=Escape" -
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(активируется переключением)
- Группа 1:
- Варианты:
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+Shiftgrp:ctrl_shift_toggle— Ctrl+Shiftgrp:toggle— только правый Alt
7. terminate(ctrl_alt_bksp) — Аварийное завершение
- Что делает:
Ctrl+Alt+Backspaceнемедленно завершает X-сессию - Зачем: Аварийный выход при зависании графического сервера
- Безопасность: В современных системах часто отключено по умолчанию
8. typo(base):1+typo(base):2 — Автозамена опечаток
typo: Модуль автокоррекции/заменыbase: Базовый набор правил:1и:2: Применяет правила к обеим группам (и us, и ru)- Примеры замен:
teh→the(английский)ащк→все(русский, для 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