Я просто натрапив на щось, що може допомогти. Ось:
$ defaults read /Library/Preferences/com.apple.HIToolbox.plist
{
AppleCurrentKeyboardLayoutInputSourceID = "com.apple.keylayout.Dutch";
AppleDefaultAsciiInputSource = {
InputSourceKind = "Keyboard Layout";
"KeyboardLayout ID" = 1337;
"KeyboardLayout Name" = QWERTY;
};
AppleEnabledInputSources = (
{
InputSourceKind = "Keyboard Layout";
"KeyboardLayout ID" = 26;
"KeyboardLayout Name" = Dutch;
}
);
AppleInputSourceHistory = (
{
InputSourceKind = "Keyboard Layout";
"KeyboardLayout ID" = 26;
"KeyboardLayout Name" = Dutch;
}
);
AppleSelectedInputSources = (
{
InputSourceKind = "Keyboard Layout";
"KeyboardLayout ID" = 26;
"KeyboardLayout Name" = Dutch;
}
);
}
Це в моїй системі, де за замовчуванням використовується моя власна розкладка клавіатури (названа "QWERTY"). Зверніть увагу, що властивості KeyboardLayout Nameта KeyboardLayout IDвластивості посилаються на ідентифікатор та ім'я на початку .keylayoutфайлу.
Як бачите, defaults read /Library/Preferences/com.apple.HIToolbox.plist AppleCurrentKeyboardLayoutInputSourceIDвсе одно повертає рядок "com.apple.keylayout.Dutch". Чи є десь список доступних com.apple.keylayoutзначень? Чи можливо отримати таке значення для власної розкладки клавіатури? Тому що в цьому випадку ми можемо просто перекрити майно.
Крім того, всі AppleEnabledInputSources, AppleInputSourceHistoryі AppleSelectedInputSourcesвластивості, здається, ігнорують користувальницьку розкладку клавіатури, оскільки їх значення відповідають нативній розкладці клавіатури OS X, яку я спочатку вибрав під час роботи програми Assistant Setup.
Ще одне оновлення: Ага! Здається, є ще один plistфайл, з якого ми зможемо скопіювати налаштування.
$ defaults read ~/Library/Preferences/ByHost/com.apple.HIToolbox.*.plist
{
AppleCurrentKeyboardLayoutInputSourceID = "org.unknown.keylayout.QWERTY";
AppleDateResID = {
smRoman = 2;
};
AppleEnabledInputSources = (
{
InputSourceKind = "Keyboard Layout";
"KeyboardLayout ID" = 26;
"KeyboardLayout Name" = Dutch;
},
{
InputSourceKind = "Keyboard Layout";
"KeyboardLayout ID" = 1337;
"KeyboardLayout Name" = QWERTY;
},
{
"Bundle ID" = "com.apple.CharacterPaletteIM";
InputSourceKind = "Non Keyboard Input Method";
},
{
"Bundle ID" = "com.apple.KeyboardViewer";
InputSourceKind = "Non Keyboard Input Method";
},
{
"Bundle ID" = "com.apple.inputmethod.ironwood";
InputSourceKind = "Non Keyboard Input Method";
}
);
AppleGlobalTextInputProperties = {
TextInputGlobalPropertyPerContextInput = 0;
};
AppleInputSourceHistory = (
{
InputSourceKind = "Keyboard Layout";
"KeyboardLayout ID" = 1337;
"KeyboardLayout Name" = QWERTY;
},
{
InputSourceKind = "Keyboard Layout";
"KeyboardLayout ID" = 26;
"KeyboardLayout Name" = Dutch;
}
);
AppleNumberResID = {
smRoman = 2;
};
AppleSelectedInputSources = (
{
InputSourceKind = "Keyboard Layout";
"KeyboardLayout ID" = 1337;
"KeyboardLayout Name" = QWERTY;
},
{
"Bundle ID" = "com.apple.inputmethod.ironwood";
InputSourceKind = "Non Keyboard Input Method";
}
);
AppleTimeResID = {
smRoman = 2;
};
}
Як ви бачите ( AppleCurrentKeyboardLayoutInputSourceID), мабуть, власні розкладки клавіатури отримують такі значення, як "org.unknown.keylayout.FOO"де FOOназва найменування клавіатури (як зазначено у .keylayoutфайлі).
Отже, спробуємо встановити всі значення для нашої власної розкладки клавіатури, названої QWERTYта з ідентифікатором 1337(вказаним у .keylayoutфайлі):
sudo defaults write /Library/Preferences/ByHost/com.apple.HIToolbox.plist AppleCurrentKeyboardLayoutInputSourceID -string "org.unknown.keylayout.QWERTY"
На жаль, це, здається, не працює.
Оновлення: @Lri виявив надійний метод - дивіться його відповідь.