Actualizar las asignaciones de claves modificadoras a través de la herramienta de comando por defecto

14

Estoy intentando automatizar la configuración inicial de mi macbook, que incluye la instalación del software y el cambio de la configuración de OS X a mis necesidades.

He intentado actualizar las claves modificadoras con los valores predeterminados, el código es el siguiente:

# The apple keyboard id (1452-567-0) should probably be modified in case you use other different model 
COMPUTER_UUID='ioreg -rd1 -c IOPlatformExpertDevice | grep -E '(UUID)' | awk '{print $3}' | tr -d \"'
defaults write ~/Library/Preferences/ByHost/.GlobalPreferences.$COMPUTER_UUID com.apple.keyboard.modifiermapping.1452-567-0 '( { HIDKeyboardModifierMappingDst = 2;   HIDKeyboardModifierMappingSrc = 0; } )'

El problema parece ser que, incluso si se cambia el patrón, las Preferencias del sistema no detectan la actualización, ni siquiera reinician la computadora.

¿Hay alguna forma de realizar esta operación en Snow Leopard?

Gracias.

    
pregunta The Robot 06.05.2011 - 19:31

4 respuestas

11

Es importante que el comando defaults use la "ID de teclado" correcta en la clave, 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 usa com.apple.keyboard.modifiermapping.1118-219-0

¿Cómo obtener la "ID de teclado" correcta? En la línea de comandos 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 [email protected]  <class IOUSBDevice, id 0x100000452, registered, matched, active, busy 0 (115 ms), retain 12>
        "idProduct" = 219
        "idVendor" = 1118

Mi opinión es que el tercer parámetro (la parte "-0") es un "contador", en caso de que tenga más de un teclado del mismo tipo.

Por lo tanto, para desactivar la tecla CapsLock 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 Mac OS X Hints ):

  • Ninguna - –1
  • Bloqueo de mayúsculas - 0
  • Mayús (izquierda) - 1
  • Control (izquierda) - 2
  • Opción (izquierda) - 3
  • Comando (izquierda) - 4
  • Teclado 0 - 5
  • Ayuda - 6
  • Mayús (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 Bluetooth & Teclados 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
    
respondido por el Orangenhain 07.04.2013 - 20:33
1

También, no he podido obtener defaults write (o actualizar archivos .plist) para afectar a mi HIDKeyboardModifierMappingSrc y HIDKeyboardModifierMappingDst en Snow Leopard .

Estoy intentando "rellenar previamente" mi cuenta de Invitado para que sea compatible con mi teclado PS2-a-USB (que aparentemente ha cambiado la Opción y el Comando). Sugerencias de otras páginas para "cerrar sesión y volver a iniciarla" no " t ayuda El "cierre de sesión" de la cuenta de invitado elimina todos mis cambios.

(He he actualizado correctamente mis archivos "com.apple.dock" y "com.apple.menuextra.clock" para personalizar el dock y el reloj de 24 horas, respectivamente, lo que hace que es aún más frustrante que los modificadores de teclado no funcionen ...)

He intentado usar "dtruss -asf" para comparar lo que está haciendo "System Preferences.app" (lo que aparentemente funciona) con lo que está haciendo "default". Lo más cercano que puedo imaginar, veo mensajes en la línea de:

   Foundation'+[__NSOperationInternal _observeValueForKeyPath:ofObject:changeKind:oldValue:newValue:indexes:context:]+0x151
   Foundation'NSKeyValueNotifyObserver+0x81
   Foundation'NSKeyValueDidChange+0x1ca
   Foundation'-[NSObject(NSKeyValueObservingPrivate) _changeValueForKey:usingBlock:]+0x176

Si alguien ha descubierto una solución que funciona bajo Snow Leopard, me encantaría escucharla ...

    
respondido por el Dabe 01.06.2011 - 07:07
1

El problema que tengo es que cada vez que conecto mi teclado, aparece una ID diferente en ioreg. Todo lo que necesito hacer es intercambiar el comando y las teclas de Apple.

Decidí resolver esto en mi caso de la "manera incorrecta" usando AppleScript y la GUI de Preferencias del Sistema. Es un truco feo, pero funciona! Su kilometraje puede variar.

--The beginning of the name of the target keyboard (to type into the drop-down selection list)
set keyboardName to "natural"

--reboot system preferences to make GUI state more predictable
tell application "System Preferences"
    quit
    delay 1
    activate
    delay 1
    activate
end tell

tell application "System Events"

    --Bring up keyboard prefs
    key code 53 --escape
    keystroke "f" using command down
    delay 0.5
    key code 53 --escape
    keystroke "keyboard"
    delay 0.5
    key code 36 --return
    delay 1

    --Open modifier keys submenu
    repeat 4 times
        keystroke tab using shift down
        --delay 0.1
    end repeat
    --delay 0.1
    keystroke space
    delay 0.1

    --Select keyboard
    keystroke space
    keystroke keyboardName
    keystroke return
    delay 0.1

    --Select "option key" drop-down
    repeat 3 times
        keystroke tab
    end repeat

    delay 0.5

    --Open drop-down and go to top
    keystroke space
    delay 0.1
    repeat 4 times
        key code 126 --up arrow
    end repeat

    --Select "command" option
    repeat 3 times
        key code 125 --down arrow
    end repeat
    delay 0.1

    keystroke return

    -- Select "command key" drop-down
    keystroke tab
    delay 0.1

    --Open drop-down and go to top
    keystroke space
    delay 0.1
    repeat 4 times
        key code 126 --up arrow
    end repeat

    --Select "command" option
    repeat 2 times
        key code 125 --down arrow
    end repeat
    delay 0.1

    keystroke return
    delay 0.1

    --Commit changes! phew.
    keystroke return
end tell
    
respondido por el Eliot 28.02.2014 - 00:35
0
  • ¿Has ejecutado diff para verificar que estás creando este archivo exactamente como lo haría la interfaz de usuario?
  • Ejecuta fs_usage o lsof para averiguar qué más se está haciendo cuando usas la interfaz de usuario.
respondido por el user588 07.05.2011 - 07:06

Lea otras preguntas en las etiquetas