จะลบหรือปิดการใช้งานเค้าโครงแป้นพิมพ์เริ่มต้นได้อย่างไร


17

เป็นไปได้ที่จะลบหรือปิดการใช้งานรูปแบบแป้นพิมพ์เริ่มต้นของ OS X Lion หรือไม่

ฉันใช้รูปแบบแป้นพิมพ์ที่กำหนดเองและตอนนี้ฉันจัดการเพื่อตั้งค่าเป็นรูปแบบแป้นพิมพ์เริ่มต้นทั้งระบบฉันต้องการที่จะสามารถยกเลิกหรือลบรูปแบบแป้นพิมพ์ "US" ในตัวที่มาพร้อมกับระบบปฏิบัติการ X. นี่คือภาพหน้าจอ - โปรดทราบว่าช่องทำเครื่องหมายถูกปิดใช้งาน:

ภาพหน้าจอ

ใน OS X 10.9 บานหน้าต่างการตั้งค่านี้ได้รับการออกแบบใหม่ แต่ก็ยังไม่มีวิธี“ ลบ” รูปแบบแป้นพิมพ์“ US” ในตัว:

ภาพหน้าจอ

เนื่องจากฉันไม่เคยใช้รูปแบบแป้นพิมพ์สหรัฐฯฉันชอบที่จะกำจัดมันเช่นลบออกจากเมนูป้อนข้อมูลในแถบเมนู ฉันจะทำสิ่งนี้ได้อย่างไร


อัปเดต: คำตอบของ Danielไม่ได้ตอบคำถามนี้ แต่ให้ข้อมูลที่มีค่าเกี่ยวกับปัญหานี้:

Mac OS X ดูเหมือนจะต้องการเค้าโครงแป้นพิมพ์อย่างน้อยหนึ่งรูปแบบซึ่งระบบรับรู้ว่าเป็นรูปแบบ“ อักขระละติน” ที่จะเลือก

สมมติว่านี่เป็นข้อมูลที่ถูกต้อง (ขอบคุณ Daniel!) คำถามอาจถูกใช้ใหม่ดังต่อไปนี้:

วิธีทำให้ OS X พิจารณาว่าคีย์บอร์ดที่กำหนดเองนั้นเป็นเลย์เอาต์อักขระละตินหรือไม่


อัปเดต: ฉันเพิ่งเจอบางสิ่งที่อาจช่วยได้


1
ฉันไม่คิดว่า "ละติน" ก็เพียงพอแล้ว สามารถทำได้อย่างง่ายดายใน Ukelele โดยการตั้งรหัสคีย์บอร์ดเป็นโรมัน ฉันสงสัยว่าเลย์เอาต์ของคุณจะต้องเป็นส่วนหนึ่งของ AppleKeyboardLayouts.bundle ในรูปแบบระบบ / ไลบรารี / คีย์บอร์ด
Tom Gewecke

คำตอบ:


21
  1. เปิดใช้งานแหล่งอินพุตที่ไม่เหมือนกับรูปแบบแป้นพิมพ์ทางกายภาพของคุณจากการตั้งค่าระบบ (ฉันใช้ Afghan Dari)
  2. f=~/Library/Preferences/ByHost/com.apple.HIToolbox*.plist; plutil -convert xml1 $f; open $f -eวิ่ง
  3. ลบแหล่งอินพุตอื่น ๆ ยกเว้นรูปแบบแป้นพิมพ์ที่เปิดใช้งานชั่วคราวและรูปแบบแป้นพิมพ์แบบกำหนดเองของคุณ
  4. ออกจากระบบและกลับเข้ามาใหม่
  5. ลบเค้าโครงแป้นพิมพ์ที่เปิดใช้งานชั่วคราวจากรายการคุณสมบัติ
  6. ออกจากระบบและกลับเข้ามาใหม่

