Я пытаюсь автоматизировать настройку OS X, но я застрял, пытаясь программно добавить новый источник ввода или раскладку клавиатуры.
Обычно я использую две раскладки: обычная американская и международная, поэтому я пытаюсь просто добавить международную раскладку США.
Вот что я пока заметил. Когда я вручную добавляю макет, я вижу, что эта запись добавляется к моему AppleEnabledInputSources
ключу в com.apple.HIToolbox
plist:
--- 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 read
diffs, что он добавляет ту же запись в plist, но это не работает!
Я пытался убить cfprefsd
и SystemUIServer
даже перезагрузить компьютер, но ничего из этого не работает.
Кто-нибудь знает, что здесь может происходить?
Оказывается, формат, который я использовал для 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>'
После запуска этой команды и выхода из системы/входа в систему все работает нормально.