การสลับคีย์ AltGr และ Space ใน Kali - Firefox จะไม่ได้รับผลกระทบ

Jan 04 2021

หลังจากที่พยายามหลายSpaceและAltGrความคิดที่สำคัญแมปเปลี่ยนxkbรูปลักษณ์ที่มีแนวโน้มมากที่สุด ฉันอ่านและใช้แนวคิดเหล่านี้ที่เกี่ยวข้องกับxkb: ทำการ
แมปคีย์ altgr ใหม่เป็น AC10 ใน XKB
ฉันจะทำการแมปคีย์คีย์บอร์ดได้อย่างไร

จากการมองครั้งแรกการแก้ไขของฉันดูเหมือนจะใช้ได้ในโปรแกรมแก้ไขข้อความและในเทอร์มินัล ( Spaceสัญลักษณ์ถูกพิมพ์เมื่อAltGrกดแป้น) อย่างไรก็ตามใน Firefox จะไม่ทำงาน เมื่อมองอย่างใกล้ชิดมากขึ้นฉันสังเกตเห็นว่าในการผสมคีย์แอปพลิเคชันทั้งสามพร้อมกับการAltGrทำงาน (ราวกับว่าไม่มีการแมปใหม่) ยกเว้นในเทอร์มินัลและในโปรแกรมแก้ไขข้อความชุดค่าผสมจะพิมพ์อักขระเว้นวรรคเพิ่มเติม เช่นในเทอร์มินัลและใน FireFox ชุดค่าผสมAltGr+ จะFเปิดเมนูไฟล์และในเทอร์มินัลจะมีการพิมพ์อักขระช่องว่าง

ฉันเสียและผมก็ไม่ได้ใช้Space AltGrฉันแค่ต้องการสลับฟังก์ชันการทำงานทั้งหมด ฉันขาดอะไรไป? (ฉันใช้ Kali Linux)

นี่คือสิ่งที่ฉันทำ:
1.เปิดแล้ว/usr/share/X11/xkb/symbols/pc
2.เปลี่ยนบรรทัดความคิดเห็นกับรายการด้านล่าง:

 // key <SPCE> {    [    space      ]   };
 key <SPCE> {   [ ISO_Level3_Shift  ]   };

3. เพิ่มบรรทัดเหล่านี้:

// Additionally added
key <RALT> {    [    32     ]   };

