Come rimuovere o disabilitare un layout di tastiera predefinito?

15

È possibile rimuovere o disabilitare uno dei layout di tastiera predefiniti di OS X Lion?

Uso un layout di tastiera personalizzato e ora che sono riuscito a impostarlo come layout di tastiera predefinito a livello di sistema , vorrei poter deselezionare o rimuovere il layout di tastiera "US" incorporato fornito con OS X. Ecco uno screenshot: tieni presente che la casella di controllo è disabilitata:

InOSX10.9,questopannellodellepreferenzeèstatoridisegnato,manonèancorapossibile"rimuovere" il layout di tastiera "Stati Uniti" incorporato:

PoichénonutilizzomaiillayoutditastieradegliStatiUniti,mipiacerebbeliberarmene,ovverorimuoverlodalmenuInputnellabarradeimenu.Comepossofarequesto?

Aggiornamento: La risposta di Daniel in realtà non risponde a questa domanda, ma offre alcune informazioni preziose su questo problema:

Mac OS X seems to require at least one keyboard layout that the system recognizes as a “Latin character” layout to be selected.

Supponendo che si tratti di informazioni accurate (grazie, Daniel!), la domanda potrebbe essere riformulata come segue:

How to make OS X consider a custom keyboard to be a Latin character layout?

Aggiornamento: Mi sono imbattuto in qualcosa che potrebbe essere di aiuto.

    
posta Mathias Bynens 21.03.2012 - 14:00
fonte

10 risposte

19
  1. Abilita una sorgente di input che non è come il layout della tua tastiera fisica da Preferenze di Sistema (ho usato Afghan Dari).
  2. Esegui f=~/Library/Preferences/ByHost/com.apple.HIToolbox*.plist; plutil -convert xml1 $f; open $f -e .
  3. Rimuovi altre sorgenti di input tranne il layout di tastiera temporaneamente abilitato e il layout personalizzato della tastiera.
  4. Esci e torna indietro
  5. Rimuovi il layout di tastiera temporaneamente abilitato dall'elenco delle proprietà.
  6. Esci e torna indietro

Modifica: il metodo sopra sembra aver smesso di funzionare in 10.9. Questo ha funzionato sia in 10.9 che in 10.8:

  1. Modifica la sorgente di input corrente sul layout di tastiera personalizzato.
  2. Apri ~/Library/Preferences/com.apple.HIToolbox.plist (in 10.9) o ~/Library/Preferences/ByHost/com.apple.HIToolbox.*.plist (in 10.8 e versioni precedenti). Puoi convertire il plist in XML con plutil -convert xml1 .
  3. Rimuovi la sorgente di input o le sorgenti di input che desideri disabilitare dal dizionario AppleEnabledInputSources . Se è presente una chiave AppleDefaultAsciiInputSource , rimuoverla.
  4. Riavvia.
risposta data 12.08.2012 - 22:09
fonte
7

Sembra che non puoi fare ciò che vuoi senza un qualche hack ancora sconosciuto al sistema . Mac OS X sembra richiedere almeno un layout di tastiera che il sistema riconosce come layout di "carattere latino" da selezionare. Ciò impedisce al tuo di non essere in grado di inserire la tua password nella schermata di accesso, ecc. Se hai selezionato il francese, il canadese o un altro layout di tastiera che il sistema riconosce come caratteri latini, puoi deselezionare il layout americano.

Il tuo problema è che il tuo layout personalizzato, pur contenendo caratteri latini, non è riconosciuto dal sistema come un layout di tastiera latina e quindi non può essere l'unico layout di tastiera selezionato. Vedi questa domanda (purtroppo senza una buona risposta) per ulteriori informazioni.

Nota che un'ottima risposta a questa domanda potrebbe anche rispondere alla tua domanda. Ahimè, la mia risposta qui chiarisce solo qual è il problema, ma non ho una soluzione passo passo per voi. Anche se un tale attacco può essere possibile, non vedo alcuna prova che qualcuno abbia capito come convincere Mac OS X che una particolare tastiera personalizzata è sicura da usare come unica tastiera selezionabile.

    
risposta data 21.03.2012 - 14:12
fonte
6

Per motivi di completezza, ho archiviato questo come ID bug # 11137961 con Apple, e questa è la risposta che ho ricevuto:

Bug ID #: 11137961
Bug Title: Allow disabling default (built-in) keyboard layouts when using a custom one


Engineering has determined that this issue behaves as intended based on the following information:

If the issue is just getting your keyboard layout recognized as ASCII-capable, the easiest would be to "bundle" your .keylayout, then your Info.plist can contain a "KLInfo_" dictionary that further describes it, like:

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

I'd need to look into this a bit more, but it looks like TIS will scan the keyboard layout output to produce a USet and produce an initial idea of ascii-ness by whether it passes the following minimal test:

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

TIS will also examine the exemplar set for the above indicated locale and require a good dozen or so characters in the range [a-z].

For some suggestions on bundling a .keylayout, also see TextInputSources.h.

If this is still an issue, or you have questions regarding the resolution of this issue, please update your bug report with that information.

We are now closing this bug report.

    
risposta data 04.04.2013 - 23:29
fonte
2

