Як видалити або вимкнути розкладку клавіатури за замовчуванням?


17

Чи можливо видалити або вимкнути одну з макетів клавіатури OS X Lion за замовчуванням?

Я використовую власну розкладку клавіатури, і тепер, коли мені вдалося встановити її як загальносистемну розкладку клавіатури за замовчуванням , я хотів би мати змогу зняти прапорці або видалити вбудовану розкладку клавіатури "США", що постачається з ОС X. Ось знімок екрана - зауважте, що прапорець відключений:

Знімок екрана

В OS X 10.9 цю панель уподобань було перероблено, але все ще немає способу "видалити" вбудовану розкладку клавіатури "US":

Знімок екрана

Оскільки я ніколи не використовую американську розкладку клавіатури, я хотів би позбутися її, тобто видалити її з меню введення на панелі меню. Як я можу це зробити?


Оновлення: відповідь Даніеля насправді не дає відповіді на це запитання, але вона містить корисну інформацію щодо цієї проблеми:

Mac OS X, схоже, вимагає принаймні однієї розкладки клавіатури, яку система розпізнає як макет "латинських символів" для вибору.

Якщо припустити, що це точна інформація (спасибі, Даніеле!), Питання можна перефразувати наступним чином:

Як змусити OS X вважати користувацьку клавіатуру латинським макетом символів?


Оновлення: я щойно натрапив на щось, що може допомогти.


1
Я не вважаю, що "латиниця" є достатньою. Це легко досягти в Ukelele, встановивши ідентифікатор клавіатури на Роман. Я підозрюю, що ваш макет також повинен бути частиною AppleKeyboardLayouts.bundle в макетів системи / бібліотеки / клавіатури.
Том Gewecke

Відповіді:


21
  1. Увімкніть джерело введення, яке не подобається вашому розкладу фізичної клавіатури із системних налаштувань (я використав афганські Дарі).
  2. Біжи f=~/Library/Preferences/ByHost/com.apple.HIToolbox*.plist; plutil -convert xml1 $f; open $f -e.
  3. Видаліть інші джерела введення, крім тимчасово увімкненого розкладки клавіатури та власного розкладки клавіатури.
  4. Вийдіть із системи та увійдіть назад.
  5. Видаліть тимчасово увімкнений розкладку клавіатури зі списку властивостей.
  6. Вийдіть із системи та увійдіть назад.

Редагувати: здається, що вищевказаний метод припинив роботу в 10.9. Це працювало в 10,9 або 10,8, хоча:

  1. Змініть поточне джерело вводу на вашу власну розкладку клавіатури.
  2. Відкрити ~/Library/Preferences/com.apple.HIToolbox.plist(в 10,9) або ~/Library/Preferences/ByHost/com.apple.HIToolbox.*.plist(в 10,8 і раніше). Ви можете перетворити пліст в XML за допомогою plutil -convert xml1.
  3. Видаліть із AppleEnabledInputSourcesсловника джерело введення або джерела введення, які ви хочете відключити . Якщо AppleDefaultAsciiInputSourceключ є, вийміть його.
  4. Перезапустити.

1
Ага, це, здається, спрацює, якщо перезапустити комп’ютер, а не просто вийти з системи та повернутися назад (крок 4). Спасибі! Ви б не хотіли розмістити нову відповідь із посиланням на ваш ресурс, щоб ви могли отримати виграш?
Mathias Bynens

1
@MathiasBynens Я відредагував відповідь і свій веб-сайт. Коли я знову спробував другий метод, мені також потрібно було перезапустити, щоб застосувати зміни.
Лрі

4
Добре працює в ОС X 10.9, якщо перезавантажити комп’ютер. Однак мені довелося видалити також тимчасовий макет із файлу plist та перезавантажити, використовуючи 'sudo reboot', інакше тимчасовий макет був доданий назад при звичайному перезавантаженні.
Без імені_1

2
@Lri 10.9 мені довелося видалити: AppleEnabledInputSources: 0 (старий елемент макета за замовчуванням) та словник: AppleInputSourceHistory: (використовуючи PlistBuddy). Не потрібно перезавантажувати, а лише виходити з системи.
RolKau

