14 KiB
type, topic, tags, created, updated
| type | topic | tags | created | updated | |||||
|---|---|---|---|---|---|---|---|---|---|
| tech | keyboard |
|
2026-09-15T00:00:00.000Z | 2026-09-15T00:00:00.000Z |
Karabiner-Elements — конфиг, раскладки, символы
Конфиг клавиатуры Mac (Karabiner-Elements). Правила подмены символов в русской раскладке (RussianWin), переключение раскладок, горячие клавиши.
Файлы конфига
| Путь | Назначение |
|---|---|
~/Documents/karabiner.json |
Рабочая копия (канон, редактируется) |
~/.config/karabiner/karabiner.json |
Живой конфиг — его читает Karabiner |
~/Documents/karabiner.json.bak |
Бэкап рабочей копии |
~/.config/karabiner/assets/complex_modifications/*.json |
Импортированные наборы правил (не редактируются вручную) |
⚠️ Расхождение канона и живого файла (обнаружено 2026-09-15)
На 2026-09-15 рабочая копия и живой конфиг РАЗЛИЧАЮТСЯ:
| Файл | md5 | Права |
|---|---|---|
~/Documents/karabiner.json |
2ad1f7e1c8c8807739b636cc0650a527 |
— |
~/.config/karabiner/karabiner.json |
3d12713ff32ad49cb4d20a5f7b284746 |
-rw------- (600) |
Два вывода, требующих внимания:
- Живой конфиг имеет права 600 вместо нужных 644. По известному поведению Karabiner это прямой риск: при restrictive-правах Karabiner молча сбрасывает конфиг на дефолт (спрашивает про тип виртуальной клавиатуры, все complex_modifications пропадают). Обязательно
chmod 644после каждогоcp. - md5 не совпадают → либо рабочая копия старше живого, либо правки вносились только в живой. Перед любой правкой сверить содержимое (не заливать рабочую копию поверх живого слепо — потеряются правки, которые есть только в живом).
Структура профиля (на 2026-09-15)
Один профиль: Default profile, selected=true. simple_modifications — пустой (0). Все правила — в complex_modifications.rules[].
Группы правил (индекс → название → число манипуляторов):
| # | Правило | Манипуляторов |
|---|---|---|
| 0 | Launch Apps HotKeys | 43 |
| 1 | Russian @ from opt+cmd+2 | 1 |
| 2 | Xcode Keyboard helpers | 7 |
| 3 | F Keys | 8 |
| 4 | Media Keys, F Keys | 11 |
| 5 | Smart Quotes | 8 |
| 6 | EN/ABC symbol keys | 4 |
| 7 | Russian symbol keys | 27 |
| 8 | Cmd+Space to switch language in RDP | 1 |
| 9 | Remap Keys in Microsoft Remote Desktop | 1 |
| 10 | Disable Cmd+H Hide (rev 2) | 1 |
| 11 | Sleep | 1 |
| 12 | Window Resize Mode | 4 |
Все RU-символьные ремапы живут в группе #7 Russian symbol keys.
Ключевой паттерн группы «Russian symbol keys»
Каждый манипулятор:
from— клавиша +modifiers.mandatoryto— key_code +modifiers(обычноright_shift/right_option— правые модификаторы, чтобы не конфликтовать с левыми)conditions:[{ "input_sources": [{"language": "ru"}], "type": "input_source_if" }]— срабатывает только в русской раскладке
Таблица ремапов (27 манипуляторов)
| RU-нажатие | Символ | Как реализовано |
|---|---|---|
| opt+4 ($) | ₽ | 8 + right_option |
| ₽ (opt+8) | € | opt+shift+4 |
| opt+shift+4 (€) | $ | 4 + right_option |
| opt+е (†) | € | opt+shift+4 |
| opt+9 («) | [ | grave + left_option |
| opt+0 (») | ] | grave + left_option+left_shift |
| ё | [ | grave + left_option |
| shift+ё | ] | grave + left_option+left_shift |
| opt+[ | [ | grave + left_option |
| opt+] | ] | grave + left_option+left_shift |
| opt+shift+[ | { | shift+9 |
| opt+shift+] | } | shift+0 |
| opt+slash | / | backslash + right_shift |
| opt+shift+slash | ? | 7 + right_shift ← см. раздел про Caps Lock |
| opt+; (ж) | ; | 4 + right_shift |
| opt+shift+; (Ж) | : | 6 + right_shift |
| opt+' (э) | ' | o + right_option |
| opt+2 (") | « | close_bracket + right_option |
| opt+shift+2 (") | » | close_bracket + right_option+right_shift |
| backslash | ё | grave_accent_and_tilde |
| backslash | Ë | grave + right_shift |
| § | § | non_us_backslash + left_option |
| shift+§ (±) | ± | f + left_shift+left_option |
| opt+, (<) | < | comma + right_shift+right_option |
| opt+. (>) | > | period + right_shift+right_option |
| opt+shift+, (≤) | ≤ | comma + right_option |
| opt+shift+. (≥) | ≥ | period + right_option |
Особый случай: @ (в отдельной группе #1)
@ нет ни в одной русской раскладке → используется select_input_source (временно переключиться на ABC, набрать, вернуться):
{
"description": "Russian @ from opt+cmd+2",
"from": { "key_code": "2", "modifiers": { "mandatory": ["left_command", "option"] } },
"to": [
{ "select_input_source": { "input_source_id": "com.apple.keylayout.ABC", "language": "en" } },
{ "key_code": "2", "modifiers": ["right_shift"] },
{ "select_input_source": { "input_source_id": "com.apple.keylayout.RussianWin", "language": "ru" } }
],
"type": "basic",
"conditions": [
{ "input_sources": [{ "language": "ru" }], "type": "input_source_if" }
]
}
Это рабочий образец для символов, которых нет в RU-раскладке. Основной минус — короткий визуальный фликер раскладки.
🔴 Проблема: Caps Lock ломает подстановку ?
Запрос (2026-09-15): при нажатии cmd+shift+/ в русской раскладке без Caps вводится ?, при активном Caps Lock вводится Ї.
Диагноз
Манипулятор #13 из группы #7:
{
"description": "alt+shift+slash -> ? (shift+7)",
"from": { "key_code": "slash", "modifiers": { "mandatory": ["option", "shift"] } },
"to": [ { "key_code": "7", "modifiers": ["right_shift"] } ],
"type": "basic",
"conditions": [ { "input_sources": [{"language": "ru"}], "type": "input_source_if" } ]
}
Установленные факты:
- Клавиши
cmd+shift+/в конфиге НЕТ вообще. Проверено: во всёмkarabiner.jsonнет ни одного манипулятора сkey_code: "slash"иcommandвfrom.modifiers.mandatory(поиск по всем профилям и группам). Есть только два правила наslash:opt+slashиopt+shift+slash. Значитcmd+shift+/сейчас обрабатывает сама macOS. key_code: "7"в конфиге не перехватывается — правил сfrom.key_code == "7"нет (единственные совпадения7— этоf7, не цифра). То есть на выходе идёт чистый системный7+ shift.- Механика Caps Lock в RU-раскладке: при активном Caps Lock верхний регистр даёт не
?, аЇ(кириллическая буква). Caps инвертирует действие Shift. Поэтому7+right_shift, задуманный как?, превращается вЇ.
Ключевой вывод
Смена модификатора option → command в from проблему Caps Lock НЕ решает. Caps инвертирует шифт одинаково для любого сочетания-триггера. Лечить надо выходную часть (to), а не входную.
План решения (на 2026-09-15 — НЕ применён, ждёт решения Alex)
Причина остановки: план озвучен, но Alex не подтвердил вариант и не ответил на вопрос о сочетании. Правка конфига не вносилась.
Незакрытый вопрос: какое сочетание делаем — cmd+shift+/, opt+shift+/, или оба? (Alex в запросе назвал cmd+shift+/, но в конфиге сейчас opt+shift+/.)
Предложенные шаги:
Шаг 1 — фикс Caps через select_input_source. Заменить to на трёхшаговую цепочку (как в правиле @): переключиться на ABC → slash + right_shift (Shift+/ даёт ? на US-раскладке, и Caps на ? не влияет — Caps влияет только на буквы) → вернуться в RussianWin:
"to": [
{ "select_input_source": { "input_source_id": "com.apple.keylayout.ABC", "language": "en" } },
{ "key_code": "slash", "modifiers": ["right_shift"] },
{ "select_input_source": { "input_source_id": "com.apple.keylayout.RussianWin", "language": "ru" } }
]
Шаг 2 — модификатор во from. ["option","shift"] → ["command","shift"] для cmd+shift+/; либо продублировать манипулятор, чтобы работали оба сочетания.
Шаг 3 — description переименовать, напр. "cmd+shift+slash -> ? (via ABC)".
Рассматривавшиеся альтернативы:
- A:
to= голыйkey_code: "7"без shift — работает при Caps, но теряется?. - B (рекомендован):
select_input_sourceчерез ABC (см. Шаг 1) — стабильный?независимо от Caps, стилистически совпадает с правилом@. - C: вне Karabiner — macOS Text Replacements или
skhd.
Процедура правки (когда решение будет принято)
- Сверить
~/Documents/karabiner.jsonи~/.config/karabiner/karabiner.json— сначала понять, где свежие правки (md5 разные!). - Бэкап:
cp ~/Documents/karabiner.json ~/Documents/karabiner.json.bak.20260915 - Правка рабочей копии скриптом через
jq(не sed). - Заливка в живой конфиг + права:
cp ~/Documents/karabiner.json ~/.config/karabiner/karabiner.json chmod 644 ~/.config/karabiner/karabiner.json # ОБЯЗАТЕЛЬНО - Проверка: Karabiner подхватывает изменения немедленно, рестарт не нужен. Проверить через EventViewer или набрать сочетание в текстовом поле — при активном Caps Lock тоже.
Pitfalls
- Права 600 → молчаливый сброс конфига.
cpсохраняет режим ИСТОЧНИКА, а не целевого файла. После каждогоcpв~/.config/karabiner/karabiner.json→chmod 644. Симптомы сброса: Karabiner спрашивает про тип виртуальной клавиатуры, все complex_modifications исчезли. - Правила без явного условия Caps Lock. Каждый манипулятор, чей
toсодержитshift/right_shift, при активном Caps Lock даст другой символ. Для символов, которых нет в RU-раскладке, безопаснее путь черезselect_input_source→ US-раскладку. - Именование модификаторов:
left_command/right_command(неleft_gui); для левого option достаточноoption;right_shift/right_optionуказывать явно. - Цепочка
select_input_source→ key →select_input_sourceвыполняется мгновенно, задержки не нужны, но даёт короткий фликер раскладки. - Живой файл и канон разъезжаются — проверять md5 перед правкой.
Input Sources на этой системе
| Раскладка | Тип | ID |
|---|---|---|
| ABC (US) | Keyboard Layout | com.apple.keylayout.ABC |
| RussianWin | Keyboard Layout | com.apple.keylayout.RussianWin |
| Unicode Hex Input | Keyboard Layout | — |
Список: defaults read ~/Library/Preferences/com.apple.HIToolbox.plist AppleEnabledInputSources
Связанные правила по флагам Caps (для справки)
Проверено: ссылок на caps_lock ни в key_code, ни в from/to в конфиге нет (0 совпадений). Условий input_source_if с проверкой модификатора Caps Lock в этой версии Karabiner-конфига не используется.