Заміна розташування кнопок на клавіатурі в MacOS

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

EU vs. US keyboard

І якщо форма клавіші “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

Джерела