1
Це не працює для Yosemite для мене. Щоразу, коли я змінюю файл у Xcode, він просто відновлюється через кілька секунд. Хтось може пояснити, як ви це зробили саме?
Симон Перепелиця

7

Схоже, ви не можете робити те, що хочете, без ще нерозкритого злому в системі . Mac OS X, схоже, вимагає хоча б однієї розкладки клавіатури, яку система розпізнає як макет "латинських символів" для вибору. Це запобігає неможливості введення пароля на екрані входу тощо. Якщо ви вибрали французьку, канадську чи іншу розкладку клавіатури, яку система розпізнає як латинські символи, ви можете скасувати вибір макета США.

Ваша проблема полягає в тому, що ваша власна розкладка, хоча містить латинські символи, не розпізнається системою як латинська розкладка клавіатури, і тому не може бути єдиною обраною розкладкою клавіатури. Дивіться це запитання (на жаль, не вистачає чудової відповіді) для отримання додаткової інформації.

Зауважте, що чудова відповідь на це питання відповіла б і на ваше запитання. На жаль, моя відповідь тут лише уточнює, в чому проблема, але я не маю для вас покрокового рішення. Хоча такий злом може бути можливим, я не бачу доказів того, що хтось придумав, як переконати Mac OS X у тому, що певна спеціальна клавіатура безпечно використовувати як єдину вибираючу клавіатуру.


@Lri Я підозрюю, що ти прав, але не маю апаратури, щоб це перевірити. Можливо, хтось із читачів цього сайту може?
Даниїл

7

Для повноти я подав це як помилку № 11137961 в Apple, і це відповідь, яку я отримав:

Ідентифікатор помилки: 11137961
Назва помилки: дозволити вимкнути розкладку клавіатури за замовчуванням (вбудовану) під час використання користувацької


Інженерія встановила, що це питання поводиться так, як було призначено, виходячи з наступної інформації:

Якщо проблема полягає лише в визнанні розкладки клавіатури як ASCII-сумісною, найпростіше було б "зв’язати" ваш .keylayout, тоді ваш Info.plist може містити словник "KLInfo_", який додатково описує його, наприклад:

 <key>TISIntendedLanguage</key>
 <string>en</string>   # BCP 47 language string

Мені потрібно трохи більше розібратися в цьому, але схоже, що TIS просканує вихід розкладки клавіатури, щоб створити USet і створити початкове уявлення про активність, чи пройде він наступний мінімальний тест:

 uset_containsRange(uSet, 0x0020, 0x0021) && uset_containsRange(uSet, 0x002C, 0x0039) &&
 uset_containsRange(uSet, 0x003F, 0x005A) && uset_containsRange(uSet, 0x0061, 0x007A);

TIS також вивчить примірний набір для вказаної вище локалі та вимагає в діапазоні добрий десяток символів [a-z].

Деякі пропозиції щодо комплектування A .keylayoutтакож див TextInputSources.h.

Якщо це все-таки проблема, або у вас є питання щодо вирішення цієї проблеми, будь ласка, оновіть свій звіт про помилку з цією інформацією.

Зараз ми закриваємо цей звіт про помилку.


1
Перевірено: мій макет відповідає цим критеріям, але він не визнається можливим макетом за замовчуванням. Тож їхні інженери не надали повної інформації або дали неправдиву інформацію, здається.
Без імені_1

