Mavericks: как ДОБАВИТЬ источник ввода через plists/defaults?

Я пытаюсь автоматизировать настройку OS X, но я застрял, пытаясь программно добавить новый источник ввода или раскладку клавиатуры.

Обычно я использую две раскладки: обычная американская и международная, поэтому я пытаюсь просто добавить международную раскладку США.

Вот что я пока заметил. Когда я вручную добавляю макет, я вижу, что эта запись добавляется к моему AppleEnabledInputSourcesключу в com.apple.HIToolboxplist:

--- 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 =     (

Я получил этот вывод, выполнив defaults read com.apple.HIToolbox. Я могу подтвердить то же самое дополнение, непосредственно открыв файл ~/Library/Preferences/com.apple.HIToolbox.plist.

Поэтому я решил, что, вероятно, все, что мне нужно сделать, это просто добавить ту же запись, и все заработает. Поэтому я отменил ручное добавление (и подтвердил, что запись из plist исчезла) и теперь попробовал:

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

Я снова подтверждаю через defaults readdiffs, что он добавляет ту же запись в plist, но это не работает!

Я пытался убить cfprefsdи SystemUIServerдаже перезагрузить компьютер, но ничего из этого не работает.

Кто-нибудь знает, что здесь может происходить?

Ответы (1)

Оказывается, формат, который я использовал для AppleEnabledInputSourcesзаписи, был плохим, потому что он рассматривает все как тип string, но KeyboardLayout IDдолжен быть типом integer!

Таким образом, правильный способ сделать это через 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>'

После запуска этой команды и выхода из системы/входа в систему все работает нормально.