Es importante que el defaults
comando use la "ID de teclado" correcta en la tecla, parece ser:com.apple.keyboard.modifiermapping.$VendorID-$ProductID-0
Por ejemplo, el teclado interno de mi MacBook Air usa: com.apple.keyboard.modifiermapping.1452-579-0
mientras que el teclado externo de mi iMac usacom.apple.keyboard.modifiermapping.1118-219-0
¿Cómo obtener la "ID de teclado" correcta? En la línea de comando puedes usar:
ioreg -p IOUSB -c IOUSBDevice | grep -e class -e idVendor -e idProduct
para obtener una lista de sus dispositivos USB con los 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
Supongo que el tercer parámetro (la parte "-0") es un "contador", en caso de que tenga más de un teclado del mismo tipo.
Entonces, para desactivar la tecla Bloq Mayús en mi teclado externo ahora puedo 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>'
Y, para completar, aquí hay una lista de posibles códigos clave para usar ( de las sugerencias de Mac OS X ):
- Ninguno - –1
- Bloqueo de mayúsculas - 0
- Shift (izquierda) - 1
- Control (izquierda) - 2
- Opción (izquierda) - 3
- Comando (izquierda) - 4
- Teclado 0 - 5
- Ayuda - 6
- Shift (derecha) - 9
- Control (derecha) - 10
- Opción (derecha) - 11
- Comando (derecha) - 12
Actualización: gracias a Lauri Ranta, aquí hay un comando que funciona para teclados Bluetooth y USB:
ioreg -n IOHIDKeyboard -r | grep -e 'class IOHIDKeyboard' -e VendorID\" -e Product
que te da una salida ligeramente 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'
en su lugar. Aún así no funciona.