Aktualisieren der Modifikatortastenzuordnungen über das Standardbefehlstool

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.

stattdessen verwenden defaults -currentHost write -g key 'value'. Funktioniert aber trotzdem nicht.
Dieser Typ versucht etwas Ähnliches und ist ebenfalls gescheitert. Wäre AppleScript-GUI-Skripting eine praktikable Option für Sie?

Antworten (4)

Es ist wichtig, dass der defaultsBefehl 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 ):

  • Keine — –1
  • Feststelltaste — 0
  • Verschiebung (links) – 1
  • Steuerung (links) – 2
  • Option (links) – 3
  • Befehl (links) – 4
  • Tastenfeld 0 – 5
  • Hilfe – 6
  • Verschiebung (rechts) – 9
  • Steuerung (rechts) – 10
  • Option (rechts) – 11
  • Befehl (rechts) – 12

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
Verwenden Sie nicht die kürzere Version des Standardwerts '{ 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 -rwürde auch Bluetooth-Tastaturen beinhalten.
Ich habe dies getan, aber es scheint keine Wirkung zu haben. Muss ich etwas neu starten, damit es funktioniert?
@SimonW Ich habe das gleiche erlebt. Ich habe festgestellt, dass die Einstellung durch einfaches Abmelden und erneutes Anmelden wirksam wird.
Das macht keinen Spaß :(
Könnte dies in Sierra verwendet werden, um dies zum Laufen zu bringen apple.stackexchange.com/questions/280855/…
Mein neues MacBook Pro (13 Zoll, 2017, vier Thunderbolt 3-Ports) hat die interne Tastatur und das Trackpad am SPI-Bus. Die vorherigen ioregFilter scheinen nicht zu funktionieren. Ich konnte meine Tastatur mit ioreg -r -c AppleHSSPIDeviceund 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 ...

  • Haben Sie ausgeführt diff, um zu überprüfen, ob Sie diese Datei genau so erstellen, wie es die Benutzeroberfläche tun würde?
  • Führen Sie fs_usageoder lsofaus, um herauszufinden, was sonst noch getan wird, wenn Sie die Benutzeroberfläche verwenden.
fs_usagezeigt 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.