É importante que o defaults
comando use o "ID do teclado" correto na tecla, parece ser:com.apple.keyboard.modifiermapping.$VendorID-$ProductID-0
Por exemplo, o teclado interno do meu MacBook Air usa:, com.apple.keyboard.modifiermapping.1452-579-0
enquanto o teclado externo do meu iMac usacom.apple.keyboard.modifiermapping.1118-219-0
Como obter o "ID do teclado" correto? Na linha de comando, você pode usar:
ioreg -p IOUSB -c IOUSBDevice | grep -e class -e idVendor -e idProduct
para obter uma lista dos seus dispositivos USB com os parâmetros relevantes:
[...]
+-o Natural® Ergonomic Keyboard 4000@fa140000 <class IOUSBDevice, id 0x100000452, registered, matched, active, busy 0 (115 ms), retain 12>
"idProduct" = 219
"idVendor" = 1118
Meu palpite é que o terceiro parâmetro (a parte "-0") é um "contador", caso você tenha mais de um teclado do mesmo tipo.
Portanto, para desativar a tecla CapsLock no meu teclado externo, agora posso usar:
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>'
E, por uma questão de integridade, aqui está uma lista de possíveis códigos-chave a serem usados ( das dicas do Mac OS X ):
- Nenhum - -1
- Caps Lock - 0
- Shift (Esquerda) - 1
- Controle (Esquerda) - 2
- Opção (esquerda) - 3
- Comando (Esquerda) - 4
- Teclado 0 - 5
- Ajuda - 6
- Shift (Direita) - 9
- Controle (Direito) - 10
- Opção (Direita) - 11
- Comando (Direito) - 12
Atualização: graças a Lauri Ranta, aqui está um comando que funciona com teclados Bluetooth e USB:
ioreg -n IOHIDKeyboard -r | grep -e 'class IOHIDKeyboard' -e VendorID\" -e Product
o que fornece uma saída ligeiramente diferente:
+-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'
vez disso. Ainda não funciona.