ทำไม xmodmap ของฉันผูก bt ที่เกี่ยวข้องกับ AltGr ใช้งานได้กับบางคีย์เท่านั้น?


12

ฉันต้องการตั้งค่า AltGR + Right_Windows ของฉันใหม่ แต่ฉันไม่สามารถหาวิธีได้ ไม่ว่าฉันจะลองอะไรการกดปุ่ม windows ด้านขวาจะปล่อยชื่อ keysym เมื่อกด alt ขวาหรือไม่

นี่คือเนื้อหาของไฟล์ xmodmap ที่ฉันกำลังทดสอบอยู่ในตอนนี้ ในแป้นพิมพ์ของฉัน 38 เป็นรหัสสำหรับ "a" 48 เป็นรหัสสำหรับ aportrophe / doublequote และ 134 เป็นรหัสสำหรับรหัสหน้าต่างที่ถูกต้อง

keycode  38 = 1 2 3 4 5 6 7 8
keycode  48 = 1 2 3 4 5 6 7 8
keycode 134 = 1 2 3 4 5 6 7 8

เมื่อฉันกด Right_Alt + เครื่องหมายอัญประกาศเดี่ยวมันจะส่งออก 5 แต่ Right_Alt + a และ Right_Alt + Right_Windows ให้ 1 (ทั้งเมื่อกด alt ขวาและเมื่อไม่ใช่) ซึ่งไม่ใช่สิ่งที่ฉันต้องการ

รูปแบบแป้นพิมพ์ปัจจุบันของฉันคือus(alt-intl)และ alt ขวาถูกตั้งค่าให้ทำหน้าที่เป็น AltGr / Iso_Level3_Shift ผลลัพธ์ของxmodmap -pmต่อไปนี้:

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

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  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)

ไม่ทราบแน่ชัดว่าเกิดอะไรขึ้น แต่ถ้าคุณยังไม่ได้ดำเนินการคุณอาจต้องการเรียกใช้xevและกดชุดคีย์ต่าง ๆ เพื่อดูว่าฮาร์ดแวร์และจนถึงระดับ Xwindows กำลังได้รับการกดคีย์ที่แตกต่างเพื่อเริ่มต้น
Joe

ฉันกำลังประสบปัญหาเดียวกัน ฉันต้องการแก้ไขเครื่องหมายจุลภาคและจุดเพื่อสนับสนุนการพิมพ์คำพูดสองเท่าของเช็กและภาษาอังกฤษ („ /“ /”) ที่ฉันต้องเขียนโดยใช้คีย์เขียนเป็นอย่างอื่น ฉันใช้us(cz_sk_de)รูปแบบแป้นพิมพ์และ xmodmap
Pavel Šimerda

แล้วตอนนี้ล่ะ? มันไม่ใช่ทางปฏิบัติที่จะเสียค่าหัวอีกหรือไม่เริ่มคำถามใหม่เมื่อคำถามนี้อธิบายปัญหาได้ดี ดูเหมือนว่าจุดบกพร่องใน xorg แต่ฉันไม่พบการอ้างอิงใด ๆ คำตอบที่มีอยู่ผิดอย่างชัดเจนแม้จะได้รับโดยอัตโนมัติ
Pavel Šimerda

ฉันสิ้นสุดให้ขึ้นและใช้ keybinds แตกต่างกันที่ฉันรู้ว่าทำงาน: / ผมเห็นด้วยที่ว่านี้จะมีลักษณะเหมือนข้อผิดพลาด แต่ฉันสวม' ทราบว่าระบบที่เกี่ยวข้องกับการและสถานที่ที่จะรายงานมัน ...
hugomg

ฉันพบข้อมูลบางอย่างที่นี่ ... blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html
Pavel Šimerda

คำตอบ:


7

การใช้ xmodmap เพื่อกำหนดค่าการจับคู่คีย์แต่ละรายการ

ได้เวลาเขียนผลงานวิจัยของตัวเองแล้ว

