ขั้นตอนที่จำเป็นในการสร้างรูปแบบแป้นพิมพ์ใหม่บน Ubuntu คืออะไร


43

แป้นพิมพ์ที่ฉันพยายามสร้างมี Unicode จำนวนมากและมีลักษณะดังนี้: แป้นพิมพ์ที่ฉันพยายามสร้าง

ไม่ประสบความสำเร็จกับบทช่วยสอนต่อไปนี้:

  • https://help.ubuntu.com/community/Howto%3A%20Custom%20keyboard%20layout%20definitions
    (มีข้อผิดพลาดเล็กน้อยในบทช่วยสอนและใช้ภาษาที่ไม่แม่นยำเช่น "การตัด" สิ่งต่าง ๆ แทน "การลบ" พวกเขา และมันก็เป็นรูปแบบแปลก ๆ )

ฉันสงสัยว่าถ้าใครจะใจดีเพื่อให้การสอนที่ดีขึ้นพร้อมคำแนะนำทีละขั้นตอน?


2
MMH, ลักษณะเช่นนี้ซ้ำกันกับผม เสียดายที่คุณใส่คำถามของคุณแล้ว: /
Glutanimate

@ Glutanimate โอ้เรียบร้อย; ไม่เห็นว่า ฉันจะยังคงได้รับรางวัลสำหรับคำตอบที่ดีกว่าแม้ว่า
Akiva

คุณสามารถใช้ลิงค์นี้ help.ubuntu.com/community/ComposeKey
Anandu M Das

เกี่ยวข้อง: askubuntu.com/questions/228050/…
alfC

คำตอบ:


69

ในUbuntu 14.04รูปแบบแป้นพิมพ์จะถูกเก็บไว้

/usr/share/X11/xkb/symbols/


แต่ละไฟล์ในไดเรกทอรีนี้มีชุดรายการประเภทต่อไปนี้:

    คีย์ <AC01> {[a, A, aacute, Aacute]};

รายการนี้จับคู่คีย์บนคีย์บอร์ดกับอักขระจำนวนหนึ่งโดยใช้ระเบียบต่อไปนี้:

  1. < C01> ตัวอักษรตัวแรกบ่งชี้ว่าเรากำลังมองหาในบล็อกที่สำคัญตัวเลข (ตัวเลือกอื่น ๆ รวมถึงและ);AKP [for keypad]FK [for Function Key]

  2. <A C 01> ตัวอักษรตัวที่สองCระบุแถวโดยนับจากด้านล่างที่พบกุญแจ (ในแป้นพิมพ์มาตรฐานของสหรัฐอเมริกาแถบพื้นที่อยู่ในแถวAAและปุ่มตัวเลขอยู่ในแถวAE)

  3. <AC 01 > ตัวเลข01แสดงตำแหน่งของคีย์นับจากทางซ้ายและละเว้นคีย์ที่มีชื่อพิเศษเช่นTABหรือ~(tilde): AC01อยู่ในแถวที่สามขึ้นไปคีย์แรกเลื่อนมาจากด้านซ้าย (ไม่สนใจCaps Lockถ้ามี); บนแป้นพิมพ์มาตรฐานของสหรัฐอเมริกานี่คือคีย์ที่ระบุว่า "a"

  4. วงเล็บอยู่ในรายการอักขระที่กำหนดให้กับแต่ละคีย์ รายการนี้มีมากถึงสี่รายการคั่นด้วยเครื่องหมายจุลภาค:

    1. a - รหัสที่ไม่ได้แก้ไข
    2. เอ - Shiftตัวละคร
    3. á - Alt Grตัวละคร ( aacute )
    4. Á - อักขระShift+ Alt Gr( Aacute )

การสร้างแผนที่แป้นพิมพ์แบบกำหนดเองนั้นง่ายเหมือนการเปลี่ยนอักขระที่คุณไม่ต้องการในบรรทัดที่กำหนดให้กับสิ่งที่คุณทำ!

ตัวอย่างเช่น:

ในฐานะที่เป็นแองโกล Saxonist ผมพิมพ์áและÁบ่อยมากน้อยกว่าที่ผมพิมพ์และæÆ

