ใช้ setxkbmap เพื่อสลับซ้ายกะและซ้ายควบคุม


17

มันเป็นไปได้ที่จะสลับซ้ายShiftและซ้ายCTRLปุ่มใช้setxkbmapแทนxmodmap?

แก้ไข

ฉันได้เปลี่ยนมาใช้Fcitxซึ่งทำงานได้ดีกว่ากับรูปแบบแป้นพิมพ์และรูปแบบแป้นพิมพ์ที่กำหนดเองได้ดีกว่า IBus ทุกประการ ฉันขอแนะนำอย่างยิ่ง

คำตอบ:


28

xmodmapล้าสมัย; ดังนั้นแน่นอนควรทำด้วยxkbเครื่องมือ

การสลับที่คุณต้องการดูเหมือนจะไม่รวมอยู่ในไฟล์ X11 ที่เป็นค่าเริ่มต้น ดังนั้นคุณต้องเขียนเอง

หน้าhttp://madduck.net/docs/extending-xkb/ช่วยให้ฉันเข้าใจและหาวิธีที่จะทำ

สร้างไฟล์~/.xkb/keymap/mykbdที่คุณใส่ผลลัพธ์setxkbmapมันจะเป็นคำจำกัดความแป้นพิมพ์ฐานของคุณ เช่น:

setxkbmap -print > ~/.xkb/keymap/mykbd

จากนั้นสร้างไฟล์สัญลักษณ์เพื่อกำหนดการสลับคีย์ของคุณใส่ไว้ใน ~/.xkb/symbols/myswap

ที่นั่นใส่บรรทัดต่อไปนี้:

partial modifier_keys
xkb_symbols "swap_l_shift_ctrl" {
    replace key <LCTL>  { [ Shift_L ] };
    replace key <LFSH> { [ Control_L ] };
};

จากนั้นแก้ไข~/.xkb/keymap/mykbdไฟล์และเปลี่ยนxkb_symbolsบรรทัดเพื่อเพิ่ม

+myswap(swap_l_shift_ctrl)

ในที่สุดคุณสามารถโหลดได้ด้วยxkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY(คุณไม่สามารถใช้-Iพารามิเตอร์"~" ได้) มันอาจจะคายคำเตือนมากมายเกี่ยวกับสัญลักษณ์ที่ไม่ได้กำหนดสำหรับคีย์ที่หายากบางตัว แต่คุณสามารถเพิกเฉยต่อมัน2> /dev/nullได้

หากคุณต้องการที่จะสามารถสลับระหว่าง ctrl / กลับด้านปกติและกลับด้านได้อย่างง่ายดาย เพียงแค่สร้างภายใต้~/.xkb/keymap/ไฟล์อื่นโดยไม่ต้องพิเศษ "myswap" xkbcompตัวเลือกและโหลดด้วย คุณสามารถสร้างสคริปต์ขนาดเล็กสองสคริปต์เพื่อโหลดได้


1
ขอบคุณ มันใช้งานได้ แต่ครั้งเดียว ปัญหาคือว่าฉันใช้เครื่องมือป้อนข้อมูลที่เรียกว่า IBus เมื่อใดก็ตามที่ฉันเปลี่ยนวิธีการป้อนข้อมูลจากนั้นย้อนกลับด้วยการกดปุ่ม "Ctrl + Space" ปุ่ม Shift ซ้ายและการควบคุมด้านซ้ายจะเปลี่ยนกลับ ข้อเสนอแนะใด ๆ เกี่ยวกับวิธีการหลีกเลี่ยง
วันที่

อืมมมบางที IBus จะทำการกำหนดแป้นพิมพ์ใหม่ด้วยตัวเอง ลองใช้xkbcomp $DISPLAY some.dumpก่อนและก่อนที่จะโทรหา IBus และทำสิ่งที่แตกต่างระหว่างการทิ้งทั้งสอง (นั่นคือการกำหนดแป้นพิมพ์ที่สมบูรณ์); คุณอาจจะเห็นความแตกต่าง
Pablo Saratxaga

อืมมันน่ารำคาญขนาดไหน มีแนวคิดใดที่จะกำจัดปัญหาได้บ้าง ขอให้สังเกตว่าคำสั่งใช้setxkbmap -option caps:escapeงานได้ IBus จดจำปุ่มสลับที่ Esc และ Caps_Lock แต่มันไม่ได้ทำสำหรับปุ่ม Shift ซ้ายและปุ่มควบคุมด้านซ้าย
วันที่

บางที IBus จะอ่านคีย์บอร์ดเมื่อเปิดตัว ลองยกเลิกการโหลด IBus เปลี่ยนแป้นพิมพ์และโหลดอีกครั้ง หากปัญหายังคงมีอยู่ควรทำคำถามเฉพาะของ IBus (และอาจรายงานข้อผิดพลาด; imho is, IBus ควรตรวจสอบการเปลี่ยนแปลงของแป้นพิมพ์และให้เกียรติพวกเขา)
Pablo Saratxaga

สวัสดี มีใครบอกฉันได้ไหมว่าฉันจะใช้เทคนิคเดียวกันนี้เพื่อสลับแป้น Alt ซ้ายกับแป้นควบคุมด้านซ้ายได้อย่างไร ฉันพยายามเปลี่ยนไฟล์ myswap เป็น: modifier_keys บางส่วน xkb_symbols "swap_l_shift_ctrl" {แทนที่คีย์ <LCTL> {[Alt_L]}; แทนที่คีย์ <LALT> {[Control_L]}; }; แต่มันไม่ทำงาน TIA !!!
Neil Girardi

3

ฉันพบปัญหาบางอย่างในการทำแผนที่LALTเพื่อControl_Lใช้โซลูชันของ Pabloดูเหมือนว่าคุณจำเป็นต้องตั้งค่าmodifier_mapตัวเลือกเช่นกัน

ฉันคัดลอกแม่แบบจาก/usr/share/X11/xkb/symbols/altwin- มองหาxkb_symbols "ctrl_alt_win"- และแก้ไขเพื่อตั้งค่าการเปลี่ยนแปลงต่อไปนี้:

  • แป้น LALT เพื่อการควบคุม **
  • ปุ่ม LWIN ไปที่ Alt
  • ปุ่ม MENU ถึงปุ่ม Windows

~/.xkb/symbols/myswapไฟล์สุดท้ายคือ:

partial modifier_keys
xkb_symbols "swap" {
   key <MENU> {     [   Super_L     ]   };
   key <LALT> { [ Control_L, Control_L  ] };
   key <RALT> { type[Group1] = "TWO_LEVEL",
                symbols[Group1] = [ Alt_R, Meta_R ] };
   key <LWIN> { [ Alt_L, Meta_L ] };
   key <LCTL> { [ Control_L ] };
   key <RCTL> { [ Control_R ] };
   modifier_map Control { <LALT>, <LCTL>, <RCTL> };
   modifier_map Mod1 { <LWIN>, <RALT> };
   modifier_map Mod4 { <MENU> };
};

ฉันยังเพิ่ม-w0กับxkbcompคำสั่งที่จะหลีกเลี่ยงการส่งออกการเตือนใด ๆ เมื่อเปิดเปลือกใหม่

xkbcomp -w0 -I$HOME/.xkb $HOME/.xkb/keymap/mykbd $DISPLAY

** การสลับระหว่าง Mac กับ Linux ฉันชอบมีปุ่มควบคุมสองปุ่มบน Linux เพื่อประมาณแป้นพิมพ์ Mac สำหรับหน่วยความจำกล้ามเนื้อของฉัน

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