Score:0

วิธีแก้ปัญหาสำหรับ Linux และ XKB สำหรับเหตุการณ์ Control_L เพิ่มเติมเมื่อกด AltGr บนเดสก์ท็อป Linux ผ่าน VMWare Horizon

ธง de

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

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

เหตุการณ์ KeyPress, อนุกรม 37, NO สังเคราะห์, หน้าต่าง 0x3000001,
    รูท 0x521, subw 0x0, เวลา 2444939915, (157,43), รูท:(388,257),
    สถานะ 0x0, คีย์โค้ด 37 (keysym 0xffe3, Control_L), same_screen ใช่
    XLookupString ให้ 0 ไบต์: 
    XmbLookupString ให้ 0 ไบต์: 
    XFilterEvent ส่งคืน: False

เหตุการณ์ KeyPress, อนุกรม 37, NO สังเคราะห์, หน้าต่าง 0x3000001,
    รูท 0x521, subw 0x0, เวลา 2444939920, (157,43), รูท:(388,257),
    สถานะ 0x4, คีย์โค้ด 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen ใช่
    XKeysymToKeycode ส่งคืนรหัส: 92
    XLookupString ให้ 0 ไบต์: 
    XmbLookupString ให้ 0 ไบต์: 
    XFilterEvent ส่งคืน: False

เหตุการณ์ KeyPress, อนุกรม 37, NO สังเคราะห์, หน้าต่าง 0x3000001,
    รูท 0x521, subw 0x0, เวลา 2444944595, (157,43), รูท:(388,257),
    สถานะ 0x84, คีย์โค้ด 16 (keysym 0x7b, สร้อยข้อมือซ้าย), same_screen ใช่
    XLookupString ให้ 1 ไบต์: (1b) "
mbLookupString ให้ 1 ไบต์: (1b) "
FilterEvent ส่งคืน: False

เหตุการณ์ KeyRelease, อนุกรม 37, สังเคราะห์ NO, หน้าต่าง 0x3000001,
    รูท 0x521, subw 0x0, เวลา 2444944763, (157,43), รูท:(388,257),
    สถานะ 0x84, คีย์โค้ด 16 (keysym 0x7b, สร้อยข้อมือซ้าย), same_screen ใช่
    XLookupString ให้ 1 ไบต์: (1b) "
FilterEvent ส่งคืน: False

เหตุการณ์ KeyRelease, อนุกรม 37, สังเคราะห์ NO, หน้าต่าง 0x3000001,
    รูท 0x521, subw 0x0, เวลา 2444951582, (157,43), รูท:(388,257),
    สถานะ 0x84, คีย์โค้ด 37 (keysym 0xffe3, Control_L), same_screen ใช่
    XLookupString ให้ 0 ไบต์: 
    XFilterEvent ส่งคืน: False

เหตุการณ์ KeyRelease, อนุกรม 37, สังเคราะห์ NO, หน้าต่าง 0x3000001,
    รูท 0x521, subw 0x0, เวลา 2444951586, (157,43), รูท:(388,257),
    สถานะ 0x80, รหัสคีย์ 108 (keysym 0xfe03, ISO_Level3_Shift), หน้าจอเดียวกันใช่
    XKeysymToKeycode ส่งคืนรหัส: 92
    XLookupString ให้ 0 ไบต์: 
    XFilterEvent ส่งคืน: 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 "สมบูรณ์" {
...
  พิมพ์ "FOUR_LEVEL" {
    ตัวดัดแปลง = Shift + ระดับสาม;
    แผนที่[Shift]= ระดับ 2;
    แผนที่[LevelThree]= Level3;
    แผนที่[Shift+LevelThree]= ระดับ 4;
  };
};
...
xkb_ symbols "pc+no+inet(evdev)" {
...
  คีย์ <AE07> {
    พิมพ์= "FOUR_LEVEL",
    สัญลักษณ์[Group1]= [ 7, เครื่องหมายทับ, วงเล็บปีกกาซ้าย, การแบ่ง ]
  };
...
}

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

  พิมพ์ "FOUR_LEVEL" {
    ตัวดัดแปลง = Shift+LevelThree+LControl;
    แผนที่[Shift]= ระดับ 2;
    แผนที่[LevelThree+LControl]= Level3;
    แผนที่[Shift+LevelThree+LControl]= ระดับ 4;
  };

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

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 ดังนั้นจึงต้องกำหนดไว้ที่อื่น

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา