Заміна розташування кнопок на клавіатурі в MacOS
Макбук з європейською клавіатурою відрізняється від американської розташуванням деяких клавіш.

І якщо форма клавіші “Enter” та розташування “Backslash” мене якось не зачіпають, то знак ~ для мене особисто одна з найчастіше використовуваних клавіш. І через те що вона розташована внизу замість гори, мені доводиться викручувати собі пальці кожного разу. Тож я знайшов спосіб як “повернути” її на своє нормальне місце.
Є така вбудована утиліта hidutil
За допомогою однієї єдиної команди можна перевизначити розташування клавіш.
hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000035,"HIDKeyboardModifierMappingDst":0x700000064},{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000035}]}'
Це перемикає клавішу з кодом 0x700000035 з клавішею з кодом 0x700000064.
Маленька, але важлива деталь
Якщо ти маєш ще додаткові клавіатури, то краще ремапити кнопки тільки вбудованої. Для цього hidutil викликається із параметром --matching якому передаються відповідні VendorID та ProductID.
Наступний конвеєр дасть тобі ті самі значення:
hidutil list | grep -i 'internal keyboard' | head -1 | awk '{print "{\"VendorID\":"$1",\"ProductID\":"$2"}"}'
А потім їх додай до hidutil ось так
hidutil property --matching '{"VendorID":0x5ac,"ProductID":0x341}' --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000035,"HIDKeyboardModifierMappingDst":0x700000064},{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000035}]}'
Від ребута до ребута
Але, після перезавантаження операційки потрібно виконувати цю команду щоразу. Тож, маємо щось із цим робити.
Створюємо файл /Library/LaunchDaemons/local.keyboard_layout_remap.plist з наступним змістом:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>local.keyboard_layout_remap</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/hidutil</string>
<string>property</string>
<string>--matching</string>
<string>{"VendorID":0x5ac,"ProductID":0x341}</string>
<string>--set</string>
<string>{"UserKeyMapping": [{"HIDKeyboardModifierMappingSrc":0x700000035, "HIDKeyboardModifierMappingDst":0x700000064}, {"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000035}]}</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Також потрібно додати hidutil до списка додатків яким дозволено моніторити пристрої вводу.
Відкриваємо меню Системні параметри 👉 Приватність і безпека 👉 Контроль вводу, натиснути + потім Cmd+Shift+G та /usr/bin/hidutil. Після цього увімкнути тоглік навпроти.
❕ Увімкнути відображення прихованих файлів у Finder можна за допомогою комбінації Cmd + Shift + .

Далі потрібно завантажити цей файл та запустити сервіс
plutil -lint /Library/LaunchDaemons/local.keyboard_layout_remap.plist
sudo launchctl bootout system/local.keyboard_layout_remap 2>/dev/null
sudo launchctl bootstrap system /Library/LaunchDaemons/local.keyboard_layout_remap.plist
Джерела
- Edit for MacOS 15 Sequoia Update 🚀
- Using hidutil to map macOS keyboard keys @rakhesh.com
- Simple tool to generate HIDUTIL key remapping configurations for MacOS
- HIDUTIL key remapping generator for MacOS @github.com/amarsyla
- Cannot remap keys on Macbook Pro with hidutils in macos sonoma @reddit.com
- Remapping Keys in macOS 10.12 Sierra @developer.apple.com
- HID Usage Tables for Universal Serial Bus (USB) Version 1.4 @usb.org
- launchctl broken? @reddit.com
- hidutil stopped working on macOS 14.2 update @apple.stackexchange.com