ฉันกำลังพยายามแก้ไขปัญหาแป้นพิมพ์เมื่อเชื่อมต่อกับเดสก์ท็อป Linux โดยใช้ VMWare Horizon View ปัญหาที่ดูเหมือนว่าจะเป็นที่รู้จักและได้รับการอธิบายไว้ในปี 2012 ในฐานความรู้ของ VMware ที่มีอยู่บน archive.org ฉันต้องเสริมว่าฉันไม่รู้วิธีการทำงานของ XKB มากนัก ดังนั้นการได้ลองศึกษาสิ่งนี้จึงเป็นประสบการณ์การเรียนรู้

วิธีแก้ปัญหาตามรายการบน VMWware KB ไม่เป็นที่น่าพอใจ เราสามารถยืนยันได้คำอธิบายที่กำหนดว่ามีที่ไม่พึงประสงค์เพิ่มเติมตัวละครเมื่อกดControl_L AltGrเมื่อฉันกด AltGr+7 ฉันคาดหวัง a {แต่ฉันได้รับอักขระหลีก0x1bแทน นี่คือสิ่งที่ดูเหมือนเมื่อเรียกใช้ xev และกดปุ่ม AltGr+7 (ISO_Level3_Shift เป็นการกดปุ่มที่คาดไว้เมื่อกดปุ่มAltGr)

KeyPress event, serial 37, synthetic NO, window 0x3000001,
    root 0x521, subw 0x0, time 2444939915, (157,43), root:(388,257),
    state 0x0, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 37, synthetic NO, window 0x3000001,
    root 0x521, subw 0x0, time 2444939920, (157,43), root:(388,257),
    state 0x4, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XKeysymToKeycode returns keycode: 92
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 37, synthetic NO, window 0x3000001,
    root 0x521, subw 0x0, time 2444944595, (157,43), root:(388,257),
    state 0x84, keycode 16 (keysym 0x7b, braceleft), same_screen YES,
    XLookupString gives 1 bytes: (1b) "
mbLookupString gives 1 bytes: (1b) "
FilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x3000001,
    root 0x521, subw 0x0, time 2444944763, (157,43), root:(388,257),
    state 0x84, keycode 16 (keysym 0x7b, braceleft), same_screen YES,
    XLookupString gives 1 bytes: (1b) "
FilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x3000001,
    root 0x521, subw 0x0, time 2444951582, (157,43), root:(388,257),
    state 0x84, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x3000001,
    root 0x521, subw 0x0, time 2444951586, (157,43), root:(388,257),
    state 0x80, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XKeysymToKeycode returns keycode: 92
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

มีข้อเสนอแนะเกี่ยวกับ VMWare KB ให้กดAltGrจากนั้นกดและปล่อยทางซ้ายCtrlเพื่อทริกเกอร์เหตุการณ์ KeyRelease สำหรับ Control_L หลังจากนั้นฉันสามารถกด7และรับผลลัพธ์ที่ต้องการ: XLookupString/XmbLookupString ในกรณีนั้น คืนค่า 7b ซึ่ง เป็นไป{ตามคาด

หลังจากยืนยันปัญหาแล้ว ฉันได้ตรวจสอบวิธีแก้ปัญหาใน Linux แล้ว ฉันวิ่งxkbcompเพื่อรับคำจำกัดความคีย์แมปแบบสดโดยเรียกใช้:

xkbcomp $DISPLAY out.xkb

หลังจากดูการสร้างout.xkbฉันคิดว่าอาจเป็นไปได้ที่จะกำหนดคีย์แมปใหม่เพื่อให้มี Control_L นอกเหนือจากคีย์อื่นๆ ดังนั้นเพื่อเลือกบางส่วนที่เกี่ยวข้อง out.xkb ของฉันจึงมี:

xkb_types "complete" {
...
  type "FOUR_LEVEL" {
    modifiers= Shift+LevelThree;
    map[Shift]= Level2;
    map[LevelThree]= Level3;
    map[Shift+LevelThree]= Level4;
  };
};
...
xkb_symbols "pc+no+inet(evdev)" {
...
  key <AE07> {
    type= "FOUR_LEVEL",
    symbols[Group1]= [    7,    slash,    braceleft,    division ]
  };
...
}

วงเล็บปีกกาในคำจำกัดความข้างต้นคือสิ่งที่ฉันพยายามจะทำงานในขณะนี้ ความคิดของฉันคือการกำหนด FOUR_LEVEL ใหม่ให้คาดหวัง Control_L ในกรณีที่เหมาะสมเช่นนี้:

  type "FOUR_LEVEL" {
    modifiers= Shift+LevelThree+LControl;
    map[Shift]= Level2;
    map[LevelThree+LControl]= Level3;
    map[Shift+LevelThree+LControl]= Level4;
  };

ฉันสร้างการแมปด้วยการตั้งค่านี้ จากนั้นฉันพยายามคอมไพล์และโหลดไฟล์ที่แก้ไขของฉัน:

xkbcomp ctrl-hack.xkb
xkbcomp ctrl-hack.xkm $DISPLAY

น่าเสียดายที่การเปลี่ยนแปลงของฉันไม่ได้ผลอย่างที่ฉันหวังไว้ ฉันไม่ได้รับข้อผิดพลาดใดๆ แต่ฉันยังคงได้รับอักขระ0x1bแทน{เมื่อกด AltGr+7 อะไรจะเกิดขึ้น?

อีกทางหนึ่ง ฉันเห็นว่าอักขระอื่นๆ บางตัว (เช่นและ$) ดูเหมือนจะทำงานได้แม้จะต้องใช้AltGrตัวปรับแต่งด้วย และได้รับ Control_L ที่ไม่คาดคิดเพิ่มเติม แต่การทดสอบขณะกด Control_L ด้วยตนเอง ฉันเห็นว่าใช้งานได้ทั้งแบบมีและไม่มีการกด Control_L ดังนั้นจึงดูเหมือนว่าจะมีคำจำกัดความทางเลือกสำหรับสัญลักษณ์นี้ที่ไม่ชัดเจนในxkbcompผลลัพธ์ ฉันยังไม่ได้คิดออกว่ามันทำงานอย่างไร เป็นไปได้ไหมที่จะกำหนดทางเลือกที่คล้ายกันสำหรับสัญลักษณ์ที่ฉันหายไป บางทีอาจเป็นมรดกบางอย่างจากการกำหนดค่าแป้นพิมพ์คอนโซลเป็นต้น นี่อาจมาจากที่เดียวกับ0x1bตัวละครที่ฉันได้รับเมื่อกด Ctrl-AltGr-7 ฉันหาไม่พบใน XKB-config จึงต้องกำหนดไว้ที่อื่น

no answer