Ecco un'altra idea: alcuni anni fa i bundle per Apple Keyboard Layouts erano molto più facili da modificare e questo problema sembra essere stato risolvibile:

link

Forse si potrebbe ancora usare il vecchio pacchetto modificabile, se si poteva ottenere uno da un vecchio sistema, nel sistema operativo corrente.

    
risposta data 30.03.2012 - 01:37
fonte
1

Ho appena trovato qualcosa che potrebbe aiutare. Ecco:

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

Questo è nel mio sistema, dove il mio layout di tastiera personalizzato (denominato "QWERTY") è l'impostazione predefinita. Nota che le proprietà KeyboardLayout Name e KeyboardLayout ID si riferiscono all'ID e al nome all'inizio del file .keylayout .

Come puoi vedere, defaults read /Library/Preferences/com.apple.HIToolbox.plist AppleCurrentKeyboardLayoutInputSourceID restituisce ancora la stringa "com.apple.keylayout.Dutch" . Esiste una lista da qualche parte dei valori di com.apple.keylayout disponibili? È possibile ottenere tale valore per un layout di tastiera personalizzato? In questo caso, potremmo semplicemente ignorare la proprietà.

Inoltre, le proprietà AppleEnabledInputSources , AppleInputSourceHistory e AppleSelectedInputSources sembrano ignorare il layout personalizzato della tastiera, poiché i loro valori corrispondono al layout di tastiera OS X nativo che ho selezionato originariamente durante l'esecuzione di Setup Assistant.

Un altro aggiornamento: Aha! Sembra che ci sia un altro file plist da cui potremmo essere in grado di copiare le impostazioni.

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

Come puoi vedere ( AppleCurrentKeyboardLayoutInputSourceID ), i layout di tastiera apparentemente personalizzati ottengono valori come "org.unknown.keylayout.FOO" dove FOO è il nome del layout della tastiera (come specificato nel file .keylayout ).

Quindi, proviamo ad impostare tutti i valori sul nostro layout di tastiera personalizzato, denominato QWERTY e con ID 1337 (specificato nel file .keylayout ):

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

Purtroppo, questo non sembra funzionare.

Aggiornamento: @Lri ha scoperto un metodo affidabile: vedi la sua risposta.

    
risposta data 11.08.2012 - 17:14
fonte
1

Risposta di Apple al mio bug report, in cui chiedevo di rendere possibile rimuovere il layout di tastiera predefinito del sistema se ne seleziona un altro tramite le Preferenze di Sistema:

Engineering has determined that this is not an issue for Apple to address.

Assuming this custom keyboard layout is bundled (.keylayout is inside a bundle like foo.bundle/Contents/Resources/foo.keylayout), then this could be as easy as inserting into the Info.plist's KLInfo_ dictionary:

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

If this layout is needed system-wide (i.e. including password input) it could be installed in /Library/Keyboard Layouts/, rather than the same location in ~/Library/.

Please update your bug report to let us know whether this is still an issue for you.

If you have questions regarding the resolution of this issue, please update your bug report with them.

Please be sure to regularly check new Apple products for any updates that might affect this issue. Again, thank you for taking the time to submit bugs. We sincerely appreciate your input.

    
risposta data 14.11.2013 - 22:50
fonte
1

Ho appena avuto successo nel rimuovere il layout predefinito su High Sierra usando il seguente metodo:

  1. Vai alla tua cartella Library/Preferences .
  2. Apri il file com.apple.HIToolbox.plist , facendo doppio clic su di esso o utilizzando open sulla riga di comando. Questo farà apparire XCode e potrebbe voler installare componenti aggiuntivi.
  3. Ripeti il passaggio 2 finché XCode mostra definitivamente la struttura del file.
  4. Individua il nodo AppleEnabledInputSources e aprilo.
  5. Rimuovi la voce per il layout che desideri rimuovere.
  6. Salva il file ed esci da XCode.

Ora probabilmente dovrai disconnetterti o riavviare per rendere questo finale. Ho dovuto riavviare comunque per qualche aggiornamento in modo che ha fatto il trucco per me. Ora sto digitando felicemente a Neo con una velocità glaciale agonizzante, ma non è in vista neanche una QWERTZ!

    
risposta data 11.04.2018 - 09:32
fonte
0

Ecco un'idea: dopo esserti assicurato che l'id della tastiera del tuo layout personalizzato sia impostato su Roman, crea un AppleKeyboardLayouts.bundle personalizzato che contenga solo quel layout e sostituiscilo con quello fornito con il SO. (Non so a me stesso cosa sia coinvolto nella creazione di un .bundle)

    
risposta data 28.03.2012 - 17:20
fonte
0

Puoi utilizzare Ukelele per contrassegnare il tuo layout usato come uno che utilizza la scrittura latina. Esporta come pacchetto, installa e potrai eliminare quello statunitense.

    
risposta data 01.07.2017 - 10:27
fonte
-1

Può essere fatto facilmente. Prima modifica il layout personalizzato (usa la barra dei menu Menu di input), quindi deseleziona il layout degli Stati Uniti.

    
risposta data 21.03.2012 - 14:14
fonte

Leggi altre domande sui tag