Como remover ou desativar um layout de teclado padrão?


16

É possível remover ou desativar um dos layouts de teclado padrão do OS X Lion?

Estou usando um layout de teclado personalizado e agora que consegui defini-lo como o layout de teclado padrão em todo o sistema , gostaria de poder desmarcar ou remover o layout de teclado interno “EUA” que acompanha o sistema operacional X. Aqui está uma captura de tela - observe que a caixa de seleção está desativada:

Captura de tela

No OS X 10.9, esse painel de preferências foi redesenhado, mas ainda não há como "remover" o layout de teclado interno "EUA":

Captura de tela

Como nunca uso o layout do teclado americano, eu adoraria me livrar dele, ou seja, removê-lo do menu Entrada na barra de menus. Como posso fazer isso?


Atualização: A resposta de Daniel realmente não responde a essa pergunta, mas oferece algumas informações valiosas sobre esse problema:

O Mac OS X parece exigir pelo menos um layout de teclado que o sistema reconheça como um layout de "caracteres latinos" para ser selecionado.

Supondo que essas informações sejam precisas (obrigado, Daniel!), A pergunta pode ser reformulada da seguinte forma:

Como fazer com que o OS X considere um teclado personalizado como um layout de caracteres latinos?


Atualização: acabei de encontrar algo que pode ajudar.


1
Eu não acho que "latim" seja suficiente. Isso é facilmente realizado em Ukelele, definindo o ID do teclado como romano. Eu suspeito que seu layout também deve fazer parte do AppleKeyboardLayouts.bundle nos layouts de sistema / biblioteca / teclado.
Tom Gewecke

Respostas:


20
  1. Habilite uma fonte de entrada que não seja como o layout físico do teclado em System Preferences (usei o Afghan Dari).
  2. Corra f=~/Library/Preferences/ByHost/com.apple.HIToolbox*.plist; plutil -convert xml1 $f; open $f -e.
  3. Remova outras fontes de entrada, exceto o layout do teclado ativado temporariamente e o layout do teclado personalizado.
  4. Saia e entre novamente.
  5. Remova o layout do teclado ativado temporariamente da lista de propriedades.
  6. Saia e entre novamente.

Edit: o método acima parece ter parado de funcionar no 10.9. Isso funcionou tanto em 10.9 quanto em 10.8:

  1. Altere a fonte de entrada atual para seu layout de teclado personalizado.
  2. Aberto ~/Library/Preferences/com.apple.HIToolbox.plist(em 10.9) ou ~/Library/Preferences/ByHost/com.apple.HIToolbox.*.plist(em 10.8 e versões anteriores). Você pode converter o plist para XML com plutil -convert xml1.
  3. Remova a fonte de entrada ou as fontes de entrada que deseja desativar do AppleEnabledInputSourcesdicionário. Se houver uma AppleDefaultAsciiInputSourcechave, remova-a.
  4. Reiniciar.

1
Aha, parece funcionar se você reiniciar o computador em vez de apenas sair e voltar (etapa 4). Obrigado! Você se importaria de postar uma nova resposta com um link para o seu recurso para obter a recompensa?
Mathias Bynens

1
@MathiasBynens Editei a resposta e meu site. Quando tentei o segundo método novamente, também precisei reiniciar para aplicar as alterações.
Lri

4
Funciona bem no OS X 10.9 se você reiniciar o computador. No entanto, tive que remover também o layout temporário do arquivo plist e reiniciar usando 'sudo reboot', caso contrário, o layout temporário foi adicionado novamente à reinicialização normal.
Unnamed_1 5/11/2013

2
@Lri No 10.9, tive que excluir: AppleEnabledInputSources: 0 (o antigo item de layout padrão) e o: AppleInputSourceHistory: dictionary (usando PlistBuddy). Nenhuma reinicialização, mas apenas logoff necessário.
RolKau

1
Não funciona em Yosemite para mim. Sempre que altero o arquivo no Xcode, ele é restaurado após alguns segundos. Alguém pode explicar como você fez exatamente?
precisa

7