ฉันคิดว่าฉันต้องพลาดบางสิ่งบางอย่างใน xmodmap และมันไม่ได้เป็นเอกสารที่ดีนักและผู้คนสับสน แต่กลับกลายเป็นว่าการออกแบบ X.Org เกี่ยวกับ XKB และ xmodmap นั้นโง่มาก

มหากาพย์ล้มเหลว: xmodmap

คุณสามารถใช้ xmodmap เพื่อกำหนดการแมปที่มีอยู่ใหม่ได้ตราบใดที่การแมปเหล่านั้นมีอยู่จริงในรูปแบบแป้นพิมพ์ดั้งเดิมของคุณ ในกรณีที่อธิบายไว้ในคำถามคุณไม่สามารถขยายพฤติกรรมของปุ่มใด ๆ เพื่อใช้ AltGr คุณสามารถเปลี่ยน AltGr keysyms สำหรับรหัสที่ใช้ AltGr อยู่แล้วเท่านั้น

ดูเพิ่มเติมที่: http://blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html

วิธีแก้ปัญหา: Mode_switch

วิธีแก้ปัญหานี้อธิบายไว้ในคำตอบโดย @ Ned64 คุณสามารถแมปAltGrจากไปISO_Level3_ShiftMode_switch

ฉันใช้บรรทัดคำสั่งต่อไปนี้เพื่อทำการแมปAltGrอีกครั้งสำเร็จ

xmodmap -e 'keycode 108 = Mode_switch'

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

วิธีแก้ปัญหา: แก้ไขรูปแบบแป้นพิมพ์

ฉันใช้us(cz_sk_de)เป็นรูปแบบแป้นพิมพ์ของฉันและฉันพยายามแก้ไขโดยเพิ่มการกำหนดค่าสำหรับคีย์ที่ฉันต้องการขยาย

key <AB08>  { [ comma, less, doublelowquotemark, leftdoublequotemark ] };
key <AB09>  { [ period, greater, ellipsis, rightdoublequotemark ] };

(ในส่วนxkb_symbols "cz_sk_de"ของ/usr/share/X11/xkb/symbols/us)

เพียงรีเซ็ตเค้าโครงแป้นพิมพ์เพื่อใช้เวอร์ชันที่แก้ไข

setxkbmap 'us(cz_sk_de)'

ตอนนี้คุณสามารถ (1) พิมพ์เช็กและภาษาอังกฤษเครื่องหมายคำพูดและวงรีโดยใช้การรวมกันของ,, ., ShiftและAltGrปุ่มและ / หรือ (2) remap คีย์ผู้ที่ใช้xmodmapตอนนี้พวกเขามีการกำหนด

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

ข้อสรุป

นี่น่าจะเป็นตัวอย่างของการออกแบบ X.Org ที่ผ่านการปรับแต่งและไม่ดีซึ่งแม้กระทั่งสิ่งเล็กน้อยเช่นการทำแผนที่รหัสกุญแจและการรวมกันของตัวดัดแปลงเป็นสัญลักษณ์กลายเป็นปัญหา เครื่องมือไม่ได้ให้วิธีที่เหมาะสมในการเปลี่ยนการจับคู่คีย์แต่ละรายการในการกำหนดค่าผู้ใช้โดยไม่มีผลข้างเคียงใด ๆ


"คุณไม่สามารถขยายพฤติกรรมของปุ่มใด ๆ เพื่อใช้ AltGr" - ดูเหมือนว่านี่เป็นปัญหาตลอด! ขอบคุณ
hugomg

5

ขั้นตอนที่หนึ่ง: ทำให้ AltGr ใช้งานได้

ฉันพบว่าปุ่มที่ถูกดัดแปลง AltGr ทำงานบนระบบของฉันถ้าฉันยังทำการตั้งค่า AltGr-Key เป็นMode_switchเช่นนี้อีกครั้ง:

xmodmap -e "keycode 108 = Mode_switch Mode_switch Mode_switch Mode_switch"

