Для команды важно defaults
использовать правильный «идентификатор клавиатуры» в ключе, это выглядит так:com.apple.keyboard.modifiermapping.$VendorID-$ProductID-0
Например, внутренняя клавиатура для моего MacBook Air использует:, com.apple.keyboard.modifiermapping.1452-579-0
а внешняя клавиатура на моем iMac использует:com.apple.keyboard.modifiermapping.1118-219-0
Как получить правильный «идентификатор клавиатуры»? В командной строке вы можете использовать:
ioreg -p IOUSB -c IOUSBDevice | grep -e class -e idVendor -e idProduct
чтобы получить список ваших USB-устройств с соответствующими параметрами:
[...]
+-o Natural® Ergonomic Keyboard 4000@fa140000 <class IOUSBDevice, id 0x100000452, registered, matched, active, busy 0 (115 ms), retain 12>
"idProduct" = 219
"idVendor" = 1118
Я предполагаю, что третий параметр (часть "-0") является "счетчиком", если у вас более одной клавиатуры одного типа.
Итак, чтобы отключить клавишу CapsLock на моей внешней клавиатуре, я теперь могу использовать:
defaults -currentHost write -g com.apple.keyboard.modifiermapping.1118-219-0 -array-add '<dict><key>HIDKeyboardModifierMappingDst</key><integer>-1</integer><key>HIDKeyboardModifierMappingSrc</key><integer>0</integer></dict>'
И, ради полноты, вот список возможных кодов клавиш для использования ( из Mac OS X Hints ):
- Нет - –1
- Caps Lock - 0
- Сдвиг (влево) - 1
- Управление (слева) - 2
- Вариант (слева) - 3
- Команда (слева) - 4
- Клавиатура 0 - 5
- Помощь - 6
- Сдвиг (вправо) - 9
- Контроль (справа) - 10
- Вариант (справа) - 11
- Команда (справа) - 12
Обновление: благодаря Lauri Ranta вот команда, которая работает для клавиатур Bluetooth и USB:
ioreg -n IOHIDKeyboard -r | grep -e 'class IOHIDKeyboard' -e VendorID\" -e Product
что дает вам немного другой результат:
+-o IOHIDKeyboard <class IOHIDKeyboard, id 0x100000489, registered, matched, active, busy 0 (0 ms), retain 8>
| "Product" = "Apple Wireless Keyboard"
| "VendorID" = 1452
| "ProductID" = 570
defaults -currentHost write -g key 'value'
вместо этого. Все еще не работает, хотя