Das Aktualisieren von Zusatztasten über die Befehlszeile hat keine Auswirkung

Das Ziel: Ordnen Sie „Caps Lock“ auf „Control“ von der Befehlszeile aus zu.

Ich versuche, die Modifikatortasten über die Befehlszeile mit dem folgenden Befehl zu aktualisieren, wie hier und hier erklärt, aber ohne Wirkung.

$ defaults -currentHost write -g "com.apple.keyboard.modifiermapping.1452-611-0" '(
{
  HIDKeyboardModifierMappingDst = 2;
  HIDKeyboardModifierMappingSrc = 0;
})'

Wenn ich es über die "Systemeinstellungen" mache, funktioniert es sofort und scheint genauso konfiguriert zu sein wie wenn ich es manuell mache, wie unten zu sehen:

$ defaults -currentHost read -g "com.apple.keyboard.modifiermapping.1452-611-0"
(
        {
        HIDKeyboardModifierMappingDst = 2;
        HIDKeyboardModifierMappingSrc = 0;
    }
)

Dies ist genau das gleiche Ergebnis wie bei der manuellen Ausführung oder über die GUI.

Beim Neustart nach dem Ausführen der Befehlszeile sehe ich, dass es in den "Systemeinstellungen" wie erwartet richtig eingestellt ist, aber es funktioniert nicht. Es funktioniert nur, wenn Sie die Standardeinstellungen zurücksetzen und manuell einstellen.

Ich habe sogar versucht, die plistDatei wie hier vorgeschlagen erneut zu kopieren, ohne Erfolg (auch mit Neustart).

Als nächstes habe ich dies ohne Erfolg versucht (Ideen von hier ):

defaults -currentHost write -globalDomain <rest of command>
defaults write NSGlobalDomain <rest of command>
defaults write GlobalPreferences <rest of command>

Laufendes OSX 10.9.4(Mavrics).

Alle Ideen sind willkommen.

Antworten (1)

Dies liegt daran, dass Werte als Zeichenfolgen und nicht als Ganzzahlen geschrieben werden. Sie können das sehen mit:

$ plutil -convert xml1 -o - ~/Library/Preferences/ByHost/.GlobalPreferences.*.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.keyboard.modifiermapping.1452-591-0</key>
    <array>
        <dict>
            <key>HIDKeyboardModifierMappingDst</key>
            <string>30064771303</string>
            <key>HIDKeyboardModifierMappingSrc</key>
            <string>30064771302</string>
        </dict>
        <dict>
            <key>HIDKeyboardModifierMappingDst</key>
            <string>30064771302</string>
            <key>HIDKeyboardModifierMappingSrc</key>
            <string>30064771303</string>
        </dict>
    </array>
</dict>
</plist>

Der richtige Weg, die Einstellung zu aktualisieren, ist die Verwendung des XML-Formats:

$ defaults -currentHost write -g com.apple.keyboard.modifiermapping.1452-591-0 -array \
'<dict>
    <key>HIDKeyboardModifierMappingDst</key>
    <integer>30064771303</integer>
    <key>HIDKeyboardModifierMappingSrc</key>
    <integer>30064771302</integer>
</dict>' \
'<dict>
    <key>HIDKeyboardModifierMappingDst</key>
    <integer>30064771302</integer>
    <key>HIDKeyboardModifierMappingSrc</key>
    <integer>30064771303</integer>
</dict>'
Also erstellt es im ersten Beispiel des OP ein Array mit einem Objekt darin, und der Wert innerhalb des Objekts ist implizit eine Zeichenfolge (obwohl sie wie Zahlen aussehen)?
Wenn Sie mehrere Werte gleichzeitig festlegen, ist die Verwendung der XML-Syntax die einzige Möglichkeit, Typen anzugeben? Ist es erforderlich?
@trusktr Ja, Werte in PLIST-Objekten sind implizit Zeichenfolgen. Ich kenne die PLIST-Syntax nicht, um zu erzwingen, dass der Wert eine ganze Zahl ist. Es scheint keinen anderen Weg zu geben, als die XML-Syntax zu verwenden.