หากคุณมีแป้นพิมพ์อื่นคุณอาจต้องแทนที่108ด้วยรหัสของคุณตรวจสอบโดยการพิมพ์

xmodmap -pke | grep Alt_R

จากนั้นใช้หมายเลขนั้น (โดยปกติกุญแจจะเรียกAlt_Rบนระบบที่ฉันรู้จัก)

หรืออาจใช้วิธีนี้หาก Alt_R ยังไม่ได้กำหนดให้อย่างอื่น:

xmodmap -e "keysym Alt_R = Mode_switch Mode_switch Mode_switch Mode_switch"

ตัวแก้ไข AltGr ของคุณจะทำหน้าที่ตำแหน่ง 3 (พร้อม Shift: 4) ในรายการตัวแก้ไขของคุณ

ขั้นตอนที่สอง: กำหนดปุ่มตามต้องการ

คุณสามารถกำหนด AltGr-variants สำหรับแป้นใด ๆ ของแป้นพิมพ์ที่คุณต้องการ หากคุณมีคีย์อื่นที่ไม่ตรงกับรหัสที่ต้องการในตอนนี้คุณต้องกำหนดปุ่มเหล่านี้ใหม่เหมือนกับคีย์อื่น ๆ (ปุ่มที่คุณทดสอบ)

ขั้นตอนที่สาม: แปลงเป็นสคริปต์

ตอนนี้ใช้xmodmapคำสั่งของคุณและเขียนการแก้ไขทั้งหมด (แต่เท่านั้น) คีย์บอร์ดเริ่มต้นของคุณลงในไฟล์ - ซึ่งเร็วกว่าการโหลดคีย์แม็พที่สมบูรณ์ เริ่มต้นสคริปต์นี้หนึ่งครั้งหลังจากเข้าสู่ระบบแต่ละครั้งและเมื่อใดก็ตามที่มีการรีเซ็ต keymap โดยกระบวนการบางอย่าง

ฉันได้ทดลองกับสิ่งนี้มาหลายปีภายใต้ Solaris, IRIX และ Linux และจากความรู้ของฉันนี่เป็นทางออกเดียวที่จะให้ AltGr ทำงานได้ - และมันทำงานได้ดีสำหรับฉันมานานกว่า 20 ปี


1
ด้วยสิ่งนี้คีย์หน้าต่างขวาเริ่มทำหน้าที่เป็น "3" แทน "1" อย่างไรก็ตามตอนนี้ตัวดัดแปลง altgr ที่มีอยู่ทั้งหมดหยุดทำงาน (ฉันเดาว่ามันจะต้องเป็น "5" แทนที่จะเป็น "3" เพื่อให้พวกมันทำงาน?)
hugomg

ขอบคุณที่ทดลองใช้ โปรดโพสต์xmodmap -pmและxmodmap -pke | grep -w SOMECHANGEDKEYในสถานการณ์นี้สำหรับรหัสที่ไม่สามารถใช้งานได้อีกต่อไป
Ned64

(จากนั้นเราจะต้องเพิ่มตัวดัดแปลงใหม่โดยใช้xmodmapตามผลลัพธ์ของคุณ)
Ned64

xmodmap -pke | grep Alt_Rไม่ส่งคืนผลลัพธ์ใด ๆ ในระบบของฉัน ระบบของฉันคือ Lenovo ThinkPad X230 ที่มาพร้อมกับ Gentoo เสถียร ฉันยังลองด้วยgrep -iเพื่อประโยชน์
Pavel Šimerda

ฉันลองแล้วและปัญหาก็คือตัวอักษรที่เน้นเสียงus(cz_sk_de)ไม่ทำงานสำหรับฉัน ดังนั้นคำตอบนี้ไม่ได้ผลสำหรับฉันและจะไม่ทำงานกับคนอื่น ๆ อีกมากมาย
Pavel Šimerda

1

