Bagaimana cara menghapus atau menonaktifkan tata letak keyboard default?

16

Apakah mungkin untuk menghapus atau menonaktifkan salah satu tata letak keyboard standar OS X Lion?

Saya menggunakan tata letak papan ketik khusus, dan sekarang saya berhasil mengaturnya sebagai tata letak papan ketik standar sistem , saya ingin dapat menghapus centang atau menghapus tata letak papan ketik “AS” bawaan yang menyertai OS X. Ini tangkapan layar - perhatikan bahwa kotak centang dinonaktifkan:

Tangkapan layar

Di OS X 10.9, panel preferensi ini telah dirancang ulang, tetapi masih tidak ada cara untuk "menghapus" tata letak keyboard "AS" bawaan:

Tangkapan layar

Karena saya tidak pernah menggunakan tata letak keyboard AS, saya ingin menyingkirkannya, yaitu menghapusnya dari menu Input di bilah menu. Bagaimana saya bisa melakukan ini?


Pembaruan: Jawaban Daniel tidak benar-benar menjawab pertanyaan ini, tetapi menawarkan beberapa informasi berharga mengenai masalah ini:

Mac OS X tampaknya memerlukan setidaknya satu tata letak papan ketik yang diakui sistem sebagai tata letak “karakter Latin” untuk dipilih.

Dengan asumsi ini adalah informasi yang akurat (terima kasih, Daniel!), Pertanyaannya dapat diulangi sebagai berikut:

Bagaimana membuat OS X menganggap keyboard khusus sebagai tata letak karakter Latin?


Pembaruan: Saya baru saja menemukan sesuatu yang mungkin bisa membantu.

Mathias Bynens
sumber
1
Saya tidak berpikir "Latin" sudah cukup. Itu mudah dilakukan di Ukelele dengan mengatur ID keyboard ke Roman. Saya menduga tata letak Anda juga harus menjadi bagian dari AppleKeyboardLayouts.bundle dalam tata letak sistem / perpustakaan / keyboard.
Tom Gewecke

Jawaban:

20
  1. Aktifkan sumber input yang tidak seperti tata letak keyboard fisik Anda dari System Preferences (saya menggunakan Afghan Dari).
  2. Lari f=~/Library/Preferences/ByHost/com.apple.HIToolbox*.plist; plutil -convert xml1 $f; open $f -e.
  3. Hapus sumber input lain kecuali tata letak keyboard yang diaktifkan sementara dan tata letak keyboard khusus Anda.
  4. Logout dan kembali.
  5. Hapus tata letak keyboard yang diaktifkan sementara dari daftar properti.
  6. Logout dan kembali.

Sunting: metode di atas tampaknya telah berhenti bekerja di 10.9. Ini bekerja di kedua 10,9 atau 10,8 meskipun:

  1. Ubah sumber input saat ini ke tata letak keyboard khusus Anda.
  2. Buka ~/Library/Preferences/com.apple.HIToolbox.plist(pada 10.9) atau ~/Library/Preferences/ByHost/com.apple.HIToolbox.*.plist(pada 10.8 dan sebelumnya). Anda dapat mengonversi plist ke XML dengan plutil -convert xml1.
  3. Hapus sumber input atau sumber input yang ingin Anda nonaktifkan dari AppleEnabledInputSourceskamus. Jika ada AppleDefaultAsciiInputSourcekunci, hapus.
  4. Mengulang kembali.
Lri
sumber
1
Aha, tampaknya berfungsi jika Anda me-restart komputer alih-alih hanya keluar dan kembali (langkah 4). Terima kasih! Maukah Anda memposting jawaban baru dengan tautan ke sumber daya Anda sehingga Anda bisa mendapatkan hadiahnya?
Mathias Bynens
1
@MathiasBynens Saya mengedit jawaban dan situs web saya. Ketika saya mencoba metode kedua lagi, saya juga perlu memulai ulang untuk menerapkan perubahan.
Lri
4
Bekerja dengan baik di OS X 10.9 jika Anda me-restart komputer Anda. Namun saya juga harus menghapus layout sementara dari file plist dan reboot menggunakan 'sudo reboot', jika tidak layout sementara ditambahkan kembali pada reboot normal.
disebutkan namanya_1
2
@Lri Pada 10.9 saya harus menghapus: AppleEnabledInputSources: 0 (item tata letak default lama) dan: AppleInputSourceHistory: kamus (menggunakan PlistBuddy). Tidak perlu reboot, tetapi hanya logoff yang diperlukan.
RolKau
1
Itu tidak bekerja pada Yosemite untuk saya. Setiap kali saya mengubah file dalam Xcode, file itu baru saja dipulihkan setelah beberapa detik. Adakah yang bisa menjelaskan bagaimana Anda melakukannya?
Simon Perepelitsa
7

Tampaknya Anda tidak dapat melakukan apa yang Anda inginkan tanpa ada retasan yang belum ditemukan ke sistem . Mac OS X tampaknya memerlukan setidaknya satu tata letak papan ketik yang diakui sistem sebagai tata letak "karakter Latin" untuk dipilih. Ini mencegah Anda dari tidak dapat memasukkan kata sandi di layar login, dll. Jika Anda memilih tata letak keyboard Prancis, atau Kanada, atau yang lain yang dikenali oleh sistem sebagai karakter Latin, Anda dapat membatalkan pilihan tata letak AS.

