การตั้งค่าตัวดัดแปลงไฮเปอร์และ Super สำหรับบางคีย์ด้วย setxkbmap หรือ xmodmap


6

ปัญหา: ฉันต้องการแก้ไข / กำหนดรูปแบบแป้นพิมพ์ของฉันใหม่ (pc105 se) เพื่อให้เมื่อฉันกดแป้นบางปุ่มด้วย mod3 (super) และ mod4 (hyper) อักขระที่แตกต่างกันจะถูกส่งกลับมากกว่าปกติ

เช่น.

Keycode 61 สร้าง 'ลบ' (-) เมื่อกดตามปกติและ 'ขีดล่าง' (_) เมื่อกดปุ่ม Shift เมื่อกดด้วยกลุ่มตัวแก้ไขแรก (AltGr) 'dead_belowdot' และ 'dead_abovedot' จะถูกสร้างขึ้น (โดยไม่มี / พร้อมกะ)

สิ่งที่ฉันต้องการก็คือ paranthesis ด้านซ้ายหรือ paranthesis ด้านขวา (โดยไม่ต้อง / พร้อม shift) เมื่อฉันกดปุ่มด้วยปุ่ม Super (win) แล้วกดและเครื่องหมายทับ / แบ็กสแลชสำหรับปุ่ม Hyper (ซึ่งฉันได้กำหนดค่าเป็น Caps Lock)

ฉันพยายามเพิ่ม .Xmodmap ไปยังไดเรกทอรีบ้านของฉันและเรียกใช้ด้วย xmodmap ~/.Xmodmap ใช้ไวยากรณ์ต่อไปนี้

keycode 61 = minus underscore a b c d e f g h i j k l m n o p

อย่างไรก็ตามนั่นจะทำให้ AltGr ส่งผลให้ c / d ในขณะที่ win / caps lock ยังคงให้ผลลัพธ์ใน - / _ เท่านั้น

ฉันได้ลองแก้ไข / usr / share / X11 / xkb / symbols / se โดยตรงและลองการเปลี่ยนแปลงต่อไปนี้:

key <BKSL>  { [apostrophe, asterisk, acute, multiply], [a,b,c,d], [e,f,g,h], [i,j,k,l]};

แต่สิ่งที่เกิดขึ้นคือ '*´ × '*' * (สำหรับปกติ, altgr, win และ caps lock ตามลำดับ) ฉันได้ลองแล้ว

key <BKSL>  { [apostrophe, asterisk, acute, multiply, a,b,c,d, e,f,g,h, i,j,k,l]};

แต่ทันทีที่มีมากกว่าสี่ฟิลด์ที่ระบุดูเหมือนว่าจะทำลายคีย์ทั้งหมดและคีย์จะกลับไปสู่พฤติกรรมเริ่มต้น pc105 (us?)

เนื่องจากฉันไม่พบอะไรใน stackoverflow superuser หรือ google เกี่ยวกับวิธีจัดการกับสถานการณ์ของฉันฉันถามที่นี่

นี่เป็นของฉัน xmodmap -pm

xmodmap:  up to 3 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock      
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        Hyper_L (0x42),  Hyper_L (0xcf)
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

2
หากคุณพบสิ่งใดที่คุณสามารถโพสต์คำตอบของคุณที่นี่? (นั่นคือ: ตอบคำถามของคุณเอง) ฉันประหลาดใจกับความซับซ้อนของงานเล็กน้อยที่ดูเหมือนว่าจะซับซ้อนและแทบไม่มีข้อมูลใด ๆ ในเน็ต มันบ้าไปแล้ว
Cedric Martin

ฉันจะ. แต่สำหรับตอนนี้ฉันยังอยู่ในขั้นตอนของการอ่านข้อผิดพลาดและการอ่านคู่มืออย่างต่อเนื่อง
Aron Cederholm

ฉันยังสงสัยว่าทำไม AltGr เริ่มต้นจะไม่ทำงานกับปุ่มทั้งหมดในลักษณะเดียวกัน ... unix.stackexchange.com/questions/249122/...
Pavel Šimerda

คำตอบ:


8

สองปีต่อมาในที่สุดฉันก็ภูมิใจที่จะตอบคำถามของฉันเอง

ฉันพบวิธีที่ง่ายที่สุดน่าเชื่อถือที่สุดและขยายได้มากที่สุดคือการพึ่งพา แต่เพียงผู้เดียว xmodmap.

1. รับรหัสของคีย์พิเศษ

วิ่ง xev เพื่อกำหนดรหัสคีย์ของคีย์ที่คุณต้องการใช้เป็นตัวสลับโหมด จากนั้นกดปุ่มที่คุณสนใจและจดบันทึก keycode

$ xev
KeyRelease event, serial 40, synthetic NO, window 0x2600001,
    root 0x2a6, subw 0x0, time 1221887800, (885,743), root:(3447,805),
    state 0x2010, keycode 66 (keysym 0xff7e, Mode_switch), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

