หากคุณต้องการผูกเพียงไม่กี่ลำดับของแบบฟอร์ม Super + x, Super + c, Super + v ไปยังลำดับอื่นเช่น Ctrl + x, Ctrl + c, Ctrl + v เป็นต้นเพื่อให้ (ตามที่ต้องการ OP) โดยเฉพาะอย่างยิ่งลำดับ Super-key โดยทั่วไปจะแมปเพื่อตัดและวางโดยไม่กระทบการใช้งานอื่น ๆ ของปุ่ม Super ในระบบของคุณมันเป็นไปได้โดยใช้เพียงแค่ส่วนขยาย XKB ขั้นตอนด้านล่างแสดงขั้นตอนและให้ตัวอย่างที่แตกต่างกันสองอย่างของรายละเอียดสำหรับการตั้งค่าคีย์บอร์ดเริ่มต้นสองแบบ หวังว่าจะให้ข้อมูลเพียงพอที่จะปรับให้เข้ากับระบบของคุณ /usr/share/X11/xkb
มันถือว่าคุณมีความสะดวกสบายในการสร้างและแก้ไขไฟล์ในระบบของคุณรวมทั้งคนที่อยู่ในสถานที่ระบบเช่น
ตัดสินใจว่าคุณต้องการให้แผนภูมิการกำหนดค่า XKB ของคุณอยู่ที่ใด ขั้นแรกให้หาระบบหนึ่ง โดยทั่วไปแล้วจะอยู่ใน / usr / share / X11 / xkb และฉันไม่แน่ใจว่าจะค้นหามันได้อย่างไรหากไม่มี คุณสามารถค้นหาไดเรกทอรีของระบบที่ชื่อ "xkb" ได้ เมื่อใดก็ตามที่คุณพบมันคุณสามารถแก้ไขระบบได้หรือคุณสามารถใช้ไดเรกทอรีใด ๆ ที่คุณต้องการ ข้อดีของการใช้ไดเรกทอรีระบบคือคุณสามารถเรียกใช้การเปลี่ยนแปลงได้ง่ายขึ้น แต่ข้อเสียเปรียบก็คือการอัปเดตระบบในอนาคตอาจเขียนทับการเปลี่ยนแปลงของคุณ (คุณได้รับคำเตือน) ไม่ว่าในกรณีใดชื่อไฟล์ทั้งหมดที่กล่าวถึงในที่นี้จะสัมพันธ์กับไดเรกทอรีนี้ซึ่งฉันจะอ้างถึงเมื่อจำเป็นต้องใช้ $ XKBLOCAL $ และคำสั่งทั้งหมดถือว่าเป็นไดเรกทอรีปัจจุบันของคุณ
กำหนดว่า XKB "ประเภท" ของคีย์คือปุ่มใดในปัจจุบันคือ x, c, v วิธีที่ง่ายที่สุดในการทำเช่นนี้คือผ่านคำสั่งxkbcomp -a $DISPLAY - | grep -C 6 c,
(หมายเหตุเครื่องหมายจุลภาครวมอยู่ในรูปแบบโดยเจตนา) ในการตั้งค่าตัวอย่างแรกของฉันสิ่งนี้จะสร้าง:
key <AB02> {
type= "ALPHABETIC",
symbols[Group1]= [ x, X ]
};
key <AB03> {
type= "ALPHABETIC",
symbols[Group1]= [ c, C ]
};
key <AB04> {
type= "ALPHABETIC",
symbols[Group1]= [ v, V ]
};
key <AB05> {
ในขณะที่การตั้งค่าตัวอย่างอื่นของฉันนี้ผลิต
key <AB02> {
type= "FOUR_LEVEL",
symbols[Group1]= [ x, X, approxeq, dead_ogonek ]
};
key <AB03> {
type= "FOUR_LEVEL",
symbols[Group1]= [ c, C, ccedilla, Ccedilla ]
};
key <AB04> {
type= "FOUR_LEVEL",
symbols[Group1]= [ v, V, squareroot, U25CA ]
};
key <AB05> {
ผลที่สุดคือในตัวอย่างแรกปุ่มที่เกี่ยวข้องเป็นประเภท "ALPHABETIC" ในขณะที่ตัวอย่างที่สองเป็นประเภท "FOUR_LEVEL" ขึ้นอยู่กับการตั้งค่าแป้นพิมพ์ของคุณคุณอาจพบว่าเป็นประเภทอื่นทั้งหมด ในสิ่งต่อไปนี้ชนิดจะถูกเรียกว่า $ TYPE $ ซึ่งคุณต้องแทนที่ด้วยสตริง ALPHABETIC จริงหรืออะไรก็ตามในคำสั่งด้านล่าง
ค้นหาคำจำกัดความของ $ TYPE $ และคัดลอกไปยังไฟล์ใหม่ในไดเรกทอรี $ XKBLOCAL $ / types xkbcomp -a $DISPLAY - | grep -z -o 'type "$TYPE$" {[^}]*};' > types/cutpaste
ต่อไปนี้เป็นคำสั่งที่ไม่เพียงแค่ว่า: ชื่อของไฟล์ "cutpaste" ที่ฉันเลือกนั้นเป็นชื่อที่ไม่เจาะจงใช้ชื่อใดก็ได้ที่คุณชอบ แต่โปรดทราบว่าคุณจะต้องอ้างอิงไฟล์นี้อย่างสม่ำเสมอในขั้นตอนต่อไป ในการตั้งค่าครั้งแรกไฟล์นี้จะได้รับเนื้อหา
type "ALPHABETIC" {
modifiers= Shift+Lock;
map[Shift]= Level2;
map[Lock]= Level2;
level_name[Level1]= "Base";
level_name[Level2]= "Caps";
};
และในตัวอย่างอื่น ๆ มันจะได้รับเนื้อหา
type "FOUR_LEVEL" {
modifiers= Shift+LevelThree;
map[Shift]= Level2;
map[LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
};
แก้ไขประเภทไฟล์ / cutpaste เพื่อทำสองสิ่ง: เพิ่มคำนำหน้าและ postamble ที่ทำให้เป็นส่วนคำสั่ง XKB ที่เหมาะสมและแก้ไขชื่อประเภทและคำจำกัดความประเภทเพื่อเพิ่มระดับที่ผลิตโดยโมดิฟายเออร์ที่สอดคล้องกับ Super คุณควรตรวจสอบว่าโมดิฟายเออร์ใดในระบบของคุณมันน่าจะเป็น Mod4 ที่ใช้ด้านล่าง การแก้ไขที่จำเป็นควรเห็นได้จากตัวอย่างสองประเภทสุดท้าย / ประเภทของยาสีฟัน ได้แก่ :
default partial xkb_types "addsuper" {
type "ALPHABETIC_SUPER" {
modifiers= Shift+Lock+Mod4;
map[Shift]= Level2;
map[Lock]= Level2;
map[Mod4]= Level3;
map[Shift+Mod4]= Level3;
map[Lock+Mod4]= Level3;
level_name[Level1]= "Base";
level_name[Level2]= "Caps";
level_name[Level3]= "With Super";
};
};
และ
default partial xkb_types "addsuper" {
type "FOUR_LEVEL_SUPER" {
modifiers= Shift+LevelThree+Mod4;
map[Shift]= Level2;
map[LevelThree]= Level3;
map[Shift+LevelThree]= Level4;
map[Mod4]= Level5;
map[Shift+Mod4] = Level5;
map[LevelThree+Mod4] = Level5;
map[Shift+LevelThree+Mod4] = Level5;
level_name[Level1]= "Base";
level_name[Level2]= "Shift";
level_name[Level3]= "Alt Base";
level_name[Level4]= "Shift Alt";
level_name[Level5]= "With Super"';
};
};
คัดลอกคำจำกัดความสัญลักษณ์กุญแจที่ถูกส่งออกโดย grep ในขั้นตอนที่สองไปยังสัญลักษณ์ไฟล์ / cutpaste ใหม่ที่สองและเพิ่มคำนำหน้าและ postamble ที่คล้ายกันและแก้ไขคำจำกัดความเพื่อใช้ประเภทใหม่และเพิ่มการดำเนินการกับคำจำกัดความ ผลิตโดยรุ่น Super ผลลัพธ์ของสิ่งนี้ในสองตัวอย่างของเราคือ:
default partial xkb_symbols "superversions" {
replace key <AB02> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ x, X, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
};
replace key <AB03> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ c, C, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
};
replace key <AB04> {
type[Group1]= "ALPHABETIC_SUPER",
symbols[Group1]= [ v, V, NoSymbol ],
actions[Group1]= [ NoAction(), NoAction(), RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
};
};
และ
default partial xkb_symbols "superversions" {
replace key <AB02> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [x,X,approxeq,dead_ogonek,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
};
replace key <AB03> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [c,C,ccedilla,Ccedilla,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
};
replace key <AB04> {
type[Group1]= "FOUR_LEVEL_SUPER",
symbols[Group1]= [v,V,squareroot,U25CA,NoSymbol],
actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
};
};
โปรดทราบว่าในตัวอย่างที่สองฉันบีบพื้นที่ว่างบางส่วน (ไม่สำคัญ) ออกไปเช่นกันเพื่อรักษาความยาวบรรทัดภายใต้การควบคุมเล็กน้อย
ค้นหาชื่อของชุดกฎที่ XKB ใช้อยู่ในปัจจุบัน setxkbmap -query
นั่นเป็นเรื่องง่ายก็แสดงในผลมาจากการ ในกรณีของฉันมันคือ "evdev"
คัดลอกเวอร์ชันระบบของ rules / evdev (หรือชื่อชุดกฎของคุณ) ไปที่ $ XKBLOCAL $ / rules / evdev และเพิ่มกฎที่ชี้ไปที่ตัวเลือกที่เราสร้างขึ้น คุณมีสองตัวเลือกที่นี่: คุณสามารถคัดลอก evdev ทั้งหมดหรือเพียงบางส่วนที่กล่าวถึงรูปแบบแป้นพิมพ์เค้าโครงตัวแปรและตัวเลือกที่คุณใช้จริง แน่นอนถ้าคุณกำลังแก้ไขไฟล์ระบบอยู่คุณไม่จำเป็นต้องทำการคัดลอกใด ๆ เพียงแค่ทำการแก้ไข
ในกรณีนี้สิ่งที่เพิ่มเข้ามาจะเหมือนกันโดยไม่คำนึงถึงการตั้งค่าแป้นพิมพ์เริ่มต้นดังนั้นจึงมีเพียงตัวอย่างเดียว คุณค้นหาส่วนของไฟล์กฎที่ขึ้นต้นด้วย! option = symbols
และเพิ่มบรรทัดcutpaste:super = +cutpaste
ในส่วนนั้นและคุณยังพบส่วนของไฟล์กฎที่เริ่มต้นด้วย! option = types
และบรรทัดcutpaste:super = +cutpaste
ไปยังส่วนนั้นด้วย
คัดลอกเวอร์ชันระบบของ evdev.lst และเพิ่มบรรทัดสำหรับตัวเลือกใหม่ของคุณ โปรดทราบว่าชื่อของไฟล์นี้จะสอดคล้องกับชื่อของไฟล์กฎด้วย. lst ต่อท้าย เช่นเดียวกับในขั้นตอนก่อนหน้าคุณสามารถคัดลอกไฟล์ทั้งหมดหรือเพียงแค่ส่วนที่อ้างอิงโดยรูปแบบเค้าโครงตัวแปรและตัวเลือกที่คุณใช้ คุณเพียงแค่ต้องค้นหาส่วนของไฟล์นี้ที่ขึ้นต้นด้วย! option
และเพิ่มบรรทัดดังนี้: cutpaste:super Add super equivalents of cut and paste operations
ในส่วนนั้น
ตกลงตอนนี้ไฟล์การกำหนดค่าทั้งหมดเข้าที่แล้ว setxkbmap -option cutpaste:super
หากคุณปรับเปลี่ยนระบบไฟล์ตอนนี้คุณสามารถเรียกใช้ตัวเลือกใหม่ของคุณด้วย ในทางกลับกันถ้าคุณไม่ทำคุณต้องแจ้งให้ setxkbmap ทราบว่าไดเรกทอรี $ XKBLOCAL $ ของคุณอยู่ที่ไหน สิ่งที่แย่กว่านั้นคือเซิร์ฟเวอร์ไม่ทราบว่าไดเรกทอรีนั้นอยู่ที่ไหนและ setxkbmap ไม่ได้ (หรืออาจไม่สามารถทำได้เนื่องจากเซิร์ฟเวอร์อาจใช้งานเครื่องอื่นในท้ายที่สุด) ดังนั้นคุณต้องไพพ์เอาท์พุทของ setxkbmap ไปยัง xkbcomp และยังบอกคำสั่งนั้นว่าไดเรกทอรี $ XKBLOCAL ของคุณอยู่ที่ไหน ดังนั้นบรรทัดคำสั่งsetxkbmap -I$XKBLOCAL$ -option cutpaste:super -print | xkbcomp -I$XKBLOCAL - $DISPLAY
ทั้งหมด
หวังว่านี่จะเป็นความช่วยเหลือ / ความสนใจต่อใครบางคนเนื่องจากเอกสาร / อ้างอิง XKB ที่ชัดเจนที่ดีนั้นหายาก หนึ่งในการอ้างอิงที่เป็นประโยชน์มากเป็นhttp://madduck.net/docs/extending-xkb/