ในการเพิ่มตัวอักษรแองโกลแซกซอนลงในรายการของฉันฉันเพียงแค่แทนที่aacuteและAacuteด้วยชื่อเอนทิตีหรือจุดโค้ด UnicodeสำหรับæและÆ(“ aelig” หรือU00E6และ“ AElig” หรือU00C6ตามลำดับ):

    คีย์ {[a, A, aelig, AElig]};

หรือ

    คีย์ {[a, A, U00E6, U00C6]};

เมื่อฉันปรับเปลี่ยนเค้าโครงแป้นพิมพ์ของฉันเสร็จแล้วฉันบันทึกไฟล์ด้วยชื่อใหม่ "oe" ในไดเรกทอรีเดียวกัน

การเพิ่มรูปแบบแป้นพิมพ์ใหม่ไปยังevdev.xmlไฟล์

เพื่อที่จะใช้รูปแบบแป้นพิมพ์ใหม่เราต้องบอกX11ว่ามันมีอยู่ ใน Ubuntu 14.04 X11ติดตามการติดตั้งคีย์บอร์ดใน/usr/share/X11/xkb/rules/evdev.xmlไฟล์ จากนั้นให้เพิ่มเลย์เอาต์ใหม่เข้าไป

  1. เปิดX11/xkb/rules/evdev.xmlในตัวแก้ไข
  2. ไปที่ส่วนท้ายของ<layoutList>ส่วน (ค้นหา</layoutList>) เพิ่มต่อไปนี้หลังจาก</layout>แท็กสุดท้ายโดยที่Xชื่อไฟล์ของรูปแบบแป้นพิมพ์ของคุณใน/usr/share/X11/xkb/symbols(ในกรณีของฉันoe); Yชื่อย่อที่เหมาะสม และZชื่อยาวที่เหมาะสมในหนึ่งหรือภาษาอื่น ๆ และทางกฎหมายสามตัวอักษร (ISO 639-2) รหัสภาษา (เช่นengสำหรับภาษาอังกฤษ):aaa

    <layout>
     <configItem>
       <name> X </name>
       <shortDescription> Y </shortDescription>
       <description> Z </description>
       <languageList>
          <iso639Id> aaa </iso639Id>
       </languageList>
     </configItem>
     <variantList/>
    </layout>
    

นี่คือทำตามคำแนะนำที่สมบูรณ์

ลิงค์ที่เกี่ยวข้องอื่น ๆ :
http://ubuntuforums.org/showthread.php?t=188761&p=1092145#post1092145 http://www.charvolant.org/~doug/xkb/html/index.html


ฉันทำงานกับโพสต์นี้เล็กน้อย เนื้อหาที่คุณให้มีคุณภาพสูงมาก แต่ก็ยังต้องใช้ความคิดของฉัน บทเรียนที่คุณเชื่อมโยงนั้นเก่าและล้าสมัยและเต็มไปด้วย "ถ้าคุณใช้ 8.04 ให้ทำ xy และ z" ฉันต้องการที่จะเห็นคำตอบการสอนเต็มรูปแบบ (ฉันแค่หวังว่าฉันจะสามารถเพิ่มเงินรางวัล)
Akiva

@Akiva ไม่ได้ช่วยคำตอบนี้กับคุณ? คุณมีปัญหาที่ไหน
αғsнιη

3
คำตอบช่วย; การอธิบาย AC01 นั้นเขียนได้ดีมาก แต่ฉันต้องการคำตอบที่ครบถ้วนกับทุกขั้นตอน เมื่อคุณเชื่อมโยงกับบทเรียนอื่น ๆ ; พวกเขาแก่แล้วและมีสามคน เพื่อประโยชน์ของผู้ใช้คนอื่นฉันอยากจะได้คำตอบแบบเต็ม ๆ ไว้ที่นี่ ตัวอย่างเช่น มีองค์ประกอบเพิ่มเติมที่พบในไฟล์ข้อความนอกเหนือจากคีย์ <ac01> {[a, b, c, d]} และยังมีไฟล์ XML ที่ต้องแก้ไข นอกจากนี้ยังมีคำถามว่าจะทดสอบสิ่งนี้อย่างไร ตามที่กล่าวไว้; ฉันควรได้รับค่าตอบแทน 500 ตัวแทนบนนี้เพราะมันเป็นงานที่ค่อนข้างใหญ่ในการสร้างการสอนที่ดี
Akiva

