หากคุณต้องการผูกเพียงไม่กี่ลำดับของแบบฟอร์ม 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/