Настройка Karabiner-Elements для переназначения клавиш на macOS
Переназначение клавиш на Mac через Karabiner-Elements делается в двух режимах: Simple Modifications (1→1) и Complex Modifications (условия, Hyper, tap/hold). Главное — один раз выдать правильные разрешения macOS и проверять key_code в EventViewer.
Оглавление
Установка и разрешения macOS
Karabiner-Elements работает через перехват ввода и виртуальное HID-устройство, поэтому без разрешений переназначение может “не применяться”, даже если приложение установлено.
Проверьте 3 пункта в системных настройках:
- Login Items / Background Services — фоновые элементы Karabiner должны быть включены.
- Input Monitoring (Мониторинг ввода) — разрешите Karabiner читать нажатия.
- Driver Extensions — включите виртуальное устройство (VirtualHIDDevice).
Если видите “Waiting for a connection…” или приложение постоянно просит включить Driver Extension, часто мешают корпоративные агенты защиты/антивирусы или отключены фоновые службы. Сначала проверьте пункты 1–3, затем перезапустите Karabiner и Mac.
Simple Modifications: быстрые переназначения 1→1
Используйте Simple Modifications, когда нужно простое соответствие “клавиша → клавиша”, без логики удержания:
caps_lock → escapeleft_command ↔ left_option(удобно после Windows/Linux)right_option → right_control
Практика: начните именно с Simple — их проще отлаживать, и они реже конфликтуют.
Порядок обработки обычно такой: сначала применяются Simple Modifications, затем Complex Modifications. Если Complex “не срабатывает”, убедитесь, что Simple не превратил исходную клавишу во что-то другое.
Complex Modifications: Hyper Key, tap/hold и условия
Complex Modifications нужны для “магии”: tap vs hold, разные правила по устройствам, ограничения по приложениям и т. п. Конфиг лежит здесь:
~/.config/karabiner/karabiner.json
Ниже — два самых популярных рецепта (их добавляют как отдельные rule в Complex Modifications).
Caps Lock: удержание = Control, одиночное = Escape
{
"description": "Caps Lock: Control when held, Escape when tapped",
"manipulators": [
{
"type": "basic",
"from": { "key_code": "caps_lock", "modifiers": { "optional": ["any"] } },
"to": [{ "key_code": "left_control" }],
"to_if_alone": [{ "key_code": "escape" }]
}
]
}
Hyper Key на Caps Lock (⌃⌥⇧⌘), одиночное = Escape
{
"description": "Caps Lock: Hyper when held, Escape when tapped",
"manipulators": [
{
"type": "basic",
"from": { "key_code": "caps_lock", "modifiers": { "optional": ["any"] } },
"to": [
{
"key_code": "left_shift",
"modifiers": ["left_command", "left_control", "left_option"]
}
],
"to_if_alone": [{ "key_code": "escape" }]
}
]
}
Почему Hyper удобен: сочетание ⌃⌥⇧⌘ почти нигде не занято, поэтому вы получаете “чистые” хоткеи вида Hyper+H/J/K/L без конфликтов.
Частые ошибки
- Нажатия не меняются вообще: не выдан Input Monitoring / выключены фоновые службы / не включён Driver Extension.
- Не тот
key_code: на ISO/нестандартных клавиатурах часто приходят коды вродеnon_us_backslash. Проверяйте в EventViewer, что реально прилетает. - Конфликт Complex-правил: манипуляторы проверяются сверху вниз, и обычно срабатывает первое подходящее правило. Поднимите нужное выше или сузьте условия.
- Ожидали “tap”, получили “hold”: слишком короткие/длинные тайминги или привычка удерживать клавишу чуть дольше. Начните с простого правила, затем подстраивайте поведение.
FAQ
Где лучше делать переназначения — в Simple или Complex?
Если это “1→1” без условий — Simple. Всё, что связано с удержанием, Hyper, условиями по устройствам/приложениям — Complex.
Можно ли сделать разные правила для встроенной и внешней клавиатуры?
Да. Самый надёжный путь — определить устройство в EventViewer и добавить condition по Vendor/Product ID (или настроить устройства в интерфейсе Karabiner).
Как понять, почему правило не сработало?
- Откройте EventViewer и убедитесь, что нажатие видно. 2) Проверьте разрешения. 3) Убедитесь, что правило в списке Complex стоит выше конфликтующих и “ловит” правильный
key_code.