2
ฉันจะตอบคำถามนี้อย่างเต็มที่เพราะฉันต้องกำหนดรูปแบบแป้นพิมพ์ของฉันต่อไป เมื่อฉันได้รับมันฉันจะตอบมันอย่างถูกต้อง
Akiva

ใช้งานได้เฉพาะกับ Xorg หรือสำหรับ ttys ด้วยหรือไม่
Narcolessico

18

หมายเหตุ : Wayland ใช้ xkb แต่ xTools จำนวนมากหยุดทำงานอย่างถูกต้อง (ตัวอย่างเช่น xdotool)

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

หมายเหตุ:มีวิธีแก้ปัญหาที่รวดเร็วและสกปรก มันมีสเปรดชีตซึ่งสร้างรหัสที่คุณต้องการโดยอัตโนมัติ


ทำความเข้าใจกับไดเรกทอรี XKB

cd /usr/share/X11/xkb/ && ls
  1. types- วิธีกุญแจผลิตมีการเปลี่ยนแปลงโดยการปรับเปลี่ยนการใช้งาน (Shift, Control, Alt ~)
    สิ่งสำคัญหากคุณต้องการปรับแต่งคีย์ตัวปรับแต่ง
  2. geometry- ใช้ในการวาดกราฟิกแป้นพิมพ์
    สำคัญหากคุณกำลังออกแบบฮาร์ดแวร์แป้นพิมพ์ที่ไม่ได้มาตรฐาน
  3. rules- ดึงการกำหนดค่าที่เหมาะสมสำหรับการตั้งค่าปัจจุบันของคุณ
    คุณจะต้องกำหนดสิ่งนี้
  4. keycodes- ตัวแปลรหัสคีย์สำหรับฮาร์ดแวร์คีย์บอร์ด
    ตัวอย่าง: คีย์บอร์ด Macintosh เข้าใจ spacebar 57ดังนี้ อย่างไรก็ตามเราเขียนมันเป็น<SPCE>
  5. symbols- ซึ่งค่าที่ได้รับมอบหมายให้สิ่งที่พิมพ์ซ้ำ
    ที่นี่เราจะกำหนดโครงร่างที่กำหนดเองของเรา
  6. compat- ย่อมาจากความเข้ากันได้
    ลักษณะการทำงานภายในของปรับเปลี่ยน (Shift, Control, Alt ... )

ขั้นตอนการทำงาน

keycodes > symbols > compat

ฉันแตะเท่านั้นsymbols: ดูด้านล่างเพื่อดูวิธีแก้ปัญหาอย่างรวดเร็วและสกปรก


แผนที่สัญลักษณ์

/symbols/us ไฟล์ใด ๆ ในไดเรกทอรีนี้ตามโครงสร้างเดียวกัน

partial alphanumeric_keys
xkb_symbols "basic" {
    name[Group1]= "US/ASCII";
    key <TLDE> {        [ quoteleft,    asciitilde      ]       };
    key <AE01> {        [         1,    exclam          ]       };
    modifier_map Shift  { Shift_L, Shift_R };
};

partial - ไม่ใช่แผนที่แป้นพิมพ์ที่สมบูรณ์

alphanumeric_keysส่วนของแป้นพิมพ์ที่ถูกแมป สามารถใช้ได้หลายแบบ
หมายเหตุ:หากไม่มีการ*_keysระบุจะถือว่าแป้นพิมพ์ที่สมบูรณ์

"basic" - ชื่อของแผนที่สัญลักษณ์

name[Group1]= "US/ASCII";ให้ชื่อที่ไม่ซ้ำกับกลุ่มแป้นพิมพ์นี้

modifier_mapสำหรับการแก้ไขคีย์ตัวปรับแต่ง (ctrl, shift, alt ~)

Shift { Shift_L, Shift_R };ไม่จำเป็นโดยปกติ มันแมปทั้งกะกับตัวปรับเปลี่ยนกะหรือที่รู้จักในระดับ 2

key <TLDE> The Tilde Key - โดยปกติแล้วจะเป็นปุ่มซ้ายบนขวาเหนือ Tab

