Estoy tratando de automatizar la configuración inicial de mi macbook, que incluye instalar software y cambiar la configuración de OS X según mis necesidades.
He intentado actualizar las teclas 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 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.
Es importante que el defaults
comando 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 usacom.apple.keyboard.modifiermapping.1118-219-0
¿Cómo obtener el "ID de teclado" correcto? 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 Mac OS X Sugerencias ):
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
lo 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
'{ HIDKeyboardModifierMappingDst = -1; HIDKeyboardModifierMappingSrc = 0; }'
Eso lleva a un estado extraño en el que Preferencias muestra las teclas modificadoras modificadas, pero el teclado en realidad no se comporta de esa manera.ioreg -n IOHIDKeyboard -r
También incluiría teclados Bluetooth.ioreg
filtros anteriores no parecen funcionar. Pude encontrar mi teclado con ioreg -r -c AppleHSSPIDevice
y ioreg -r -n "Apple Internal Keyboard / Trackpad"
.El problema que tengo es que cada vez que conecto mi teclado, obtiene una ID diferente en ioreg. Todo lo que necesito hacer es intercambiar el comando y las teclas 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 experiencia puede ser diferente.
--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
Yo tampoco he podido obtener defaults write
(o actualizar archivos .plist) para afectar mi configuración HIDKeyboardModifierMappingSrc y HIDKeyboardModifierMappingDst en Snow Leopard .
Estoy tratando de "rellenar previamente" mi cuenta de invitado para admitir mi teclado PS2 a USB (que aparentemente tiene la opción y el comando intercambiados). Las sugerencias de otras páginas para "cerrar sesión y volver a iniciarla" no ayudan; "cerrar sesión" de la cuenta de invitado elimina todos mis cambios.
(He actualizado con éxito mis archivos plist "com.apple.dock" y "com.apple.menuextra.clock" para personalizar el dock y el reloj de 24 horas, respectivamente, lo que hace que sea aún más frustrante que los modificadores de teclado no funcionen. no funciona...)
Intenté usar "dtruss -asf" para comparar lo que está haciendo "System Preferences.app" (que aparentemente funciona) con lo que está haciendo "predeterminado". Lo más cerca que puedo imaginar, veo 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 ha descubierto una solución que funcione con Snow Leopard, me encantaría escucharla...
diff
para verificar que está creando este archivo exactamente como lo haría la interfaz de usuario?fs_usage
o lsof
para averiguar qué más se está haciendo cuando usa la interfaz de usuario.fs_usage
no muestra nada interesante AFAICT, y verifiqué (con mi comando modificado en el comentario de la pregunta) que el resultado aparece como cabría esperar.
daniel beck
defaults -currentHost write -g key 'value'
lugar. Aunque todavía no funciona.daniel beck