4.บันทึกpcไฟล์
5.ล้างxkbแคชที่กำลังเรียกใช้rm -rf /var/lib/xkb/*
6.Restarted


ข้อมูลเพิ่มเติม (หลังจากการเปลี่ยนแปลงตามรายการด้านบน)

pcไฟล์ปัจจุบันแบบเต็ม:

default  partial alphanumeric_keys modifier_keys
xkb_symbols "pc105" {

    key <ESC>  {    [ Escape        ]   };

    // The extra key on many European keyboards:
    key <LSGT> {    [ less, greater, bar, brokenbar ] };

    // The following keys are common to all layouts.
    key <BKSL> {    [ backslash,    bar ]   };
    // key <SPCE> { [    space      ]   };
    key <SPCE> {    [ ISO_Level3_Shift  ]   };

    include "srvr_ctrl(fkey2vt)"
    include "pc(editing)"
    include "keypad(x11)"

    key <BKSP> {    [ BackSpace, BackSpace  ]   };

    key  <TAB> {    [ Tab,  ISO_Left_Tab    ]   };
    key <RTRN> {    [ Return        ]   };

    key <CAPS> {    [ Caps_Lock     ]   };
    key <NMLK> {    [ Num_Lock      ]   };

    key <LFSH> {    [ Shift_L       ]   };
    key <LCTL> {    [ Control_L     ]   };
    key <LWIN> {    [ Super_L       ]   };

    key <RTSH> {    [ Shift_R       ]   };
    key <RCTL> {    [ Control_R     ]   };
    key <RWIN> {    [ Super_R       ]   };
    key <MENU> {    [ Menu          ]   };

    // Beginning of modifier mappings.
    modifier_map Shift  { Shift_L, Shift_R };
    modifier_map Lock   { Caps_Lock };
    modifier_map Control{ Control_L, Control_R };
    modifier_map Mod2   { Num_Lock };
    modifier_map Mod4   { Super_L, Super_R };

    // Fake keys for virtual<->real modifiers mapping:
    key <LVL3> {    [ ISO_Level3_Shift  ]   };
    key <MDSW> {    [ Mode_switch       ]   };
    modifier_map Mod5   { <LVL3>, <MDSW> };

    key <ALT>  {    [ NoSymbol, Alt_L   ]   };
    include "altwin(meta_alt)"

    key <META> {    [ NoSymbol, Meta_L  ]   };
    modifier_map Mod1   { <META> };

    key <SUPR> {    [ NoSymbol, Super_L ]   };
    modifier_map Mod4   { <SUPR> };

    key <HYPR> {    [ NoSymbol, Hyper_L ]   };
    modifier_map Mod4   { <HYPR> };
    // End of modifier mappings.

    key <OUTP> { [ XF86Display ] };
    key <KITG> { [ XF86KbdLightOnOff ] };
    key <KIDN> { [ XF86KbdBrightnessDown ] };
    key <KIUP> { [ XF86KbdBrightnessUp ] };

    // Additionally added
    key <RALT> {    [    32     ]   };

};

hidden partial alphanumeric_keys
xkb_symbols "editing" {
    key <PRSC> {
    type= "PC_ALT_LEVEL2",
    symbols[Group1]= [ Print, Sys_Req ]
    };
    key <SCLK> {    [  Scroll_Lock      ]   };
    key <PAUS> {
    type= "PC_CONTROL_LEVEL2",
    symbols[Group1]= [ Pause, Break ]
    };
    key  <INS> {    [  Insert       ]   };
    key <HOME> {    [  Home         ]   };
    key <PGUP> {    [  Prior        ]   };
    key <DELE> {    [  Delete       ]   };
    key  <END> {    [  End          ]   };
    key <PGDN> {    [  Next         ]   };

    key   <UP> {    [  Up           ]   };
    key <LEFT> {    [  Left         ]   };
    key <DOWN> {    [  Down         ]   };
    key <RGHT> {    [  Right        ]   };
};

setxkbmap -print:

xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+us+inet(evdev)" };
    xkb_geometry  { include "pc(pc105)" };
};

xev( AltGrข่าวประชาสัมพันธ์):

KeyPress event, serial 34, synthetic NO, window 0x3400001,
    root 0x6cb, subw 0x0, time 1249191, (168,-8), root:(797,298),
    state 0x0, keycode 108 (keysym 0x20, space), same_screen YES,
    XLookupString gives 1 bytes: (20) " "
    XmbLookupString gives 1 bytes: (20) " "
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x3400001,
    root 0x6cb, subw 0x0, time 1249261, (168,-8), root:(797,298),
    state 0x8, keycode 108 (keysym 0x20, space), same_screen YES,
    XLookupString gives 1 bytes: (20) " "
    XFilterEvent returns: False

เนื่องจากคีย์แป้นพิมพ์ของฉันSpaceเสียฉันจึงไม่สามารถแสดงxevได้

คำตอบ

3 Maik93 Jan 08 2021 at 01:35

ฉันได้ทำให้มันใช้งานได้จริง แต่xkeymapฉันปล่อยไว้ที่นี่เป็นคำตอบอื่นเพราะวิธีนี้แตกต่างจากวิธีการแก้ปัญหาก่อนหน้านี้อย่างสิ้นเชิง

บางทีคุณอาจพลาดAltGrการใช้งานบางอย่างไป

พยายามที่จะเลียนแบบการตั้งค่าของคุณเราได้ส่งออกแฟ้มการกำหนดค่าในปัจจุบันมีคำสั่งxkbcomp $DISPLAY current.xkbและแก้ไขได้โดยการลบทั้งหมดISO_Level3_Shift, LVL3และMod5เหตุการณ์ที่เกิดขึ้น

แน่นอนสิ่งที่ฉันลบไปคือ:

interpret ISO_Level3_Shift+AnyOf(all) {
    virtualModifier= LevelThree;
    useModMapMods=level1;
    action= SetMods(modifiers=LevelThree,clearLocks);
};
interpret ISO_Level3_Shift+AnyOfOrNone(all) {
    action= SetMods(modifiers=LevelThree,clearLocks);
};
key <LVL3> {
    type= "ONE_LEVEL",
    symbols[Group1]= [ ISO_Level3_Shift ]
};
key <RALT> {
    type= "ONE_LEVEL",
    symbols[Group1]= [ ISO_Level3_Shift ]
};
modifier_map Mod5 { <LVL3> };

จากนั้นฉันได้แทรก:

key <LVL3> {[space]};
key <RALT> {[space]};

การกำหนดค่าที่แก้ไขนี้สามารถทดสอบได้โดยการโหลดด้วยไฟล์

xkbcomp new_conf.xkb $DISPLAY
1 Maik93 Jan 07 2021 at 16:56

ฉันไม่พบข้อมูลอ้างอิงใด ๆ ที่พิสูจน์ได้ว่าสิ่งที่คุณเสนอไม่ควรทำงานบน Firefox ในขณะที่ดูเหมือนว่า Chromium (ดังนั้น Chrome) ไม่ได้อาศัย xkeymaps: เป็นตัวเลือกที่กำลังพัฒนาซึ่งรวมโปรแกรมไว้ใน ChromeOS ได้ดีขึ้น ดังนั้นจึงไม่รองรับการรีแมประบบบางอย่าง

การแก้ไขที่ได้ผลสำหรับฉันคือทำการแมปรหัสคีย์ใหม่ที่ระดับเคอร์เนล เพื่อให้บรรลุสิ่งนี้ฉันได้รวบรวมรหัสสแกน (รหัสฮาร์ดแวร์ของคีย์) และรหัสคีย์ (สัญลักษณ์ที่มีการแมป) สำหรับทั้งช่องว่างและ altGr:

# to collect scan-codes
sudo showkey -s
# space press: 0x39
# altGr press: 0xe0 0x38

# to collect key-codes
sudo showkey
# space press: 57
# altGr press: 100

เท่าที่ฉันเข้าใจคุณต้องการแมป altGr ใหม่เป็นช่องว่างเนื่องจาก Spacebar ของคุณเสียดังนั้น:

sudo setkeycodes e038 57

ควรทำเคล็ดลับ


ในการทำให้สิ่งนี้เป็นแบบถาวรภายใต้ Kali Linux คุณต้องแก้ไขไฟล์ xinit เริ่มต้น/etc/xdg/xfce4/xinitrcโดยจัดการ~/.xinitrcและแทรกsudo setkeycodes e038 57ก่อนคำสั่ง if ที่มีexec xfce4-session; บนไฟล์เริ่มต้น Kali 20.04 ถ้าคำสั่งนี้อยู่ในบรรทัด 86

โปรดทราบว่าสิ่งนี้จำเป็นต้องเปิดใช้งาน sudo โดยไม่ต้องใช้รหัสผ่าน ) แต่เท่าที่ฉันจำได้นี่เป็นตัวเลือกเริ่มต้นใน Kali แล้ว