对于defaults
命令,在密钥中使用正确的“键盘ID”很重要,这似乎是:com.apple.keyboard.modifiermapping.$VendorID-$ProductID-0
例如,MacBook Air的内部键盘使用:com.apple.keyboard.modifiermapping.1452-579-0
,而iMac上的外部键盘使用com.apple.keyboard.modifiermapping.1118-219-0
如何获得正确的“键盘ID”?在命令行上,您可以使用:
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提示):
- 无-–1
- 大写锁定— 0
- Shift(左)— 1
- 控制(左)— 2
- 选项(左)— 3
- 指挥官(左)— 4
- 键盘0 — 5
- 帮助— 6
- Shift(右)— 9
- 控制(右)— 10
- 选项(右)— 11
- 命令(右)— 12
更新:感谢Lauri Ranta,这是一个适用于蓝牙和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'
代替。仍然不起作用。