Це доповнення до відповіді Стівена К. Хоуелла.
У мене новий MacBook Pro зі скандинавською клавіатурою. У цій новій моделі більше немає клавіші Esc, що є для мене значним недоліком.
Я виявив, що наступне перекладе клавішу § (ліворуч зліва від клавіші табуляції 1 та вище) - яку, напевно, я ніколи не використовував ні до чого сьогодні - для створення Esc.
hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000029}]}'
У документації Apple (пов'язаної з відповіддю Стівена) це позначено як "Клавіатура, яка не належить США та |" (0х64).
Деякі "не американські" клавіші важко знайти, оскільки вони, як правило, відносяться до клавіш, які мають іншу мітку на клавіатурі, яку ви використовуєте. (Я також виявив , що «Гравіс і тильда» відносяться до ключу між зрушенням вліво і г, що на моїй клавіатурі виробляє <. Мені не вдалося встановити , який ключ відповідає «Non-US #і ~» і не експериментувати далі , коли я виявив мій ключ.) Якщо ви хочете експериментувати, спробуйте запустити скрипт у терміналі, поки не знайдете потрібний вам ключ:
for ((i=1;i<=128;++i)); do
printf '0x7000000%0x\n' "$i"
printf '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x7000000%0x,"HIDKeyboardModifierMappingDst":0x70000000a}]}' "$i" |
xargs -0 hidutil property --set >/dev/null
read -p "Type some stuff: "
hidutil property --set '{"UserKeyMapping":[{}]}' >/dev/null
done
Ця петля над кодами клавіш змінюється по черзі, сподіваючись, що ви зможете через пробну та помилкову помилку знайти ключ, який не є для вас особливо корисним. Спробуйте ввести щось, коли він попросить вас - якщо ви отримаєте gзамість того, що очікували, ви знайшли правильний код ключа. (Перейдіть 0x70000000aна щось інше, якщо gце не є зручним для вас вибором. Можливо, ви хочете перезавантажити gключ?) Коли ви закінчили набирати текст, просто натисніть клавішу Enter, щоб перейти до наступної клавіші.
Для чого це варто, остання команда всередині циклу полягає в тому, як ви запамповуєте всі UserKeyMappingналаштування:
hidutil property --set '{"UserKeyMapping":[{}]}'
Коли ви спочатку запускаєте, hidutil property --get UserKeyMappingвона виробляє
(null)
але, здається, ви не можете повернути це значення, щоб запам'ятати налаштування (вірніше, він приймає, але ігнорує цей ввід).
(Якщо ви не знайомі з Терміналом, просто скопіюйте / вставте річ з forтих пір, поки doneна ваш bash$запит чи подібне.)
Відповідно до цього пов'язаного питання щодо переповнення стека, ви можете помістити команду у файл сценарію у вашому домашньому каталозі та додати його до своєї launchdконфігурації, щоб зробити цю зміну стійкою.
Якщо деяким читачам не зручно робити це самостійно, ось короткий сценарій, який робить це для вас. Знову ж просто скопіюйте та вставте це у вікні терміналу.
mkdir -p "$HOME"/bin
printf '%s\n' '#!/bin/sh' \
'hidutil property --set '"'"'{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000029}]}'"'" \
>"$HOME"/bin/userkeymapping
chmod 755 "$HOME"/bin/userkeymapping
cat<<: >"$HOME"/Library/LaunchAgents/userkeymapping.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>userkeymapping</string>
<key>ProgramArguments</key>
<array>
<string>$HOME/bin/userkeymapping</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
:
launchctl load "$HOME"/Library/LaunchAgents/userkeymapping.plist
Очевидно, якщо у вас виникла якась інша кнопка, ніж 0x700000064вам потрібно змінити це в сценарії, або у файлі, "$HOME"/bin/userkeymappingвін закінчується створенням, якщо ви вже виконали вище.