Come rimuovere o disabilitare un layout di tastiera predefinito?


16

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

Sto usando un layout di tastiera personalizzato e ora che sono riuscito a impostarlo come layout di tastiera predefinito a livello di sistema , mi piacerebbe essere in grado di deselezionare o rimuovere il layout di tastiera "US" incorporato fornito con il sistema operativo X. Ecco uno screenshot: nota che la casella di controllo è disabilitata:

Immagine dello schermo

In OS X 10.9, questo riquadro delle preferenze è stato riprogettato, ma non è ancora possibile "rimuovere" il layout della tastiera "US" incorporato:

Immagine dello schermo

Dal momento che non utilizzo mai il layout della tastiera statunitense, mi piacerebbe liberarmene, ovvero rimuoverlo dal menu Input nella barra dei menu. Come posso fare questo?


Aggiornamento: la risposta di Daniel non risponde davvero a questa domanda, ma offre alcune informazioni preziose su questo problema:

Mac OS X sembra richiedere almeno un layout di tastiera che il sistema riconosce come layout di "carattere latino" per essere selezionato.

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

Come fare in modo che OS X consideri una tastiera personalizzata come un layout di caratteri latini?


Aggiornamento: ho appena trovato qualcosa che potrebbe aiutare.


1
Non penso che il "latino" sia sufficiente. Ciò è facilmente realizzabile in Ukelele impostando l'ID della tastiera su Romano. Ho il sospetto che anche il tuo layout debba far parte di AppleKeyboardLayouts.bundle nei layout di sistema / libreria / tastiera.
Tom Gewecke,

Risposte:


20
  1. Abilita una sorgente di input che non è come il layout della tastiera fisica dalle Preferenze di Sistema (ho usato Afghan Dari).
  2. Corri f=~/Library/Preferences/ByHost/com.apple.HIToolbox*.plist; plutil -convert xml1 $f; open $f -e.
  3. Rimuovi altre fonti di input ad eccezione del layout di tastiera temporaneamente abilitato e del layout di tastiera personalizzato.
  4. Esci e rientra.
  5. Rimuovere il layout di tastiera temporaneamente abilitato dall'elenco delle proprietà.
  6. Esci e rientra.

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

  1. Cambia la sorgente di input corrente nel tuo 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 precedenti). È possibile convertire il plist in XML con plutil -convert xml1.
  3. Rimuovere la fonte di input o le fonti di input che si desidera disabilitare dal AppleEnabledInputSourcesdizionario. Se è presente una AppleDefaultAsciiInputSourcechiave, rimuoverla.
  4. Ricomincia.

1
Aha, sembra funzionare se riavvii il computer invece di disconnetterti e riconnetterti (passaggio 4). Grazie! Ti dispiacerebbe pubblicare una nuova risposta con un link alla tua risorsa in modo da poter ottenere la generosità?
Mathias Bynens,

1
@MathiasBynens Ho modificato la risposta e il mio sito Web. Quando ho provato di nuovo il secondo metodo, ho dovuto anche riavviare per applicare le modifiche.
Lri,

4
Funziona bene in OS X 10.9 se riavvii il computer. Tuttavia, ho dovuto rimuovere anche il layout temporaneo dal file plist e riavviare usando 'sudo reboot', altrimenti il ​​layout temporaneo è stato aggiunto al riavvio normale.
Senza nome_1

2
@Lri Il 10.9 ho dovuto eliminare: AppleEnabledInputSources: 0 (il vecchio elemento di layout predefinito) e il: AppleInputSourceHistory: dizionario (usando PlistBuddy). Nessun riavvio, ma è necessaria solo la disconnessione.
RolKau,

1
Per me non funziona su Yosemite. Ogni volta che cambio il file in Xcode, questo viene ripristinato dopo pochi secondi. Qualcuno può spiegare come hai fatto esattamente?
Simon Perepelitsa,

7