1
@DmitryDulepov Можна використовувати його як макет за замовчуванням, але кнопка для видалення іншого все одно не буде активована; вам доведеться це зробити вручну (дивіться мій коментар до відповіді
Лрі

@RolKau, так, але пізніше є інші проблеми. Якщо у вас є декілька макетів, новий спеціальний макет не буде доступний у деяких додатках. Наприклад, ви не зможете перейти до нього на панелі пошуку AppStore. Принаймні, я не міг.
Без імені_1

2

Ось ще одна ідея: Кілька років тому пакет (и) для макетів клавіатури Apple було набагато простіше редагувати, і ця проблема, здається, вирішена:

http://hintsforums.macworld.com/archive/index.php/t-71629.html

Можливо, все-таки можна було б використовувати старий редагований пакет, якщо ви можете отримати його зі старої системи, у поточній ОС.


1

Я просто натрапив на щось, що може допомогти. Ось:

$ 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 виявив надійний метод - дивіться його відповідь.


1

Відповідь Apple на мій звіт про помилку, в якому я просив дати можливість видалити макет клавіатури за замовчуванням системи, якщо інша вибрана через Системні налаштування:

Інженерія визначила, що Apple не має вирішувати це питання.

Припускаючи , що ця схему користувальницької клавіатури в комплекті ( .keylayoutзнаходиться всередині пучка , як foo.bundle/Contents/Resources/foo.keylayout), то це може бути настільки ж просто , як вставки в Info.plist«s KLInfo_ словник:

<key>KLInfo_Qwerty</key>
<dict>
  <key>TISInputSourceID</key>
  <string>com.imgur.stack.keyboardlayout.Qwerty</string>
  <key>TISIntendedLanguage</key>  
  <string>en</string> 
</dict>

Якщо цей макет потрібен для всієї системи (тобто, включаючи введення пароля), він може бути встановлений /Library/Keyboard Layouts/, а не в тому самому місці в ~/Library/.

Оновіть звіт про помилку, щоб повідомити нам, чи це все ще проблема для вас.

Якщо у вас є питання щодо вирішення цієї проблеми, оновіть з ними свій звіт про помилки.

Будь ласка, не забудьте регулярно перевіряти нові продукти Apple на наявність оновлень, які можуть вплинути на цю проблему. Ще раз дякую, що знайшли час для подання помилок. Ми щиро цінуємо ваш внесок.


1

Щойно я успішно видалив макет за замовчуванням на High Sierra, використовуючи наступний метод:

  1. Перейдіть до своєї Library/Preferencesпапки.
  2. Відкрийте файл com.apple.HIToolbox.plistфайлу, подвійним клацанням по ньому або за допомогою openкомандного рядка. Це зробить XCode спливом і, можливо, захоче встановити додаткові компоненти.
  3. Повторіть крок 2, поки XCode нарешті не покаже структуру файлу.
  4. Знайдіть AppleEnabledInputSourcesвузол і розгорніть його.
  5. Видаліть запис для макета, який ви хочете видалити.
  6. Збережіть файл та закрийте XCode.

Тепер вам, ймовірно, потрібно вийти з системи або перезавантажити, щоб зробити це остаточним. Мені довелося перезавантажити все-таки деяке оновлення, так що це зробило для мене трюк. Тепер я щасливо набираю у Neo з мучною льодовиковою швидкістю, але жодного QWERTZ не видно!


0

Ось ідея: переконавшись, що ідентифікатор клавіатури вашого власного макета встановлений на Roman, зробіть власну AppleKeyboardLayouts.bundle, яка містить лише цей макет, і замініть цю на ту, що постачається з ОС. (Я сам не знаю, що стосується створення .bundle)


0

Ви можете використовувати Ukelele, щоб позначити використаний макет як такий, що використовує латинське письмо. Експортуйте як пакет, встановіть, і тоді ви зможете видалити американський.


-1

Це можна зробити легко. Спочатку перейдіть на ваш власний макет (використовуйте рядок меню Меню введення), а потім зніміть вибір макета США.


Мій спеціальний макет - той, який зараз використовується. Як згадувалося в запитанні, я більше не використовую розкладку клавіатури США.
Mathias Bynens

Я живу без розкладки клавіатури США і не мав жодних проблем скасувати вибір. Інші налаштування, які я маю, - це не за замовчуванням, не-американський регіон та мова.
шпока

Чи можете ви скасувати вибір розкладки клавіатури, яку ви вибрали під час налаштування Mac?
Mathias Bynens

Так, я можу, якщо я також зміню регіон.
шпока

Бачите, у цьому проблема. Завжди є одна з вбудованих макетів клавіатури OS X, яку ви не можете видалити або відключити.
Mathias Bynens
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.