Как удалить или отключить раскладку клавиатуры по умолчанию?

17

Можно ли удалить или отключить одну из стандартных раскладок клавиатуры OS X Lion?

Я использую пользовательскую раскладку клавиатуры, и теперь, когда мне удалось установить ее в качестве общесистемной раскладки клавиатуры по умолчанию , я хотел бы иметь возможность снять или удалить встроенную раскладку клавиатуры «США», которая поставляется с ОС X. Вот скриншот - обратите внимание, что флажок отключен:

Скриншот

В OS X 10.9 эта панель настроек была переработана, но все равно нет способа «удалить» встроенную «американскую» раскладку клавиатуры:

Скриншот

Так как я никогда не использую раскладку клавиатуры США, я бы хотел избавиться от нее, то есть удалить ее из меню ввода в строке меню. Как я могу это сделать?


Обновление: ответ Даниэля на самом деле не отвечает на этот вопрос, но он предлагает некоторую ценную информацию относительно этой проблемы:

Для Mac OS X требуется, по крайней мере, одна раскладка клавиатуры, которую система распознает как раскладку «латинские символы».

Если предположить, что это точная информация (спасибо, Даниэль!), Вопрос можно перефразировать следующим образом:

Как заставить OS X считать пользовательскую клавиатуру раскладкой символов латинского алфавита?


Обновление: я только что столкнулся с чем-то, что могло бы помочь.

Матиас Биненс
источник
1
Я не думаю, что "латынь" достаточно. В Ukelele это легко сделать, установив для ID клавиатуры значение Roman. Я подозреваю, что ваша раскладка также должна быть частью AppleKeyboardLayouts.bundle в раскладках системы / библиотеки / клавиатуры.
Том Гевеке

Ответы:

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 и ранее). Вы можете конвертировать plist в XML с помощью plutil -convert xml1.
  3. Удалите источник ввода или источники ввода, которые вы хотите отключить, из AppleEnabledInputSourcesсловаря. Если есть AppleDefaultAsciiInputSourceключ, удалите его.
  4. Начать сначала.
LRI
источник
1
Ага, похоже, это работает, если вы перезагружаете компьютер, а не просто выходите из системы и снова входите (шаг 4). Благодарность! Не могли бы вы опубликовать новый ответ со ссылкой на ваш ресурс, чтобы получить вознаграждение?
Матиас Биненс
1
@MathiasBynens Я отредактировал ответ и мой сайт. Когда я снова попробовал второй метод, мне также пришлось перезапустить, чтобы применить изменения.
Lri
4
Работает нормально в OS X 10.9, если вы перезагрузите компьютер. Однако мне пришлось также удалить временную компоновку из файла plist и перезагрузить ее с помощью 'sudo reboot', в противном случае временная компоновка была добавлена ​​обратно при обычной перезагрузке.
Безымянный_1
2
@Lri 10.9 Мне пришлось удалить: AppleEnabledInputSources: 0 (старый элемент макета по умолчанию) и: AppleInputSourceHistory: словарь (используя PlistBuddy). Нет перезагрузки, но необходим только выход из системы.
RolKau
1
Это не работает на Йосемити для меня. Всякий раз, когда я изменяю файл в 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].

Для некоторых предложений по комплектации, а .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свойства относятся к ID и имени в начале .keylayoutфайла.

Как видите, по- defaults read /Library/Preferences/com.apple.HIToolbox.plist AppleCurrentKeyboardLayoutInputSourceIDпрежнему возвращает строку "com.apple.keylayout.Dutch". Есть ли где-нибудь список доступных com.apple.keylayoutзначений? Можно ли получить такое значение для пользовательской раскладки клавиатуры? Потому что в этом случае мы могли бы просто переопределить свойство.

Кроме того AppleEnabledInputSources, свойства AppleInputSourceHistory, и, AppleSelectedInputSourcesкажется, игнорируют пользовательскую раскладку клавиатуры, поскольку их значения соответствуют встроенной раскладке клавиатуры OS X, которую я первоначально выбрал при запуске Setup Assistant.


Еще одно обновление: ага! Похоже, есть еще один 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.

Теперь вам, вероятно, нужно выйти из системы или перезагрузить компьютер, чтобы сделать этот финал. Я все равно должен был перезагрузиться для какого-то обновления, чтобы мне это удалось. Теперь я радостно печатаю в Нео с мучительной ледниковой скоростью, но ни одного QWERTZ не видно!

Бомбы
источник
0

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

Том Гевеке
источник
0

Вы можете использовать Ukelele, чтобы пометить ваш использованный макет как тот, который использует латиницу. Экспортируйте как пакет, установите, и тогда вы сможете удалить американский.

Александр Г
источник
-1

Это можно сделать легко. Сначала измените свой пользовательский макет (используйте строку меню «Меню ввода»), затем отмените выбор американского макета.

shpokas
источник
Моя пользовательская раскладка сейчас используется. Как уже упоминалось в вопросе, я больше не использую раскладку клавиатуры США.
Матиас Биненс
Я живу без американской раскладки клавиатуры, и у меня не было проблем с ее отменой. Другие настройки, которые у меня есть, не по умолчанию, не за пределами США и языка.
Шпокас
Можете ли вы отменить выбор раскладки клавиатуры, которую вы выбрали при первоначальной настройке Mac?
Матиас Биненс
Да, я могу, если я также изменю регион.
Шпокас
Видишь, в этом проблема. В OS X всегда есть одна из встроенных раскладок клавиатуры, которую вы не можете удалить или отключить.
Матиас Биненс