รหัสคือรหัสบรรทัดที่สามรหัส 66

สำหรับฉันนี่คือกุญแจที่ฉันสนใจเป็นพิเศษและรหัสกุญแจที่เกี่ยวข้องสำหรับฉัน:

  • Caps Lockรหัส key 66
  • Pause|Breakรหัส key 128
  • Left Windows keyรหัส key 133
  • Num Lockรหัสคีย์ 77

2. ตั้งค่าปุ่มตัวสลับ

นี่คือการตั้งค่าที่ฉันเลือก แต่คุณสามารถเลือกการตั้งค่าของคุณเอง ฉันบันทึกสิ่งนี้ลงไฟล์แล้ว $HOME/.xmodmap.

~/.xmodmap
keycode  66 = Mode_switch
keycode 127 = Multi_key
keycode 133 = Super_L
...

ด้วยวิธีนี้ฉันได้ผูกพัน Caps Lock ไปยัง Mode_switch, Pause Break ไปยัง Compose และทางซ้าย Win กุญแจสำคัญในการ Super_L. Compose กุญแจมีประโยชน์อย่างยิ่งเนื่องจากช่วยให้สามารถรวมสองปุ่มเข้ากับการมัดได้ เช่น. Compose ติดตามโดย T และ M ผลลัพธ์ในเครื่องหมายเครื่องหมายการค้า .

3. รับการโยงคีย์แมปปัจจุบันของ xmodmap

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

$ xmodmap -pke | ag 'keycode  51' 

แน่นอนคุณสามารถใช้งานได้อย่างง่ายดาย grep หรือ ackขึ้นอยู่กับเครื่องมือที่คุณต้องการใช้

$ xmodmap -pke | grep 'keycode  41' 
$ xmodmap -pke | ack 'keycode  31' 

ผลลัพธ์ของสิ่งนี้อยู่ในรูปแบบเดียวกับที่คุณระบุไว้ในของคุณ ~/.xmodmap อย่างนี้:

keycode  31 = i I i I rightarrow idotless rightarrow idotless i I rightarrow idotless i I rightarrow idotless

4. สำรองข้อมูลที่มีอยู่ของคุณ xmodmap

ในกรณีที่มีบางอย่างผิดปกติมันก็เป็นความคิดที่ไม่ดีเลยที่จะมีปัจจุบันของคุณ xmodmap พร้อมที่จะถอยกลับไปได้อย่างง่ายดาย

$ xmodmap -pke > ~/.xmodmap.bak

5. เพิ่มอักขระในคีย์ของคุณในระดับ 2, 3, 4

เท่าที่ฉันเข้าใจรูปแบบของ .xmodmap ไฟล์เป็นเช่นนี้:

keycode <keycode> = <1st level> <Shift+1st> <2nd level> <shift+2nd> <3rd level> <shift+3rd level> <4th level> <shift+4th> ...

ตอนนี้ฉันไม่เข้าใจทุกระดับเหล่านั้น แต่ Mode_Switch ( Caps Lock ในกรณีของฉัน) จะให้ระดับ 2 และ Alt Gr ให้ระดับ 3 กับฉันและนั่นก็คือทั้งหมดที่ฉันสนใจดังนั้นฉันจึงออกจากส่วนที่เหลือตามที่ฉันเป็น ~/.xmodmap.bak และเพิ่งเปลี่ยนคอลัมน์ 3, 4, 5 และ 6 (ระดับ 2 และ 3, บวกกะ) เป็นอักขระที่ถูกต้อง ( ดูที่นี่เพื่อดูรายการอักขระที่ถูกต้อง )

~/.xmodmap
...
keycode  51 = apostrophe asterisk dollar ampersand acute multiply acute multiply apostrophe asterisk acute multiply apostrophe asterisk acute multiply
keycode  59 = comma semicolon parenleft parenright dead_cedilla dead_ogonek dead_cedilla dead_ogonek comma semicolon dead_cedilla dead_ogonek comma semicolon dead_cedilla dead_ogonek
keycode  60 = period colon bracketleft bracketright periodcentered dead_abovedot periodcentered dead_abovedot period colon periodcentered dead_abovedot period colon periodcentered dead_abovedot
keycode  61 = minus underscore braceleft braceright slash backslash braceleft braceright
keycode  65 = space space space space space underscore space space
...

6. ทดสอบของคุณ .xmodmap

ตอนนี้ขอ xmodmap ดำเนินการของคุณ .xmodmap และทดสอบรูปแบบแป้นพิมพ์ใหม่ของคุณ

$ xmodmap /home/user/.xmodmap

7. ตรวจสอบให้แน่ใจว่าเค้าโครงแป้นพิมพ์ของคุณถูกโหลดบน x init

ฉันเพิ่มสิ่งนี้ลงใน $HOME/.xinitrc:

~/.xinitrc
...
[-f $HOME/.xmodmap] && xmodmap $HOME/.xmodmap
...

ฉันหวังว่านี่จะเป็นประโยชน์!

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