Sembra che non puoi fare quello che vuoi senza qualche hack ancora non scoperto al sistema . Mac OS X sembra richiedere almeno un layout di tastiera che il sistema riconosce come layout di "carattere latino" per essere selezionato. Ciò impedisce di non poter inserire la password nella schermata di accesso, ecc. Se si è selezionato francese, canadese o un altro layout di tastiera che il sistema riconosce come caratteri latini, è possibile deselezionare il layout degli Stati Uniti.

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 manca una grande risposta) per ulteriori informazioni.

Si noti che un'ottima risposta a questa domanda risponderebbe anche alla tua domanda. Purtroppo, la mia risposta qui chiarisce solo qual è il problema, ma non ho una soluzione dettagliata per te. Sebbene un tale hack possa essere possibile, non vedo alcuna prova che qualcuno abbia capito come convincere Mac OS X che una determinata tastiera personalizzata è sicura da usare come unica tastiera selezionabile.


@Lri Sospetto che tu abbia ragione, ma non ho l'hardware per testarlo. Forse c'è un lettore di questo sito che può?
Daniel

7

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

N. ID bug: 11137961
Titolo bug: Consenti la disabilitazione dei layout di tastiera predefiniti (integrati) quando ne usi uno personalizzato


L'ingegneria ha determinato che questo problema si comporta come previsto in base alle seguenti informazioni:

Se il problema consiste nel far riconoscere il layout della tastiera come compatibile con ASCII, il modo più semplice sarebbe "raggruppare" il tuo .keylayout, quindi il tuo Info.plist può contenere un dizionario "KLInfo_" che lo descrive ulteriormente, come:

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

Avrei bisogno di approfondire un po 'di più, ma sembra che TIS scansionerà l'output del layout della tastiera per produrre un USet e produrre un'idea iniziale di asciugatezza indipendentemente dal superamento del seguente test minimo:

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

TIS esaminerà anche il set di esempi per la locale sopra indicata e richiederà una buona dozzina di caratteri nell'intervallo [a-z].

Per alcuni suggerimenti sul raggruppamento di a .keylayout, vedere anche TextInputSources.h.

Se il problema persiste o hai domande sulla risoluzione del problema, aggiorna la segnalazione di bug con tali informazioni.

Stiamo chiudendo questa segnalazione di bug.


1
Selezionato: il mio layout soddisfa questi criteri ma non è riconosciuto come possibile layout predefinito. Quindi i loro ingegneri non hanno fornito le informazioni complete o hanno fornito informazioni errate.
Senza nome_1

1
@DmitryDulepov È possibile usarlo come layout predefinito, ma il pulsante per rimuovere l'altro non sarà ancora attivato; dovresti farlo manualmente (vedi il mio commento alla risposta di
Lri

@RolKau, sì, ma ci sono altri problemi in seguito. Se hai più di un layout, il nuovo layout personalizzato non sarà disponibile in alcune app. Ad esempio, non sarai in grado di passare ad esso nella barra di ricerca dell'AppStore. Almeno, non potevo.
Senza nome_1


1

Ho appena trovato qualcosa che potrebbe aiutare. Ecco qui:

$ 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 è sul mio sistema, dove il mio layout di tastiera personalizzato (chiamato "QWERTY") è l'impostazione predefinita. Si noti che le proprietà KeyboardLayout Namee si KeyboardLayout IDriferiscono all'ID e al nome all'inizio del .keylayoutfile.

Come puoi vedere, defaults read /Library/Preferences/com.apple.HIToolbox.plist AppleCurrentKeyboardLayoutInputSourceIDrestituisce comunque la stringa "com.apple.keylayout.Dutch". C'è un elenco da qualche parte dei com.apple.keylayoutvalori disponibili ? È possibile ottenere un valore simile per un layout di tastiera personalizzato? Perché in quel caso, potremmo semplicemente ignorare la proprietà.