แก้ไข: วิธีการข้างต้นดูเหมือนว่าจะหยุดทำงานใน 10.9 สิ่งนี้ใช้ได้ทั้งใน 10.9 หรือ 10.8 แม้ว่า:

  1. เปลี่ยนแหล่งอินพุตปัจจุบันเป็นเค้าโครงแป้นพิมพ์แบบกำหนดเองของคุณ
  2. เปิด~/Library/Preferences/com.apple.HIToolbox.plist(ใน 10.9) หรือ~/Library/Preferences/ByHost/com.apple.HIToolbox.*.plist(ใน 10.8 และก่อนหน้า) คุณสามารถแปลง plist เพื่อ XML plutil -convert xml1ที่มี
  3. ลบแหล่งอินพุตหรือแหล่งอินพุตที่คุณต้องการปิดใช้งานจากAppleEnabledInputSourcesพจนานุกรม หากมีAppleDefaultAsciiInputSourceกุญแจให้ลบออก
  4. เริ่มต้นใหม่.

1
ใช่ดูเหมือนว่าจะใช้งานได้หากคุณรีสตาร์ทคอมพิวเตอร์แทนที่จะออกจากระบบและกลับเข้ามาใหม่ (ขั้นตอนที่ 4) ขอบคุณ! คุณจะโพสต์คำตอบใหม่พร้อมลิงค์ไปยังแหล่งข้อมูลของคุณเพื่อให้ได้รับรางวัลหรือไม่?
งัด Bynens

1
@MathiasBynens ฉันแก้ไขคำตอบและเว็บไซต์ของฉัน เมื่อฉันลองวิธีที่สองอีกครั้งฉันต้องรีสตาร์ทเพื่อใช้การเปลี่ยนแปลง
Lri

4
ทำงานได้ดีใน OS X 10.9 หากคุณรีสตาร์ทคอมพิวเตอร์ อย่างไรก็ตามฉันต้องลบเลย์เอาต์ชั่วคราวออกจากไฟล์ plist และรีบูตโดยใช้ 'sudo reboot' มิฉะนั้นจะมีการเพิ่มเลย์เอาต์ชั่วคราวในการรีบูตปกติ
Unnamed_1

2
@Lri บน 10.9 ฉันต้องลบ: AppleEnabledInputSources: 0 (รายการเลย์เอาต์เริ่มต้นเก่า) และ: AppleInputSourceHistory: พจนานุกรม (ใช้ PlistBuddy) ไม่ต้องรีบูต แต่จำเป็นต้องออกจากระบบเท่านั้น
RolKau

1
มันใช้ไม่ได้กับโยเซมิตีสำหรับฉัน เมื่อใดก็ตามที่ฉันเปลี่ยนไฟล์ใน Xcode มันก็จะได้รับการกู้คืนหลังจากนั้นไม่กี่วินาที ทุกคนสามารถอธิบายได้ว่าคุณทำมันอย่างไร
Simon Perepelitsa

7

ปรากฏว่าคุณไม่สามารถทำสิ่งที่คุณต้องการโดยไม่ต้องสับบางที่ยังไม่ถูกค้นพบในระบบ ดูเหมือนว่า Mac OS X ต้องการเค้าโครงแป้นพิมพ์อย่างน้อยหนึ่งรูปแบบซึ่งระบบรับรู้ว่าเป็นรูปแบบ "อักขระละติน" ที่จะเลือก นี่เป็นการป้องกันไม่ให้คุณไม่สามารถป้อนรหัสผ่านที่หน้าจอเข้าสู่ระบบ ฯลฯ หากคุณเลือกภาษาฝรั่งเศสหรือแคนาดาหรือรูปแบบแป้นพิมพ์อื่นที่ระบบรับรู้เป็นตัวอักษรละตินคุณสามารถยกเลิกการเลือกรูปแบบสหรัฐอเมริกาได้

ปัญหาของคุณคือรูปแบบที่กำหนดเองของคุณในขณะที่มีตัวอักษรละตินไม่ได้รับการยอมรับจากระบบเป็นรูปแบบแป้นพิมพ์ภาษาละตินและจึงไม่สามารถเป็นรูปแบบแป้นพิมพ์ที่เลือกเท่านั้น ดูคำถามนี้ (ไม่มีคำตอบที่น่าเศร้า) สำหรับข้อมูลเพิ่มเติม

โปรดทราบว่าคำตอบที่ดีสำหรับคำถามนี้จะตอบคำถามของคุณด้วย อนิจจาคำตอบของฉันที่นี่เพียงชี้แจงว่าปัญหาคืออะไร แต่ฉันไม่มีวิธีแก้ปัญหาแบบทีละขั้นตอนสำหรับคุณ แม้ว่าแฮ็คอาจเป็นไปได้ แต่ฉันไม่เห็นหลักฐานว่ามีใครรู้วิธีที่จะโน้มน้าวให้ Mac OS X ทราบว่าคีย์บอร์ดที่กำหนดเองนั้นปลอดภัยที่จะใช้เป็นคีย์บอร์ดที่สามารถเลือกได้