Parece que você não pode fazer o que deseja sem algum hack ainda não descoberto no sistema . O Mac OS X parece exigir pelo menos um layout de teclado que o sistema reconheça como um layout de "caracteres latinos" para ser selecionado. Isso evita que você não consiga inserir sua senha na tela de login, etc. Se você selecionou francês, canadense ou outro layout de teclado que o sistema reconheça como caracteres latinos, você pode desmarcar o layout dos EUA.

Seu problema é que seu layout personalizado, embora contenha caracteres latinos, não é reconhecido pelo sistema como um layout de teclado latino e, portanto, não pode ser o único layout de teclado selecionado. Veja esta pergunta (infelizmente sem uma ótima resposta) para obter mais informações.

Observe que uma ótima resposta para essa pergunta também responderia à sua pergunta. Infelizmente, minha resposta aqui apenas esclarece qual é o problema, mas não tenho uma solução passo a passo para você. Embora tal invasão possa ser possível, não vejo nenhuma evidência de que alguém tenha descoberto como convencer o Mac OS X de que um teclado personalizado específico é seguro para uso como o único teclado selecionável.


@Lri Eu suspeito que você esteja correto, mas não tem o hardware para testar isso. Talvez haja um leitor deste site que possa?
Daniel

7

Por uma questão de exaustividade, arquivei isso como ID de bug # 11137961 na Apple, e esta é a resposta que recebi:

ID do bug: 11137961
Título do bug: Permitir desativar os layouts de teclado padrão (integrados) ao usar um personalizado


A Engenharia determinou que esse problema se comporta conforme o planejado, com base nas seguintes informações:

Se o problema estiver apenas reconhecendo o layout do teclado como compatível com ASCII, o mais fácil seria "agrupar" o seu .keylayout, então o seu Info.plist pode conter um dicionário "KLInfo_" que o descreve melhor, como:

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

Eu precisaria examinar isso um pouco mais, mas parece que o TIS varrerá a saída do layout do teclado para produzir um USet e produzir uma idéia inicial de aspiração, se passa no seguinte teste mínimo:

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

O TIS também examinará o conjunto de exemplos para o local indicado acima e exigirá uma boa dúzia de caracteres no intervalo [a-z].

Para algumas sugestões sobre o pacote a .keylayout, consulte também TextInputSources.h.

Se isso ainda for um problema ou você tiver dúvidas sobre a resolução desse problema, atualize seu relatório de bug com essas informações.

Agora estamos fechando este relatório de bug.


1
Verificado: meu layout atende a esses critérios, mas não é reconhecido como um possível layout padrão. Portanto, seus engenheiros não forneceram a informação completa ou pareceram incorretas.
Unnamed_1 5/11/2013

1
@DmitryDulepov É possível usá-lo como o layout padrão, mas o botão para remover o outro ainda não será ativado; você teria que fazer isso manualmente (ver o meu comentário à resposta de Lri
RolKau

@RolKau, sim, mas existem outros problemas mais tarde. Se você tiver mais de um layout, o novo layout personalizado não estará disponível em alguns aplicativos. Por exemplo, você não poderá mudar para ele na barra de pesquisa da AppStore. Pelo menos eu não pude.
Unnamed_1


1

Acabei de encontrar algo que pode ajudar. Aqui vai:

$ 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;
        }
    );
}

Este é o meu sistema, onde meu layout de teclado personalizado (chamado “QWERTY”) é o padrão. Observe que as propriedades KeyboardLayout Namee se KeyboardLayout IDreferem ao ID e nome no início do .keylayoutarquivo.

Como você pode ver, defaults read /Library/Preferences/com.apple.HIToolbox.plist AppleCurrentKeyboardLayoutInputSourceIDainda retorna a string "com.apple.keylayout.Dutch". Existe uma lista em algum lugar dos com.apple.keylayoutvalores disponíveis ? É possível obter esse valor para um layout de teclado personalizado? Porque nesse caso, poderíamos simplesmente substituir a propriedade.

Além disso, as AppleEnabledInputSources, AppleInputSourceHistorye AppleSelectedInputSourcespropriedades de todos parecem ignorar o layout de teclado personalizado, como seus valores correspondem ao layout de teclado OS X nativa I originalmente selecionado ao executar a instalação do assistente.


Outra atualização: Aha! Parece que há outro plistarquivo do qual podemos copiar as configurações.

