Ich versuche, die Ersteinrichtung meines Macbooks zu automatisieren, einschließlich der Installation von Software und der Anpassung der OS X-Konfiguration an meine Bedürfnisse.
Ich habe versucht, die Modifikatortasten mit den Standardwerten zu aktualisieren. Der Code lautet wie folgt:
# 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; } )'
Das Problem scheint, dass selbst wenn das Muster geändert wird, die Systemeinstellungen das Update nicht abfangen und nicht einmal den Computer neu starten.
Gibt es eine Möglichkeit, diesen Vorgang in Snow Leopard durchzuführen?
Vielen Dank.
Es ist wichtig, dass der defaults
Befehl die richtige "Tastatur-ID" im Schlüssel verwendet, es scheint zu sein:com.apple.keyboard.modifiermapping.$VendorID-$ProductID-0
Zum Beispiel verwendet die interne Tastatur für mein MacBook Air: com.apple.keyboard.modifiermapping.1452-579-0
, während die externe Tastatur auf meinem iMac verwendetcom.apple.keyboard.modifiermapping.1118-219-0
Wie erhalte ich die richtige "Tastatur-ID"? Auf der Befehlszeile können Sie Folgendes verwenden:
ioreg -p IOUSB -c IOUSBDevice | grep -e class -e idVendor -e idProduct
um eine Liste Ihrer USB-Geräte mit den relevanten Parametern zu erhalten:
[...]
+-o Natural® Ergonomic Keyboard 4000@fa140000 <class IOUSBDevice, id 0x100000452, registered, matched, active, busy 0 (115 ms), retain 12>
"idProduct" = 219
"idVendor" = 1118
Ich vermute, dass der dritte Parameter (der "-0"-Teil) ein "Zähler" ist, falls Sie mehr als eine Tastatur des gleichen Typs haben.
Um die CapsLock-Taste auf meiner externen Tastatur auszuschalten, kann ich jetzt Folgendes verwenden:
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>'
Und der Vollständigkeit halber hier eine Liste möglicher Tastencodes ( aus Mac OS X Hints ):
Update: Dank Lauri Ranta ist hier ein Befehl, der für Bluetooth- und USB-Tastaturen funktioniert:
ioreg -n IOHIDKeyboard -r | grep -e 'class IOHIDKeyboard' -e VendorID\" -e Product
was Ihnen eine etwas andere Ausgabe gibt:
+-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; }'
, die Sie auf einigen Websites finden können, zumindest werden für mich die "-1" und "0" in den Werten des Diktats dann als Zeichenfolgen interpretiert, nicht als Ganzzahlen. Das führt zu einem seltsamen Zustand, in dem die Einstellungen die geänderten Zusatztasten anzeigen, die Tastatur sich jedoch nicht so verhält.ioreg -n IOHIDKeyboard -r
würde auch Bluetooth-Tastaturen beinhalten.ioreg
Filter scheinen nicht zu funktionieren. Ich konnte meine Tastatur mit ioreg -r -c AppleHSSPIDevice
und finden ioreg -r -n "Apple Internal Keyboard / Trackpad"
.Das Problem, das ich habe, ist, dass jedes Mal, wenn ich meine Tastatur anschließe, sie eine andere ID in ioreg erhält. Alles, was ich tun muss, ist den Befehl und die Apfeltasten zu tauschen.
Ich habe mich entschieden, dies in meinem Fall mit AppleScript und der Systemeinstellungen-GUI auf die "falsche Weise" zu lösen. Es ist ein hässlicher Hack, aber es funktioniert! Ihr Kilometerstand kann variieren.
--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
Auch ich war nicht in der Lage, defaults write
.plist-Dateien zu erhalten (oder zu aktualisieren), um meine HIDKeyboardModifierMappingSrc- und HIDKeyboardModifierMappingDst- Einstellungen unter Snow Leopard zu beeinflussen .
Ich versuche, mein Gastkonto "vorauszufüllen", um meine PS2-zu-USB-Tastatur zu unterstützen (bei der anscheinend Option und Befehl vertauscht sind). Die Vorschläge anderer Seiten zum "Abmelden und erneuten Anmelden" helfen nicht; "Ausloggen" des Gastkontos löscht alle meine Änderungen.
(Ich habe meine Plist-Dateien "com.apple.dock" und "com.apple.menuextra.clock" erfolgreich aktualisiert, um das Dock bzw. die 24-Stunden-Uhr anzupassen, was es noch frustrierender macht, dass die Tastaturmodifikatoren nicht funktionieren funktioniert nicht...)
Ich habe versucht, "dtruss -asf" zu verwenden, um zu vergleichen, was "System Preferences.app" tut (was anscheinend funktioniert), und was "defaults" tut. Soweit ich weiß, sehe ich Nachrichten in der Art von:
Foundation`+[__NSOperationInternal _observeValueForKeyPath:ofObject:changeKind:oldValue:newValue:indexes:context:]+0x151
Foundation`NSKeyValueNotifyObserver+0x81
Foundation`NSKeyValueDidChange+0x1ca
Foundation`-[NSObject(NSKeyValueObservingPrivate) _changeValueForKey:usingBlock:]+0x176
Wenn jemand eine Lösung gefunden hat, die unter Snow Leopard funktioniert, würde ich mich freuen, sie zu hören ...
diff
, um zu überprüfen, ob Sie diese Datei genau so erstellen, wie es die Benutzeroberfläche tun würde?fs_usage
oder lsof
aus, um herauszufinden, was sonst noch getan wird, wenn Sie die Benutzeroberfläche verwenden.fs_usage
zeigt nichts Interessantes AFAICT, und ich habe (mit meinem modifizierten Befehl im Kommentar zur Frage) überprüft, dass das Ergebnis so angezeigt wird, wie man es erwarten würde.
Daniel Beck
defaults -currentHost write -g key 'value'
. Funktioniert aber trotzdem nicht.Daniel Beck