CapsLock เป็นคีย์ตัวดัดแปลงสำหรับแอปพลิเคชันคีย์แม็พ


11

ฉันเป็นนักพัฒนาและขณะนี้ฉันกำลังใช้ Ubuntu Linux กับ PyCharm IDE สำหรับการพัฒนาเว็บไซต์ เพื่อปรับปรุงประสิทธิภาพการพิมพ์ฉันพิจารณาเปลี่ยน CapsLock เป็น Hyper_L และกำหนดให้ mod3 โดยใช้ xmodmap หลังจากนี้ฉันต้องการแมป mod3 สำหรับปุ่ม 'i' ถึง 'Up' จนถึงสิ่งที่ฉันทำคือ:

xmodmap -e "keysym Caps_Lock = Hyper_L"

ผลลัพธ์เป็นเช่นนี้:

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

แล้วฉันจะลบ Hyper_L จาก mod4

xmodmap -e "remove Mod4 = Hyper_L"

หลังจากนั้นฉันลองกำหนด Hyper_L ให้ mod3

xmodmap -e "add Mod3 = Hyper_L"

อย่างไรก็ตามฉันมีข้อผิดพลาดดังต่อไปนี้:

X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  118 (X_SetModifierMapping)
  Value in failed request:  0x17
  Serial number of failed request:  11
  Current serial number in output stream:  11

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

PS ฉันใช้แป้นพิมพ์ Microsoft Natural Ergonomic 7000

คำตอบ:


20

มีคำตอบทางอินเทอร์เน็ตมากถึงสองล้านล้านคำตอบซึ่งส่วนใหญ่สับสน

กุญแจสำคัญคือคุณต้องแมป 'keycode 66' กับไฮเปอร์คีย์ของคุณลบการแมปของคีย์นั้นออกจาก mod อื่น {1,2,4,5} (ถ้ามีอยู่) จากนั้นตั้งค่า mod3

เปิด ~ / .Xmodmap และใส่สิ่งต่อไปนี้:

! Unmap capslock
clear Lock
keycode 66 = Hyper_L

! Leave mod4 as windows key _only_
remove mod4 = Hyper_L

! Set mod3 to capslock
add mod3 = Hyper_L

เรียกใช้สิ่งนี้

xmodmap ~/.Xmodmap

หากมีสิ่งผิดปกติคุณสามารถรีเซ็ตแป้นพิมพ์ด้วย:

setxkbmap -layout us

สาเหตุที่เป็นไปได้ของบางสิ่งที่กำลังระเบิดคือ Hyper_L นั้นถูกแมปในที่อื่น แก้ไขสิ่งนี้โดยการเรียกใช้ xmodmap โดยไม่ต้อง args เพื่อหาว่ามีอะไรผูกอยู่กับ Hyper_L เมื่อคุณรู้ว่าต้องลบอะไรให้เชย a 'remove BINDING = Hyper_L' ในไฟล์. Xmodmap ของคุณ

ไฟล์. Xmodmap จะถูกโหลดเมื่อคุณเปิดเซสชัน X11 คุณควรมีการแมปนี้ในครั้งต่อไปที่คุณเข้าสู่ระบบหรือรีบูต

การกำหนดค่านี้ใช้ได้กับการตั้งค่า Ubuntu 14.04 ของฉัน หากคุณมี * ระวังที่แตกต่างกันและมันไม่ทำงานโปรดโพสต์สิ่งที่คุณทำเพื่อให้ได้รอบที่นี่และฉันจะรวมไว้ในคำตอบ


@antindexer ใช้งานได้กับคุณหรือไม่
heymatthew

ฉันพยายามตอบค่อนข้างมากและนี่เป็นคำตอบที่เหมาะกับฉัน อย่างน้อยมันก็ติดตั้งบน linux โลหะเปลือย อย่างผิดปกติมันล้มเหลวใน QEMU / KVM ทำงานเฉพาะในการกดทางเลือกของปุ่มแคปล็อค
Diagon

0

ฉันรู้ว่าคำถามนี้ค่อนข้างเก่า แต่ฉันต้องการแบ่งปันวิธีแก้ปัญหาของฉันเนื่องจาก (คำตอบ) เป็นคำตอบของ heymantthew ที่ไม่ได้ผลสำหรับฉัน สิ่งที่ได้ผลสำหรับฉัน:

setxkbmap -layout us -option lv3:caps_switch -variant intl

สิ่งนี้จะเปิดใช้งาน capslock เป็นคีย์ mod3 ตั้งค่าเลย์เอาต์เป็น "us" และตั้งค่าตัวแปรเป็น "intl" หากคุณใช้เชลล์แบบอินเทอร์แอคทีฟเช่นปลาคุณสามารถกดแท็บหลัง "-layout", "-option" หรือ "-variant" เพื่อรับรายการพารามิเตอร์ที่เป็นไปได้ทั้งหมด

พื้นหลังเพิ่มเติม: ฉันลองใช้ xmodmap เมื่อปีที่แล้วบนเครื่อง Ubuntu ที่ใช้ตัวจัดการหน้าต่าง i3 โดยเปลี่ยนจากสภาพแวดล้อมของ gnome มาตรฐาน ฉันได้ปรับเปลี่ยนรูปแบบแป้นพิมพ์ "us" xkb โดยเฉพาะรูปแบบแป้นพิมพ์สากลพร้อมปุ่มกด - มันทำงานได้ดีเมื่อใช้ gnome-desktop-manager (มีตัวเลือกในการตั้งค่าตัวพิมพ์ใหญ่เป็นปุ่ม mod3) แต่ฉันไม่สามารถ รับมันเพื่อทำงานกับ xmodmap นี่เป็นความผิดพลาดของฉัน: ฉันคิดว่า gdm GUI ใช้ xmodmap เพื่อจับคู่ตัวพิมพ์ใหญ่กับ mod3 แต่ในความเป็นจริงมันเป็นการตั้งค่าตัวเลือก X11 ตอนนี้ฉันเปลี่ยนมาเป็น Arch ฉันถูกบังคับให้คิดออก

ฉันแนะนำให้ใครวางแผนที่จะทำสิ่งนี้เพื่ออ่าน man pages บน localectl, xmodmap, setxkbmap และ layout layout โดยการเพิ่ม sleep และย้อนกลับส่วนหนึ่ง:

setxkbmap ... ; sleep 10; setxkbmap <INSERT DEFAULT SETTINGS>

สิ่งนี้ช่วยให้ฉันประหยัดเวลาได้มาก

ฉันยังไม่เข้าใจว่าวิธี xmodmap นั้นไม่ทำงานอย่างไร หวังว่านี่จะช่วยใครซักคน

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