Jak usunąć lub wyłączyć domyślny układ klawiatury?

16

Czy można usunąć lub wyłączyć jeden z domyślnych układów klawiatury OS X Lion?

Korzystam z niestandardowego układu klawiatury, a teraz, kiedy udało mi się ustawić go jako domyślny układ klawiatury dla całego systemu , chciałbym móc odznaczyć lub usunąć wbudowany układ klawiatury „US” dostarczany z systemem operacyjnym X. Oto zrzut ekranu - pamiętaj, że pole wyboru jest wyłączone:

Zrzut ekranu

W OS X 10.9 ten panel preferencji został przeprojektowany, ale nadal nie ma możliwości „usunięcia” wbudowanego układu klawiatury „US”:

Zrzut ekranu

Ponieważ nigdy nie używam układu klawiatury USA, chciałbym się go pozbyć, tj. Usunąć go z menu Input na pasku menu. Jak mogę to zrobić?


Aktualizacja: Odpowiedź Daniela tak naprawdę nie odpowiada na to pytanie, ale zawiera kilka cennych informacji dotyczących tego problemu:

Wydaje się, że Mac OS X wymaga co najmniej jednego układu klawiatury, który system rozpoznaje jako układ „znaków łacińskich”.

Zakładając, że są to dokładne informacje (dzięki, Daniel!), Pytanie można sformułować w następujący sposób:

Jak sprawić, by OS X uznał niestandardową klawiaturę za układ znaków łacińskich?


Aktualizacja: Właśnie natrafiłem na coś, co może pomóc.

Mathias Bynens
źródło
1
Nie wydaje mi się, żeby „łacina” była wystarczająca. Można to łatwo osiągnąć w Ukelele, ustawiając identyfikator klawiatury na Roman. Podejrzewam, że twój układ również musi być częścią AppleKeyboardLayouts.bundle w układach system / biblioteka / klawiatura.
Tom Gewecke,

Odpowiedzi:

19
  1. Włącz źródło wejściowe inne niż układ klawiatury fizycznej w Preferencjach systemowych (użyłem Afghan Dari).
  2. Uruchom f=~/Library/Preferences/ByHost/com.apple.HIToolbox*.plist; plutil -convert xml1 $f; open $f -e.
  3. Usuń inne źródła wejściowe oprócz tymczasowo włączonego układu klawiatury i niestandardowego układu klawiatury.
  4. Wyloguj się i zaloguj ponownie.
  5. Usuń tymczasowo włączony układ klawiatury z listy właściwości.
  6. Wyloguj się i zaloguj ponownie.

Edycja: wydaje się, że powyższa metoda przestała działać w wersji 10.9. Działa to zarówno w wersji 10.9, jak i 10.8:

  1. Zmień bieżące źródło wejściowe na niestandardowy układ klawiatury.
  2. Otwarty ~/Library/Preferences/com.apple.HIToolbox.plist(w wersji 10.9) lub ~/Library/Preferences/ByHost/com.apple.HIToolbox.*.plist(w wersji 10.8 i wcześniejszych). Możesz przekonwertować plist na XML za pomocą plutil -convert xml1.
  3. Usuń ze AppleEnabledInputSourcessłownika źródło lub źródła wejściowe, które chcesz wyłączyć . Jeśli istnieje AppleDefaultAsciiInputSourceklucz, usuń go.
  4. Uruchom ponownie
Lri
źródło
1
Aha, wydaje się, że działa, jeśli uruchomisz ponownie komputer zamiast po prostu wylogować się i ponownie zalogować (krok 4). Dzięki! Czy mógłbyś opublikować nową odpowiedź z linkiem do swojego zasobu, abyś mógł otrzymać nagrodę?
Mathias Bynens,
1
@MathiasBynens Zredagowałem odpowiedź i moją stronę internetową. Kiedy ponownie wypróbowałem drugą metodę, musiałem zrestartować się, aby zastosować zmiany.
Lri
4
Działa poprawnie w systemie OS X 10.9 po ponownym uruchomieniu komputera. Musiałem jednak usunąć również układ tymczasowy z pliku plist i zrestartować komputer za pomocą „sudo reboot”, w przeciwnym razie układ tymczasowy został ponownie dodany przy normalnym ponownym uruchomieniu.
Dmitri
2
@ Lri W dniu 10.9 musiałem usunąć: AppleEnabledInputSources: 0 (stary domyślny element układu) i: AppleInputSourceHistory: słownik (przy użyciu PlistBuddy). Bez ponownego uruchamiania, ale konieczne jest tylko wylogowanie.
RolKau,
1
Dla mnie to nie działa na Yosemite. Ilekroć zmieniam plik w Xcode, jest on przywracany po kilku sekundach. Czy ktoś może wyjaśnić, jak to dokładnie zrobiłeś?
Simon Perepelitsa
7