Inoltre, i AppleEnabledInputSources, AppleInputSourceHistorye AppleSelectedInputSourcesle proprietà tutti sembrano ignorare il layout di tastiera personalizzata, come i loro valori corrispondono al layout di tastiera OS X nativo Originariamente ho selezionato durante l'esecuzione Setup Assistant.


Un altro aggiornamento: Aha! Sembra che ci sia un altro plistfile 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 si FOOtrova il nome del layout di tastiera (come specificato nel .keylayoutfile).

Quindi, per provare a impostare tutti i valori sul nostro layout di tastiera personalizzato, denominato QWERTYe con ID 1337(specificato nel .keylayoutfile):

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.


1

La risposta di Apple alla mia segnalazione di bug, in cui chiedevo di rendere possibile la rimozione del layout di tastiera predefinito del sistema se ne viene selezionato un altro tramite Preferenze di Sistema:

Engineering ha determinato che questo non è un problema per Apple.

Assumendo questo layout di tastiera personalizzato è impacchettato ( .keylayoutè all'interno di un fascio simile foo.bundle/Contents/Resources/foo.keylayout), allora questo potrebbe essere semplice come inserire nel Info.plist's KLInfo_ dizionario:

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

Se questo layout è necessario a livello di sistema (ovvero includendo l'inserimento della password), potrebbe essere installato /Library/Keyboard Layouts/, anziché nella stessa posizione ~/Library/.

Ti preghiamo di aggiornare la tua segnalazione di bug per farci sapere se questo è ancora un problema per te.

Se hai domande relative alla risoluzione di questo problema, ti preghiamo di aggiornare la tua segnalazione di bug con loro.

Assicurati di controllare regolarmente i nuovi prodotti Apple per eventuali aggiornamenti che potrebbero influenzare questo problema. Ancora una volta, grazie per aver dedicato del tempo a inviare bug. Apprezziamo sinceramente il tuo contributo.


1

Ho appena avuto successo rimuovendo il layout predefinito su High Sierra utilizzando il seguente metodo:

  1. Passa alla tua Library/Preferencescartella.
  2. Aprire il file com.apple.HIToolbox.plistfile, facendo doppio clic su di esso o utilizzando opendalla riga di comando. Questo farà apparire XCode e potrebbe voler installare componenti aggiuntivi.
  3. Ripeti il ​​passaggio 2 fino a quando XCode mostra finalmente la struttura del file.
  4. Individua il AppleEnabledInputSourcesnodo e aprilo.
  5. Rimuovere la voce per il layout che si desidera rimuovere.
  6. Salvare il file ed uscire 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 scrivendo felicemente in Neo ad una velocità glaciale straziante, ma non è in vista un solo QWERTZ!


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 sistema operativo. (Non conosco me stesso in cosa consiste la creazione di un pacchetto.)


0

Puoi usare Ukelele per contrassegnare il tuo layout usato come uno che usa la scrittura latina. Esporta come pacchetto, installa e sarai in grado di eliminare quello statunitense.


-1

Può essere fatto facilmente. Prima modifica al layout personalizzato (utilizza il menu di input della barra dei menu), quindi deseleziona il layout USA.


Il mio layout personalizzato è quello attualmente in uso. Come accennato nella domanda, non uso più il layout di tastiera statunitense.
Mathias Bynens,

Vivo senza il layout di tastiera degli Stati Uniti e non ho avuto problemi a deselezionarlo. Le altre personalizzazioni che ho sono regione e lingua non predefinite, non statunitensi.
shpokas,

Puoi deselezionare il layout di tastiera che hai scelto durante la configurazione iniziale del Mac?
Mathias Bynens,

Sì, posso farlo anche se cambio regione.
shpokas,

Vedi, questo è il problema. C'è sempre uno dei layout di tastiera integrati di OS X che non è possibile eliminare o disabilitare.
Mathias Bynens,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.