17 votos

La actualización de la tecla de modificación de las asignaciones a través de los valores predeterminados de comandos de la herramienta

Estoy tratando de automatizar la inicial de la instalación de mi macbook, que incluye la instalación de software y cambiar de OS X de configuración para mis necesidades.

He intentado actualizar las teclas modificadoras con la configuración por defecto, el código es como sigue:

# 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; } )'

Parece que el problema de que, incluso si el patrón se cambia el Sistema de Preferencias no captura la actualización, ni siquiera reiniciando el equipo.

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

Gracias.

15voto

Brendan Long Puntos 314

Es importante que el defaults comando para el uso correcto del "ID de teclado" en la clave, parece ser: com.apple.keyboard.modifiermapping.$VendorID-$ProductID-0

Por ejemplo, el teclado interno para mi MacBook Air usos: com.apple.keyboard.modifiermapping.1452-579-0, mientras que el teclado externo en mi iMac usa com.apple.keyboard.modifiermapping.1118-219-0

Cómo obtener la correcta "ID de teclado"? En la línea de comandos que puede utilizar:

ioreg -p IOUSB -c IOUSBDevice | grep -e class -e idVendor -e idProduct

para obtener una lista de 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

Mi conjetura es que el tercer parámetro (el "-0") es un "contador", en caso de tener más de un teclado del mismo tipo.

Así, para desactivar la tecla Bloq mayús en mi teclado externo ahora podemos 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' bien, aquí está una lista de posibles códigos de clave a utilizar (de Mac OS X Hints):

  • Ninguno - -1
  • El Bloqueo De Mayúsculas - 0
  • Shift (Izquierdo) - 1
  • De Control (A La Izquierda) - 2
  • Opción (A La Izquierda) - 3
  • Comando (Izquierda) - 4
  • Teclado 0 - 5
  • Ayuda - 6
  • Shift (Derecho) - 9
  • De Control (A La Derecha) - 10
  • Opción (Derecha) - 11
  • Comando (Derecho) - 12

Actualización: gracias a Lauri ranta le este es un comando que funciona por Bluetooth y USB teclados:

ioreg -n IOHIDKeyboard -r | grep -e 'class IOHIDKeyboard' -e VendorID\" -e Product

que da un poco de salida diferentes:

+-o IOHIDKeyboard  <class IOHIDKeyboard, id 0x100000489, registered, matched, active, busy 0 (0 ms), retain 8>
  |   "Product" = "Apple Wireless Keyboard"
  |   "VendorID" = 1452
  |   "ProductID" = 570

2voto

Eliot Puntos 116

El problema que estoy teniendo es que cada vez que conecto mi teclado, se obtiene un ID diferente en ioreg. Todo lo que necesitas hacer es cambiar el comando y la manzana de las teclas.

Me decidí a resolver esto en mi caso el "mal" uso de AppleScript y el Sistema de Preferencias de la interfaz gráfica de usuario. Es un feo hack, 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

1voto

Vikram Wasnik Puntos 11

También, he sido incapaz de obtener defaults write (o actualización .plist archivos) para afectar mi HIDKeyboardModifierMappingSrc y HIDKeyboardModifierMappingDst configuración en Snow Leopard.

Estoy tratando de "rellenar" mi cuenta de Invitado para apoyar mi PS2 a USB, teclado (que, al parecer, tiene la Opción y Comando intercambia.) Otras páginas de' sugerencias para "cerrar la sesión y volver a iniciar sesión en" no ayudan; "explotación" de la cuenta de Invitado elimina todos mis cambios.

(Me han actualizado correctamente mi "com.apple.dock" y "com.apple.menuextra.reloj" plist archivos para personalizar el dock y el reloj de 24 horas, respectivamente, lo que hace aún más frustrante que los Modificadores de Teclado no funciona...)

He intentado usar "dtruss -asf" para comparar lo que "Preferencias del Sistema.app" está haciendo (que al parecer funciona) con lo que el "defecto" que está haciendo. Más cercano que puedo encontrar, veo los mensajes a lo largo de las líneas 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 sabe una solución que funciona bajo Snow Leopard, yo estaría feliz de escuchar...

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X