Wygląda na to , że nie możesz zrobić tego, co chcesz, bez jeszcze nieodkrytego włamania do systemu . Wydaje się, że Mac OS X wymaga co najmniej jednego układu klawiatury, który system rozpoznaje jako układ „znaków łacińskich”. Zapobiega to niemożności wprowadzenia hasła na ekranie logowania itp. Jeśli wybrałeś francuski, kanadyjski lub inny układ klawiatury, który system rozpoznaje jako znaki łacińskie, możesz odznaczyć układ w USA.

Problem polega na tym, że układ niestandardowy, zawierający znaki łacińskie, nie jest rozpoznawany przez system jako układ klawiatury łacińskiej, a zatem nie może być jedynym wybranym układem klawiatury. Zobacz to pytanie (niestety bez doskonałej odpowiedzi), aby uzyskać więcej informacji.

Pamiętaj, że świetna odpowiedź na to pytanie również odpowiedziałaby na twoje pytanie. Niestety, moja odpowiedź tutaj wyjaśnia tylko, na czym polega problem, ale nie mam dla ciebie rozwiązania krok po kroku. Chociaż taki hack może być możliwy, nie widzę dowodów, że ktokolwiek wymyślił, jak przekonać Mac OS X, że dana niestandardowa klawiatura jest bezpieczna jako jedyna klawiatura do wyboru.

Daniel
źródło
@ Lri Podejrzewam, że masz rację, ale nie masz sprzętu, aby to przetestować. Być może jest czytelnik tej strony, kto może?
Daniel
7

Ze względu na kompletność, podałem to jako identyfikator błędu # 11137961 w Apple, a oto odpowiedź, którą otrzymałem:

Numer błędu: 11137961
Tytuł błędu: Zezwalaj na wyłączanie domyślnych (wbudowanych) układów klawiatury podczas korzystania z niestandardowego


Inżynierowie ustalili, że ten problem działa zgodnie z przeznaczeniem na podstawie następujących informacji:

Jeśli problem polega na rozpoznaniu układu klawiatury jako zgodnego z ASCII, najłatwiej byłoby „połączyć” pakiet .keylayout, wówczas Info.plist może zawierać słownik „KLInfo_”, który dalej go opisuje, na przykład:

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

Muszę przyjrzeć się temu trochę więcej, ale wygląda na to, że TIS skanuje dane wyjściowe układu klawiatury w celu wygenerowania USet i początkowego pomysłu ascii, czy przejdzie następujący minimalny test:

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

TIS zbada również przykładowy zestaw dla wyżej wskazanych ustawień regionalnych i będzie potrzebował kilkunastu znaków z tego zakresu [a-z].

Aby .keylayoutzapoznać się z niektórymi sugestiami dotyczącymi łączenia a , zobacz także TextInputSources.h.

Jeśli nadal występuje problem lub masz pytania dotyczące rozwiązania tego problemu, zaktualizuj swój raport o błędzie o te informacje.

Zamykamy teraz ten raport o błędzie.