key <AE01> ภาพประกอบ - ประกอบด้วยสามส่วนAE01

  1. A= บล็อกปุ่มตัวอักษรและตัวเลข
    KP= ปุ่มกด = ปุ่ม
    FKฟังก์ชัน

  2. E= แถวบนคีย์บอร์ด
    Space Key= Arow
    Shift Key= Brow
    Caps Lock= Crow
    Tab Key= Drow

  3. 01= ตำแหน่งของคีย์ในแถว
    AE01= 1
    AB02= X
    AC05=G

[+ ]- ในภาษา C; ,วงเล็บหมายถึงรายการโดยที่รายการจะถูกแยกออกจาก ความยาวของรายการกำหนดจำนวนของระดับ ตัวอย่างเช่น:

key<AE01> { [ Level 1 , Level 2 , Level 3 , Level 4 , Level 5 ] }

โดยทั่วไประดับแสดงถึงการกดปุ่มต่อไปนี้ด้วย:

  1. ไม่มีคีย์ตัวดัดแปลง
  2. Shift
  3. Alt Gr
  4. Shift + Alt Gr
  5. Custom - ไม่น่าจะเห็นอะไรเกินระดับ 4

กล่าวโดยย่อหากคุณต้องการจับคู่กุญแจเพื่อเปลี่ยน + altgr รายการของคุณจะต้องมีความยาวอย่างน้อยสี่รายการ


คำเตือน - ข้อผิดพลาดทั่วไป

บรรทัดเหล่านี้อย่างใดอย่างหนึ่งอาจทำให้เกิดข้อผิดพลาดร้ายแรงและจะทำให้คุณไม่มีคีย์บอร์ดที่ใช้งานได้:

key<AE01> { [ Backspace ] }
key<AE02> { [ a, b, , C ] }
  • Backspaceควรเป็นBackSpace: ให้ความสนใจการสะกดอย่างระมัดระวังเป็นพิเศษ
  • VoidSymbolรายการที่ว่างเปล่าควรจะเป็น

มาตรการความปลอดภัยที่ดีที่สุด!

  1. สำรองไฟล์ของคุณที่คุณกำลังแก้ไข:

    sudo /bin/cp /usr/share/X11/xkb/symbols/us /usr/share/X11/xkb/symbols/usBACKUP

  2. สร้างสคริปต์ที่คุณสามารถรันได้โดยไม่ต้องใช้รหัสผ่านรูท

สิ่งที่ต้องการ:

#!/bin/bash
sudo /bin/cp -rf /usr/share/X11/xkb/symbols/usBACKUP /usr/share/X11/xkb/symbols/us

หากมีสิ่งใดผิดพลาดให้ใช้เมาส์ของคุณเพื่อเรียกใช้บรรทัดของรหัสนั้น (อยู่ในสคริปต์ทุบตีซึ่งคุณให้สิทธิ์ sudoers ไว้โปรดอย่าลืมchmod +xอนุญาตให้ใช้งานในลักษณะปฏิบัติการ)


กลยุทธ์การสำรองข้อมูลเพื่อกู้คืนระบบที่เสียหาย

  • คำเตือน:แป้นพิมพ์และแป้นพิมพ์บนหน้าจอจะหยุดทำงานเมื่อมีข้อผิดพลาดน้อยที่สุด
  • เมาส์จะทำงาน การพิมพ์สามารถทำได้โดยการเน้นอักขระและวางไว้โดยใช้การคลิกกลาง ใน Bash คุณสามารถreturn(กด Enter) โดยวาง linebreak
  • แป้นพิมพ์จะทำงานในโหมดการกู้คืนในรูทเชลล์ (เข้าถึงได้จากทุบตี)
  • คุณสามารถใช้สภาพแวดล้อมแบบสดๆเพื่อแก้ไขไฟล์