@Lri ฉันสงสัยว่าคุณถูกต้อง แต่ไม่มีฮาร์ดแวร์ที่จะทดสอบ อาจจะมีผู้อ่านของเว็บไซต์นี้ที่สามารถ?
Daniel

7

เพื่อความสมบูรณ์ฉันได้ยื่นเรื่องนี้เป็นรหัสข้อผิดพลาด # 11137961 กับ Apple และนี่คือคำตอบที่ฉันได้รับ:

รหัสข้อผิดพลาด #: 11137961
ชื่อข้อผิดพลาด:อนุญาตการปิดใช้งานรูปแบบแป้นพิมพ์เริ่มต้น (ในตัว) เมื่อใช้แบบกำหนดเอง


วิศวกรรมได้ระบุว่าปัญหานี้ทำงานตามที่ตั้งใจไว้ตามข้อมูลต่อไปนี้:

หากปัญหาเพิ่งได้รับการยอมรับว่าเป็นรูปแบบแป้นพิมพ์ของคุณเป็น ASCII ได้ง่ายที่สุดคือ "มัด" .keylayout ของคุณ Info.plist ของคุณสามารถมีพจนานุกรม "KLInfo_" ที่อธิบายเพิ่มเติมเช่น:

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

ฉันต้องการตรวจสอบเพิ่มเติมอีกเล็กน้อย แต่ดูเหมือนว่า TIS จะสแกนเอาต์พุตแป้นพิมพ์เพื่อสร้าง USet และสร้างแนวคิดเริ่มต้นของ ascii-ness โดยผ่านการทดสอบขั้นต่ำต่อไปนี้หรือไม่:

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

[a-z]มอกยังจะตรวจสอบการตั้งค่าแบบข้างต้นที่เกิดเหตุระบุและต้องโหลดีหรือเพื่อให้ตัวละครในช่วง

สำหรับข้อเสนอแนะบางอย่างเกี่ยวกับ bundling ยังเห็น.keylayout TextInputSources.h

หากปัญหายังคงมีอยู่หรือคุณมีคำถามเกี่ยวกับการแก้ไขปัญหานี้โปรดอัปเดตรายงานข้อผิดพลาดของคุณด้วยข้อมูลนั้น

เรากำลังปิดรายงานข้อผิดพลาดนี้


1
ตรวจสอบแล้ว: เลย์เอาต์ของฉันตรงตามเกณฑ์เหล่านั้น แต่ไม่ได้รับการยอมรับว่าเป็นเลย์เอาต์เริ่มต้นที่เป็นไปได้ ดังนั้นวิศวกรของพวกเขาจึงไม่ให้ข้อมูลที่ครบถ้วนหรือให้ข้อมูลที่ไม่ถูกต้อง
Unnamed_1

