Mavericks: Wie füge ich eine Eingabequelle über plists/defaults hinzu?

Ich versuche, mein OS X-Setup zu automatisieren, aber ich stecke fest, wenn ich versuche, eine neue Eingabequelle oder ein neues Tastaturlayout programmgesteuert hinzuzufügen.

Normalerweise verwende ich zwei Layouts: normales US und US International, also versuche ich, einfach das US International-Layout hinzuzufügen.

Folgendes ist mir bisher aufgefallen. Wenn ich das Layout manuell hinzufüge, sehe ich, dass dieser Eintrag meinem AppleEnabledInputSourcesSchlüssel auf der com.apple.HIToolboxplist hinzugefügt wird:

--- a/def0.txt
+++ b/def1.txt
@@ -17,6 +17,11 @@
                 {
             "Bundle ID" = "com.apple.PressAndHold";
             InputSourceKind = "Non Keyboard Input Method";
+        },
+                {
+            InputSourceKind = "Keyboard Layout";
+            "KeyboardLayout ID" = 15000;
+            "KeyboardLayout Name" = "USInternational-PC";
         }
     );
     AppleInputSourceHistory =     (

Ich habe diese Ausgabe erhalten, indem ich defaults read com.apple.HIToolbox. Ich kann die gleiche Hinzufügung bestätigen, indem ich direkt öffne ~/Library/Preferences/com.apple.HIToolbox.plist.

Also entschied ich, dass ich wahrscheinlich nur denselben Eintrag hinzufügen musste, und alles würde funktionieren. Also habe ich das manuelle Hinzufügen rückgängig gemacht (und bestätigt, dass der Eintrag aus der plist weg war) und jetzt versucht:

$ defaults write com.apple.HIToolbox AppleEnabledInputSources -array-add '{InputSourceKind="Keyboard Layout"; "KeyboardLayout Name"="USInternational-PC"; "KeyboardLayout ID"=15000;}'

Ich bestätige erneut über defaults readDiffs, dass der Plist derselbe Eintrag hinzugefügt wird, aber es funktioniert nicht!

Ich habe versucht zu töten cfprefsdund SystemUIServersogar neu zu starten, aber nichts davon scheint zu funktionieren.

Hat jemand eine Ahnung, was hier passieren könnte?

Antworten (1)

Es stellt sich heraus, dass das Format, das ich für den AppleEnabledInputSourcesEintrag verwendet habe, schlecht war, weil es alles als Typ betrachtet string, aber KeyboardLayout IDTyp sein muss integer!

Der richtige Weg, dies zu tun, wäre also über XML:

defaults write com.apple.HIToolbox AppleEnabledInputSources -array-add '<dict><key>InputSourceKind</key><string>Keyboard Layout</string><key>KeyboardLayout ID</key><integer>15000</integer><key>KeyboardLayout Name</key><string>USInternational-PC</string></dict>'

Nachdem Sie diesen Befehl ausgeführt und sich abgemeldet / angemeldet haben, sieht es so aus, als ob die Dinge gut funktionieren.