Mathias Bynens
źródło
1
Sprawdzone: mój układ spełnia te kryteria, ale nie jest rozpoznawany jako możliwy układ domyślny. Wydaje się, że ich inżynierowie nie podali pełnych informacji lub podali nieprawidłowe informacje.
Dmitri
1
@DmitryDulepov Można użyć go jako domyślnego układu, ale przycisk usuwania drugiego nadal nie zostanie aktywowany; musicie to zrobić ręcznie (patrz mój komentarz do odpowiedzi
Lri
@RolKau, tak, ale są inne problemy później. Jeśli masz więcej niż jeden układ, nowy układ niestandardowy nie będzie dostępny w niektórych aplikacjach. Na przykład nie będzie można się na nią przełączyć w pasku wyszukiwania AppStore. Przynajmniej nie mogłem.
Dmitri
2

Oto inny pomysł: kilka lat temu pakiety dla układów klawiatury Apple były znacznie łatwiejsze do edycji, a ten problem wydaje się być do rozwiązania:

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

Być może nadal można użyć starego edytowalnego pakietu, jeśli można go pobrać ze starego systemu, w bieżącym systemie operacyjnym.

Tom Gewecke
źródło
1

Właśnie natrafiłem na coś, co może pomóc. Tutaj idzie:

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

To jest w moim systemie, gdzie mój niestandardowy układ klawiatury (o nazwie „QWERTY”) jest domyślny. Zauważ, że właściwości KeyboardLayout Namei KeyboardLayout IDodnoszą się do identyfikatora i nazwy na początku .keylayoutpliku.

Jak widać, defaults read /Library/Preferences/com.apple.HIToolbox.plist AppleCurrentKeyboardLayoutInputSourceIDnadal zwraca ciąg "com.apple.keylayout.Dutch". Czy jest gdzieś lista dostępnych com.apple.keylayoutwartości? Czy można uzyskać taką wartość dla niestandardowego układu klawiatury? Ponieważ w takim przypadku moglibyśmy po prostu zastąpić właściwość.

Poza tym wszystkie AppleEnabledInputSources, AppleInputSourceHistoryi AppleSelectedInputSourceswłaściwości wydają się ignorować niestandardowy układ klawiatury, ponieważ ich wartości odpowiadają natywnemu układowi klawiatury OS X, który pierwotnie wybrałem podczas uruchamiania Asystenta ustawień.


Kolejna aktualizacja: Aha! Wygląda na to, że istnieje inny plistplik, z którego możemy skopiować ustawienia.

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

Jak widać ( AppleCurrentKeyboardLayoutInputSourceID), najwyraźniej niestandardowe układy klawiatury otrzymują wartości, takie jak "org.unknown.keylayout.FOO"gdzie FOOjest nazwa układu klawiatury (jak podano w .keylayoutpliku).

Tak więc, spróbujmy ustawić wszystkie wartości na nasz niestandardowy układ klawiatury, nazwany QWERTYiz identyfikatorem 1337(określonym w .keylayoutpliku):

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

Niestety to nie działa.

Aktualizacja: @Lri odkryła niezawodną metodę - patrz jego odpowiedź.

Mathias Bynens
źródło
1

Odpowiedź Apple'a na mój raport o błędzie, w którym prosiłem o umożliwienie usunięcia domyślnego układu klawiatury, jeśli inny został wybrany w Preferencjach systemowych:

Inżynierowie ustalili, że Apple nie jest w stanie rozwiązać tego problemu.

Zakładając, że ten zwyczaj układ klawiatury jest w zestawie ( .keylayoutjest wewnątrz wiązki podobnego foo.bundle/Contents/Resources/foo.keylayout), to może to być tak proste, jak włożenie do Info.plist„s KLInfo_ słownika:

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

Jeśli ten układ jest potrzebny w /Library/Keyboard Layouts/całym systemie (tj. Wraz z wprowadzeniem hasła), można go zainstalować zamiast w tej samej lokalizacji ~/Library/.

Zaktualizuj swój raport o błędzie, aby poinformować nas, czy nadal stanowi to problem.

Jeśli masz pytania dotyczące rozwiązania tego problemu, zaktualizuj swój raport o błędach.

Pamiętaj, aby regularnie sprawdzać nowe produkty Apple pod kątem aktualizacji, które mogą mieć wpływ na ten problem. Jeszcze raz dziękuję za poświęcenie czasu na zgłaszanie błędów. Dziękujemy za wkład.

Mathias Bynens
źródło
1

Właśnie udało mi się usunąć domyślny układ w High Sierra przy użyciu następującej metody:

  1. Przejdź do swojego Library/Preferencesfolderu.
  2. Otwórz plik com.apple.HIToolbox.plistpliku, klikając go dwukrotnie lub używając openw wierszu polecenia. Spowoduje to, że XCode wyskoczy i może chcieć zainstalować dodatkowe komponenty.
  3. Powtarzaj krok 2, aż XCode wreszcie pokaże strukturę pliku.
  4. Znajdź AppleEnabledInputSourceswęzeł i rozłóż go.
  5. Usuń pozycję układu, który chcesz usunąć.
  6. Zapisz plik i zamknij XCode.

Teraz prawdopodobnie musisz się wylogować lub uruchomić ponownie, aby zakończyć. W każdym razie musiałem zrestartować się, żeby coś zaktualizować, więc załatwiłem sprawę. Teraz z radością piszę w Neo z agresywną szybkością lodowcową, ale nie widać ani jednego QWERTZA!

Bombe
źródło
0

Oto pomysł: po upewnieniu się, że identyfikator klawiatury niestandardowego układu jest ustawiony na Roman, utwórz niestandardowy zestaw AppleKeyboardLayouts.bundle, który zawiera tylko ten układ, i zastąp go tym, który jest dostarczany z systemem operacyjnym. (Nie wiem, co jest związane z tworzeniem pakietu.)

Tom Gewecke
źródło
0

Możesz użyć Ukelele, aby oznaczyć używany układ jako taki, który używa skryptu łacińskiego. Wyeksportuj jako pakiet, zainstaluj, a wtedy będziesz mógł usunąć amerykański.

Alexandre G.
źródło
-1

Można to zrobić łatwo. Najpierw zmień układ niestandardowy (użyj paska menu Menu wprowadzania), a następnie usuń zaznaczenie układu US.

shpokas
źródło
Mój niestandardowy układ jest obecnie używany. Jak wspomniano w pytaniu, nie używam już układu klawiatury USA.
Mathias Bynens
Mieszkam bez amerykańskiego układu klawiatury i nie miałem problemu z jego odznaczeniem. Inne dostosowania, które mam, to inne niż domyślny region i język poza USA.
shpokas
Czy możesz odznaczyć układ klawiatury wybrany podczas początkowej konfiguracji komputera Mac?
Mathias Bynens
Tak, mogę również zmienić region.
shpokas
Widzisz, to jest problem. Zawsze jest jeden z wbudowanych układów klawiatury OS X, których nie można usunąć ani wyłączyć.
Mathias Bynens