$ 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;
    };
}

Como você pode ver ( AppleCurrentKeyboardLayoutInputSourceID), layouts de teclado aparentemente personalizados obtêm valores como "org.unknown.keylayout.FOO"onde FOOestá o nome do layout do teclado (conforme especificado no .keylayoutarquivo).

Então, vamos tentar definir todos os valores para nosso layout de teclado personalizado, nomeado QWERTYe com ID 1337(especificado no .keylayoutarquivo):

sudo defaults write /Library/Preferences/ByHost/com.apple.HIToolbox.plist AppleCurrentKeyboardLayoutInputSourceID -string "org.unknown.keylayout.QWERTY"

Infelizmente, isso não parece funcionar.

Atualização: @Lri descobriu um método confiável - veja sua resposta.


1

Resposta da Apple ao meu relatório de erros, no qual eu estava pedindo para tornar possível remover o layout de teclado padrão do sistema se outro for selecionado através das Preferências do Sistema:

A Engenharia determinou que este não é um problema para a Apple resolver.

Assumindo que este layout de teclado personalizado é empacotado ( .keylayoutestá dentro de um pacote como foo.bundle/Contents/Resources/foo.keylayout), então isso poderia ser tão fácil como inserir no Info.plist's KLInfo_ dicionário:

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

Se esse layout for necessário em todo o sistema (por exemplo, incluindo entrada de senha), ele poderá ser instalado /Library/Keyboard Layouts/, e não no mesmo local ~/Library/.

Atualize seu relatório de bug para nos informar se isso ainda é um problema para você.

Se você tiver dúvidas sobre a resolução desse problema, atualize seu relatório de erros com eles.

Certifique-se de verificar regularmente novos produtos Apple para obter atualizações que possam afetar esse problema. Mais uma vez, obrigado por reservar um tempo para enviar bugs. Agradecemos sinceramente a sua opinião.


1

Acabei de obter êxito ao remover o layout padrão no High Sierra usando o seguinte método:

  1. Navegue para a sua Library/Preferencespasta.
  2. Abra o arquivo com.apple.HIToolbox.plist, clicando duas vezes nele ou usando openna linha de comando. Isso fará com que o XCode apareça e talvez você queira instalar componentes adicionais.
  3. Repita a etapa 2 até o XCode finalmente mostrar a estrutura do arquivo.
  4. Localize o AppleEnabledInputSourcesnó e desdobre-o.
  5. Remova a entrada para o layout que você deseja remover.
  6. Salve o arquivo e feche o XCode.

Agora você provavelmente precisará sair ou reiniciar para finalizar. Eu tive que reiniciar de qualquer maneira para alguma atualização, o que fez o truque para mim. Agora estou feliz digitando Neo a uma velocidade glacialmente agonizante, mas nem um único QWERTZ está à vista!


0

Aqui está uma idéia: Depois de verificar se o ID do teclado do seu layout personalizado está definido como Roman, crie um AppleKeyboardLayouts.bundle personalizado que contenha apenas esse layout e substitua-o pelo que acompanha o sistema operacional. (Não sei o que está envolvido na criação de um pacote.)


0

Você pode usar o Ukelele para marcar seu layout usado como um que usa script latino. Exporte como um pacote, instale e, em seguida, você poderá excluir o pacote dos EUA.


-1

Isso pode ser feito facilmente. Primeiro mude para o layout personalizado (use o menu Entrada da barra de menus) e desmarque o layout nos EUA.


Meu layout personalizado é o atualmente em uso. Como mencionado na pergunta, não uso mais o layout do teclado dos EUA.
Mathias Bynens 21/03/12

Eu vivo sem o layout do teclado dos EUA e não tive nenhum problema para desmarcá-lo. As outras personalizações que tenho são região e idioma não padrão, fora dos EUA.
shpokas

Você pode desmarcar o layout do teclado escolhido ao configurar o Mac inicialmente?
Mathias Bynens 21/03

Sim, eu posso se mudar de região também.
21412 shpokas

Veja, esse é o problema. Sempre há um dos layouts de teclado embutidos no OS X que você não pode excluir ou desativar.
Mathias Bynens 21/03
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.