1
@DmitryDulepov มันเป็นไปได้ที่จะใช้มันเป็นเค้าโครงเริ่มต้น แต่ปุ่มที่จะลบอื่น ๆ ยังคงไม่ถูกเปิดใช้งาน คุณจะต้องทำด้วยตนเอง (ดูความคิดเห็นของฉันเพื่อตอบ Lri
RolKau

@RolKau ใช่ แต่มีปัญหาอื่น ๆ ในภายหลัง หากคุณมีมากกว่าหนึ่งเลย์เอาต์เค้าโครงที่กำหนดเองใหม่จะไม่สามารถใช้ได้ในบางแอพ ตัวอย่างเช่นคุณจะไม่สามารถสลับไปใช้ในแถบค้นหาของ AppStore อย่างน้อยฉันก็ทำไม่ได้
Unnamed_1

2

นี่เป็นแนวคิดอีกอย่างหนึ่ง: ไม่กี่ปีที่ผ่านมาชุดของเค้าโครงแป้นพิมพ์ของ Apple นั้นง่ายต่อการแก้ไขมากขึ้นและปัญหานี้ดูเหมือนจะแก้ไขได้:

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

บางทีอาจยังคงสามารถใช้บันเดิลที่แก้ไขได้เก่าได้หากคุณสามารถได้รับจากระบบเก่าในระบบปฏิบัติการปัจจุบัน


1

ฉันเพิ่งเจอบางสิ่งที่อาจช่วยได้ ไปที่นี่:

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

นี่คือระบบของฉันซึ่งรูปแบบแป้นพิมพ์แบบกำหนดเองของฉัน (ชื่อ“ QWERTY”) เป็นค่าเริ่มต้น โปรดทราบว่าKeyboardLayout NameและKeyboardLayout IDคุณสมบัติอ้างถึง ID และชื่อที่จุดเริ่มต้นของ.keylayoutไฟล์

ในขณะที่คุณสามารถดูยังคงส่งกลับสตริงdefaults read /Library/Preferences/com.apple.HIToolbox.plist AppleCurrentKeyboardLayoutInputSourceID "com.apple.keylayout.Dutch"มีรายการบางส่วนของcom.apple.keylayoutค่าที่ใช้ได้หรือไม่? เป็นไปได้หรือไม่ที่จะได้รับค่าดังกล่าวสำหรับรูปแบบแป้นพิมพ์แบบกำหนดเอง? 'ในกรณีนี้เราสามารถแทนที่คุณสมบัติได้

นอกจากนี้AppleEnabledInputSources, AppleInputSourceHistoryและAppleSelectedInputSourcesคุณสมบัติทั้งหมดดูเหมือนจะไม่สนใจรูปแบบแป้นพิมพ์ที่กำหนดเองเป็นค่าของพวกเขาสอดคล้องกับแป้นพิมพ์ OS X พื้นเมือง layout ฉันเลือกเดิมเมื่อทำงาน Setup Assistant


การอัปเดตอื่น:อ๊ะ! ดูเหมือนว่ามีplistไฟล์อื่นที่เราอาจคัดลอกการตั้งค่าได้

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

ตามที่คุณเห็น ( AppleCurrentKeyboardLayoutInputSourceID) รูปแบบแป้นพิมพ์แบบกำหนดเองที่ชัดเจนจะได้รับค่าเหมือน"org.unknown.keylayout.FOO"ที่FOOเป็นชื่อของรูปแบบแป้นพิมพ์ (ตามที่ระบุใน.keylayoutไฟล์)

ดังนั้นเพื่อลองตั้งค่าทั้งหมดเป็นรูปแบบแป้นพิมพ์ที่กำหนดเองของเราชื่อQWERTYและมี ID 1337(ระบุไว้ใน.keylayoutไฟล์):

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

น่าเศร้าที่ดูเหมือนว่าจะไม่ทำงาน

ปรับปรุง: @Lri ค้นพบวิธีการที่เชื่อถือได้ - ดูคำตอบของเขา


1

การตอบสนองของ Apple ต่อรายงานข้อผิดพลาดของฉันซึ่งฉันขอให้ทำให้เป็นไปได้ที่จะลบรูปแบบแป้นพิมพ์เริ่มต้นของระบบหากเลือกรูปแบบอื่นผ่านการตั้งค่าระบบ:

วิศวกรรมได้ระบุว่านี่ไม่ใช่ปัญหาสำหรับที่อยู่ของ Apple

สมมติว่ารูปแบบแป้นพิมพ์ที่กำหนดเองนี้จะรวม ( .keylayoutอยู่ภายในห่อเหมือนfoo.bundle/Contents/Resources/foo.keylayout) แล้วนี้อาจจะเป็นเรื่องง่ายเหมือนการใส่เข้าไปในInfo.plistของKLInfo_ พจนานุกรม:

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

หากจำเป็นต้องใช้เลย์เอาต์นี้ทั้งระบบ (เช่นรวมถึงการป้อนรหัสผ่าน) สามารถติดตั้งได้/Library/Keyboard Layouts/แทนที่จะเป็นตำแหน่งเดียวกัน~/Library/มากกว่าในตำแหน่งเดียวกัน

โปรดอัปเดตรายงานข้อผิดพลาดของคุณเพื่อแจ้งให้เราทราบว่าปัญหานี้ยังคงเป็นปัญหาสำหรับคุณหรือไม่

หากคุณมีคำถามเกี่ยวกับการแก้ไขปัญหานี้โปรดอัปเดตรายงานข้อบกพร่องของคุณกับพวกเขา

โปรดตรวจสอบให้แน่ใจว่าได้ตรวจสอบผลิตภัณฑ์ใหม่ ๆ ของ Apple เป็นประจำสำหรับการอัพเดทใด ๆ ที่อาจส่งผลต่อปัญหานี้ ขอขอบคุณอีกครั้งที่สละเวลาส่งข้อบกพร่อง เราขอขอบคุณที่คุณป้อนข้อมูล


1

ฉันเพิ่งประสบความสำเร็จในการลบเค้าโครงเริ่มต้นบน High Sierra โดยใช้วิธีการต่อไปนี้:

  1. นำทางไปยัง Library/Preferencesโฟลเดอร์
  2. เปิดไฟล์com.apple.HIToolbox.plistไฟล์โดยดับเบิลคลิกหรือโดยใช้openบนบรรทัดคำสั่ง สิ่งนี้จะทำให้ XCode ปรากฏขึ้นและอาจต้องการติดตั้งคอมโพเนนต์เพิ่มเติม
  3. ทำซ้ำขั้นตอนที่ 2 จนกระทั่ง XCode แสดงโครงสร้างของไฟล์ในที่สุด
  4. ค้นหา AppleEnabledInputSourcesโหนดและแฉมัน
  5. ลบรายการสำหรับโครงร่างที่คุณต้องการลบ
  6. บันทึกไฟล์และออกจาก XCode

ตอนนี้คุณอาจต้องออกจากระบบหรือเริ่มระบบใหม่เพื่อให้ขั้นตอนสุดท้าย ฉันต้องรีบู๊ตเพื่อรับการอัพเดท ตอนนี้ฉันกำลังพิมพ์ด้วย Neo อย่างมีความสุขด้วยความเร็วอันเยือกเย็น แต่ไม่มี QWERTZ เดียวที่เห็น!


0

นี่คือแนวคิด: หลังจากตรวจสอบให้แน่ใจว่า id แป้นพิมพ์ของโครงร่างที่กำหนดเองของคุณถูกตั้งค่าเป็น Roman ให้สร้าง AppleKeyboardLayouts.bundle ซึ่งมีเฉพาะโครงร่างนั้นและแทนที่สิ่งนี้สำหรับรูปแบบที่มาพร้อมกับระบบปฏิบัติการ (ฉันไม่รู้จักตัวเองว่าเกี่ยวข้องกับการสร้าง. bundle)


0

คุณสามารถใช้Ukeleleเพื่อทำเครื่องหมายเค้าโครงที่คุณใช้เป็นรูปแบบที่ใช้สคริปต์ละติน ส่งออกเป็นชุดติดตั้งแล้วคุณจะสามารถลบ US ได้


-1

มันสามารถทำได้อย่างง่ายดาย ก่อนอื่นเปลี่ยนเค้าโครงที่คุณกำหนดเอง (ใช้แถบเมนูเมนูป้อนข้อมูล) จากนั้นยกเลิกการเลือกเค้าโครงของสหรัฐอเมริกา


รูปแบบที่กำหนดเองของฉันคือรูปแบบที่ใช้อยู่ในปัจจุบัน ดังที่กล่าวไว้ในคำถามฉันไม่ได้ใช้รูปแบบแป้นพิมพ์ของสหรัฐอเมริกาอีกต่อไป
Mathias Bynens

ฉันอยู่ได้โดยไม่ต้องใช้รูปแบบแป้นพิมพ์สหรัฐฯและไม่มีปัญหาในการยกเลิกการเลือก การปรับแต่งอื่น ๆ ที่ฉันมีไม่ใช่ภูมิภาคและภาษาที่ไม่ใช่ค่าเริ่มต้นไม่ใช่สหรัฐ
shpokas

คุณสามารถยกเลิกการเลือกรูปแบบแป้นพิมพ์ที่คุณเลือกเมื่อตั้งค่า Mac ครั้งแรกได้หรือไม่?
Mathias Bynens

ใช่ฉันสามารถทำได้ถ้าฉันเปลี่ยนภูมิภาคด้วย
shpokas

ดูนั่นคือปัญหา มีรูปแบบแป้นพิมพ์ในตัวของ OS X อยู่เสมอซึ่งคุณไม่สามารถลบหรือปิดการใช้งานได้
Mathias Bynens
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.