Masalah Anda adalah bahwa tata letak khusus Anda, walaupun mengandung karakter Latin, tidak dikenali oleh sistem sebagai tata letak keyboard Latin, dan karenanya tidak bisa menjadi satu-satunya tata letak keyboard yang dipilih. Lihat pertanyaan ini (sayangnya kurang jawaban yang bagus) untuk informasi lebih lanjut.

Perhatikan bahwa jawaban yang bagus untuk pertanyaan ini juga akan menjawab pertanyaan Anda. Sayangnya, jawaban saya di sini hanya menjelaskan apa masalahnya, tapi saya tidak punya solusi langkah demi langkah untuk Anda. Meskipun peretasan semacam itu mungkin dilakukan, saya tidak melihat bukti bahwa ada yang tahu cara meyakinkan Mac OS X bahwa keyboard khusus tertentu aman untuk digunakan sebagai satu-satunya keyboard yang dapat dipilih.

Daniel
sumber
@Lri Saya curiga Anda benar, tetapi tidak memiliki perangkat keras untuk mengujinya. Mungkin ada pembaca situs ini yang bisa?
Daniel
7

Demi kelengkapan, saya mengajukan ini sebagai bug ID # 11137961 dengan Apple, dan ini adalah respons yang saya dapatkan:

Bug ID #: 11137961
Judul Bug: Izinkan menonaktifkan tata letak keyboard bawaan (bawaan) saat menggunakan yang kustom


Teknik telah menentukan bahwa masalah ini berlaku sebagaimana dimaksud berdasarkan informasi berikut:

Jika masalah hanya membuat tata letak keyboard Anda dikenali sebagai kemampuan ASCII, cara termudah adalah dengan "bundel" .keylayout Anda, maka Info.plist Anda dapat berisi kamus "KLInfo_" yang menjelaskan lebih lanjut, seperti:

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

Saya perlu melihat ini sedikit lebih, tetapi sepertinya TIS akan memindai output tata letak keyboard untuk menghasilkan USet dan menghasilkan gagasan awal tentang kepasifan dengan apakah ia lulus tes minimal berikut:

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

TIS juga akan memeriksa set contoh untuk lokal yang ditunjukkan di atas dan membutuhkan selusin karakter yang baik dalam jangkauan [a-z] .

Untuk beberapa saran tentang bundling .keylayout, lihat juga TextInputSources.h .

Jika ini masih merupakan masalah, atau Anda memiliki pertanyaan tentang penyelesaian masalah ini, harap perbarui laporan bug Anda dengan informasi itu.

Kami sekarang menutup laporan bug ini.