วิธีแก้ปัญหาที่รวดเร็วและสกปรก

  1. มานี่
  2. ไฟล์> ทำสำเนา
  3. Mapper ชีตคือที่ที่คุณกำหนดเลย์เอาต์ของคุณ
    • รายการอักขระเดี่ยวถูกแปลเป็นรหัสที่โปรแกรมเข้าใจ
      ( !กลายเป็นU0021) รองรับ Unicode!
    • สตริงจะไม่ถูกแปลและได้รับการปฏิบัติเหมือนที่เป็นอยู่ ทำให้แน่ใจว่าไม่มีข้อผิดพลาดในการสะกดคำหรือกรณี!
    • VoidSymbolสี่เหลี่ยมที่ว่างจะเต็มไปโดยอัตโนมัติด้วย
  4. XKB-Sort ชีตประกอบด้วยกลุ่มคีย์เช่น:
    key <AE01> { [U0021, U0021, U0021, U0021, U0021, U0021, U0021, U0021] };
    key <AE02> { [U005B, U005B, U005B, U005B, U005B, U005B, U005B, U005B] };
    key <AE03> { [U005D, U005D, U005D, U005D, U005D, U005D, U005D, U005D] };
    key <AE04> { [U0022, U0022, U0022, U0022, U0022, U0022, U0022, U0022] };
    key <AE05> { [U002A, U002A, U002A, U002A, U002A, U002A, U002A, U002A] };
    key <AE06> { [U007B, U007B, U007B, U007B, U007B, U007B, U007B, U007B] };
    key <AE07> { [U007D, U007D, U007D, U007D, U007D, U007D, U007D, U007D] };
    key <AE08> { [U002F, U002F, U002F, U002F, U002F, U002F, U002F, U002F] };
    key <AE09> { [U0027, U0027, U0037, U0027, U0027, U0027, U0027, U0027] };
    key <AE10> { [U0029, U0029, U0038, U0029, U0029, U0029, U0029, U0029] };
    key <AE11> { [U0028, U0028, U0039, U0028, U0028, U0028, U0028, U0028] };
    key <AE12> { [U005C, U005C, U005C, U005C, U005C, U005C, U005C, U005C] };
    
    เปลี่ยนแปลงสิ่งนี้ใน 8 ระดับทั้งหมด:
    1234567890-= // Physical Keys
    ![]"*{}/')(\ // Changed to these characters
  5. XKBแท็บยังมีเส้น แท็บอื่น ๆ สามารถละเว้นได้ (รหัสของมัน)
  6. sudo vim /usr/share/X11/xkb/symbols/us
  7. แทนที่เนื้อหาโครงร่าง เลือกหนึ่งที่คุณจะไม่ใช้ ตัวอย่างเช่น: ฉันเปลี่ยนรายการ colemak โดยปล่อยให้โครงสร้างยังคงอยู่และเปลี่ยนคีย์

สายที่น่าสนใจ:

key.type[group1]="EIGHT_LEVEL";          // Enables 8 levels
modifier_map Control { <LFSH>, <RTSH> }; // Maps ctrl`s to shift keys.
key  { [Control_R, Control_R, Control_R, Control_R, Control_R, Control_R, Control_R, Control_R] }; 
key  { [Control_L, Control_L, Control_L, Control_L, Control_L, Control_L, Control_L, Control_L] };
include "level3(lalt_switch)" // Hold Left  Alt for Level 3
include "level5(ralt_switch)" // Hold Right Alt for Level 5


บรรทัดบนสุดของคำตอบของคุณบอกว่า: "(WIP - อย่าโหวตเลย)" คำตอบดูเหมือนจะค่อนข้างสมบูรณ์สำหรับฉัน - บางทีบันทึกนี้ควรจะถูกลบออก?
MattKelly

1
@ MattKelly Ahh ฉันเพิ่งได้รับรอบเพื่ออัปเดต ฉันสร้างสเปรดชีตที่สร้างรหัสโดยอัตโนมัติตามอักขระที่คุณใส่ลงในเค้าโครงแป้นพิมพ์จำลอง
Akiva

ฟังดูเหมือนสเปรดชีตที่มีประโยชน์ - มีให้สาธารณะหรือไม่
MattKelly

@MattKelly นี่คือสำเนา มันต้องการ cruft ที่นำออกมาจำนวนมากและอาจจะมีแฮนด์บาร์บางตัวเพิ่มขึ้น แต่คุณสามารถเห็นมันสร้างรหัส: docs.google.com/spreadsheets/d/…
Akiva

วิธีการนี้ไม่อนุญาตให้มีการตั้งค่า RALT เพื่อทำหน้าที่เป็น backspace อื่นหรือการตั้งค่าคีย์แทรกเพื่อทำหน้าที่เป็น backquote / tilde
Craig Hicks
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.