เห็นได้ชัดว่า xmodmap ไม่ได้อ่าน AltGR เริ่มต้นตามที่ควรมันอาจถูก จำกัด เฉพาะรูปแบบแป้นพิมพ์ที่เฉพาะเจาะจงบางทีอาจเป็นรูปแบบที่ไม่ใช่ของสหรัฐอเมริกาไม่ว่าด้วยวิธีใดปัญหาที่แท้จริงคือขณะที่คุณสามารถเปลี่ยนรูปแบบแป้นพิมพ์ของคุณ ไม่ต้องการทำเช่นนั้นเนื่องจากพวกเขาจำเป็นต้องใช้อักขระพิเศษบนเค้าโครงพวกเขาคุ้นเคย (เช่นรูปแบบแป้นพิมพ์สแกนดิเนเวียที่มีอักขระเช่นðþæöáúíóåůเป็นต้น) ซึ่งอาจเป็นปัญหาในการกำหนดค่ารูปแบบแป้นพิมพ์อื่น ๆ

คุณสามารถเรียกใช้

xmodmap -e "keycode 108 = Mode_switch"

หากต้องการ rebind AltGR ให้เป็นสิ่งที่ xmodmap สามารถใช้งานได้และการกำหนดที่ 3 ของ keycoad จะถูกส่งออกเมื่อคุณกด AltGR ในตอนนี้อย่างไรก็ตามมันจะทำลายรูปแบบแป้นพิมพ์เดิมโดยสิ้นเชิงเนื่องจากจะไม่มีการใช้งานปุ่ม AltGR อีกต่อไป

ฉันพบวิธีแก้ไขปัญหาสองวิธีที่ไม่ทำลายรูปแบบแป้นพิมพ์ที่มีอยู่และไม่เกี่ยวข้องกับรูปแบบการสลับแบบหนึ่งคือการผูก Mode_switch กับคีย์อื่น

กุญแจที่เหมาะสำหรับการนี้คือ Super_R ซึ่งอยู่ถัดจาก AltGR, รหัสสำหรับมันคือ 134 แต่ไม่มีแป้นพิมพ์ทั้งหมดที่มีและในกรณีของฉันบนแล็ปท็อปฉันไม่ได้มีทั้งฉันจึงตัดสินใจที่จะผูกไว้กับหน้าสุดท้าย รหัสที่เหลืออยู่ซึ่งฉันไม่เคยใช้จริงเลยควบคุมได้ถูกต้อง

xmodmap -e "keycode 105 = Mode_switch"

ฉันมีรูปแบบแป้นพิมพ์แบบฟิสิคัลแบบอเมริกัน แต่ตั้งค่าโครงร่างแบบยุโรปและปุ่มน้อย / ใหญ่ / บาร์ (หรือที่เรียกว่า ISO_Backslash แม้ว่าจะไม่ได้รับการยอมรับจาก xmodmap เอง) มักจะติดกับ Z บนแป้นพิมพ์ดังกล่าวหายไป ฉันเชื่อมโยงกับเมนู (135) แต่สามารถใช้แทน R_Ctrl และ Super_R

นี่คือการแก้ไขสกปรกฉันคิดว่า

วิธีแก้ปัญหาที่สองใช้เวลาในการคิดออกอีกเล็กน้อย ใช้ sxhkd (ทางเลือก xbindkeys)

ถ้าคุณเพิ่มสิ่งนี้ใน~ / .config / sxhkd / sxhkdrc :

~ISO_Level3_Shift
    xdotool key Mode_switch

AltGR ของคุณจะทำงานตามปกติ แต่เมื่อกดแล้ว Mode_switch จะถูกสลับ (kinda เช่น caps lock แต่สำหรับ Mode_switch) และปุ่ม xmodmap ใด ๆ ที่ใช้จะถูกล็อคเข้าสู่โหมด AltGR จนกว่าคุณจะกด AltGR อีกครั้งเพื่อยกเลิกการสลับ มันควรจะเป็นเรื่องง่าย ๆ ที่จะทำให้สคริปต์ไม่สามารถสลับได้โดยอัตโนมัติเมื่อมีการนำกุญแจออกมา

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