Mathias Bynens
sumber
1
Dicentang: tata letak saya memenuhi kriteria tersebut tetapi tidak dikenali sebagai kemungkinan tata letak default. Jadi insinyur mereka tidak memberikan informasi lengkap atau memberikan informasi yang salah sepertinya.
Unnamed_1
1
@DmitryDulepov Dimungkinkan untuk menggunakannya sebagai tata letak default, tetapi tombol untuk menghapus yang lain masih tidak akan diaktifkan; Anda harus melakukannya secara manual (lihat komentar saya untuk jawaban
Lri
@RolKau, ya tapi nanti ada masalah lain. Jika Anda memiliki lebih dari satu tata letak, tata letak khusus yang baru tidak akan tersedia di beberapa aplikasi. Misalnya, Anda tidak akan dapat beralih ke itu di bilah pencarian AppStore. Setidaknya, saya tidak bisa.
Unnamed_1
2

Inilah ide lain: Beberapa tahun yang lalu bundel untuk Layout Keyboard Apple jauh lebih mudah untuk diedit, dan masalah ini tampaknya telah dipecahkan:

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

Mungkin seseorang masih bisa menggunakan bundel yang dapat diedit yang lama, jika Anda bisa mendapatkannya dari sistem lama, di OS saat ini.

Tom Gewecke
sumber
1

Saya baru saja menemukan sesuatu yang mungkin bisa membantu. Ini dia:

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

Ini ada di sistem saya, di mana tata letak keyboard khusus saya (bernama "QWERTY") adalah default. Perhatikan bahwa KeyboardLayout Namedan KeyboardLayout IDproperti merujuk ke ID dan nama di awal .keylayoutfile.

Seperti yang Anda lihat, defaults read /Library/Preferences/com.apple.HIToolbox.plist AppleCurrentKeyboardLayoutInputSourceIDmasih mengembalikan string "com.apple.keylayout.Dutch". Apakah ada daftar di suatu tempat yang tersediacom.apple.keylayout nilai yang ? Apakah mungkin untuk mendapatkan nilai seperti itu untuk tata letak keyboard khusus? Karena dalam kasus itu, kita bisa dengan mudah mengganti properti.

Juga, AppleEnabledInputSources, AppleInputSourceHistory, dan AppleSelectedInputSourcessifat semua tampaknya mengabaikan layout keyboard kustom, sebagai nilai-nilai mereka sesuai dengan layout keyboard OS X asli awalnya saya pilih saat menjalankan Setup Assistant.


Pembaruan lain: Aha! Sepertinya ada plistfile lain dari mana kita mungkin bisa menyalin pengaturan.

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

Seperti yang dapat Anda lihat ( AppleCurrentKeyboardLayoutInputSourceID), tata letak keyboard tampaknya mendapatkan nilai seperti di "org.unknown.keylayout.FOO"mana FOOnama tata letak keyboard (seperti yang ditentukan dalam .keylayoutfile).

Jadi, mari kita coba mengatur semua nilai ke tata letak keyboard khusus kami, bernama QWERTYdan dengan ID 1337(ditentukan dalam .keylayoutfile):

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

Sayangnya, ini sepertinya tidak berhasil.

Pembaruan: @ri menemukan metode yang dapat diandalkan - lihat jawabannya.

Mathias Bynens
sumber
1

Tanggapan Apple terhadap laporan bug saya, di mana saya diminta untuk memungkinkan untuk menghapus tata letak keyboard default sistem jika yang lain dipilih melalui System Preferences:

Rekayasa telah menentukan bahwa ini bukan masalah bagi Apple untuk mengatasi.

Dengan asumsi layout keyboard kustom ini dibundel ( .keylayoutdi dalam bundel seperti foo.bundle/Contents/Resources/foo.keylayout), maka ini bisa menjadi semudah memasukkan ke dalam Info.plist's KLInfo_ kamus:

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

Jika tata letak ini diperlukan di seluruh sistem (mis. Termasuk input kata sandi) itu bisa dipasang di /Library/Keyboard Layouts/, daripada lokasi yang sama di ~/Library/.

Harap perbarui laporan bug Anda untuk memberi tahu kami apakah ini masih menjadi masalah bagi Anda.

Jika Anda memiliki pertanyaan tentang penyelesaian masalah ini, harap perbarui laporan bug Anda dengannya.

Pastikan untuk secara teratur memeriksa produk Apple baru untuk setiap pembaruan yang dapat memengaruhi masalah ini. Sekali lagi, terima kasih telah meluangkan waktu untuk mengirimkan bug. Kami sangat menghargai masukan Anda.

Mathias Bynens
sumber
1

Saya baru saja berhasil menghapus tata letak default di High Sierra menggunakan metode berikut:

  1. Arahkan ke Library/Preferencesfolder Anda .
  2. Buka file com.apple.HIToolbox.plistfile, baik dengan mengklik dua kali atau dengan menggunakan openpada baris perintah. Ini akan membuat XCode muncul dan mungkin ingin menginstal komponen tambahan.
  3. Ulangi langkah 2 hingga XCode akhirnya menunjukkan struktur file.
  4. Temukan AppleEnabledInputSourcesnode dan buka lipatannya.
  5. Hapus entri untuk tata letak yang ingin Anda hapus.
  6. Simpan file dan keluar dari XCode.

Sekarang Anda mungkin harus logout atau reboot untuk membuat ini final. Saya tetap harus reboot untuk beberapa pembaruan sehingga melakukan trik untuk saya. Sekarang saya dengan senang hati mengetik Neo dengan kecepatan glasial yang menyakitkan tetapi tidak ada satu pun QWERTZ yang terlihat!

Bombe
sumber
0

Berikut ini sebuah ide: Setelah memastikan id keyboard dari tata letak kustom Anda diatur ke Roman, buat AppleKeyboardLayouts.bundle khusus yang hanya berisi tata letak itu dan gantikan ini dengan yang ada pada OS. (Saya tidak tahu apa yang terlibat dalam membuat .bundle)

Tom Gewecke
sumber
0

Anda dapat menggunakan Ukelele untuk menandai tata letak yang digunakan sebagai tata bahasa Latin. Ekspor sebagai bundel, instal dan kemudian Anda akan dapat menghapus AS.

Alexandre G
sumber
-1

Itu bisa dilakukan dengan mudah. Pertama-tama ubah tata letak khusus Anda (gunakan bilah menu menu Input), lalu hapus centang tata letak AS.

shpokas
sumber
Tata letak khusus saya adalah yang saat ini digunakan. Seperti yang disebutkan dalam pertanyaan, saya tidak menggunakan tata letak keyboard AS lagi.
Mathias Bynens
Saya hidup tanpa tata letak keyboard AS dan tidak memiliki masalah untuk membatalkan pilihannya. Kustomisasi lain yang saya miliki adalah wilayah dan bahasa non-standar, non-AS.
shpokas
Bisakah Anda membatalkan pilihan tata letak keyboard yang Anda pilih saat mengatur Mac pada awalnya?
Mathias Bynens
Ya, saya bisa jika saya mengubah wilayah juga.
shpokas
Lihat, itu masalahnya. Selalu ada salah satu tata letak keyboard bawaan OS X yang tidak dapat Anda hapus atau nonaktifkan.
Mathias Bynens