Điểm:0

Giải pháp thay thế Linux và XKB cho sự kiện Control_L bổ sung khi nhấn AltGr trên máy tính để bàn Linux qua VMWare Horizon

lá cờ de

Tôi đang cố gắng tìm cách khắc phục sự cố bàn phím khi kết nối với máy tính để bàn Linux bằng VMWare Horizon View. Vấn đề dường như đã được biết đến và đã được mô tả vào năm 2012 trên Cơ sở tri thức của VMWare, có sẵn trên archive.org. Tôi phải nói thêm rằng tôi không biết nhiều về cách hoạt động của XKB, vì vậy tìm hiểu sâu về vấn đề này là một kinh nghiệm học hỏi.

Các giải pháp được liệt kê trên VMWware KB không thỏa đáng. Tôi có thể xác nhận mô tả đã cho, rằng có thêm một mục không mong muốn Kiểm soát_L nhân vật khi tôi đánh AltGr. Khi tôi nhấn AltGr+7, tôi mong đợi một {, nhưng thay vào đó tôi nhận được một ký tự thoát 0x1b. Đây là giao diện khi chạy xev và nhấn AltGr+7 (ISO_Level3_Shift là lần nhấn phím dự kiến ​​khi nhấn AltGr).

Sự kiện KeyPress, sê-ri 37, KHÔNG tổng hợp, cửa sổ 0x3000001,
    root 0x521, subw 0x0, thời gian 2444939915, (157,43), root:(388,257),
    trạng thái 0x0, mã khóa 37 (keysym 0xffe3, Control_L), same_screen CÓ,
    XLookupString cho 0 byte: 
    XmbLookupString cho 0 byte: 
    XFilterEvent trả về: Sai

Sự kiện KeyPress, sê-ri 37, KHÔNG tổng hợp, cửa sổ 0x3000001,
    root 0x521, subw 0x0, thời gian 2444939920, (157,43), root:(388,257),
    trạng thái 0x4, mã khóa 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen CÓ,
    XKeysymToKeycode trả về mã khóa: 92
    XLookupString cho 0 byte: 
    XmbLookupString cho 0 byte: 
    XFilterEvent trả về: Sai

Sự kiện KeyPress, sê-ri 37, KHÔNG tổng hợp, cửa sổ 0x3000001,
    root 0x521, subw 0x0, thời gian 2444944595, (157,43), root:(388,257),
    trạng thái 0x84, mã khóa 16 (keysym 0x7b, cú đúp), same_screen CÓ,
    XLookupString cho 1 byte: (1b) "
mbLookupString cho 1 byte: (1b) "
FilterEvent trả về: Sai

Sự kiện KeyRelease, sê-ri 37, KHÔNG tổng hợp, cửa sổ 0x3000001,
    root 0x521, subw 0x0, thời gian 2444944763, (157,43), root:(388,257),
    trạng thái 0x84, mã khóa 16 (keysym 0x7b, cú đúp), same_screen CÓ,
    XLookupString cho 1 byte: (1b) "
FilterEvent trả về: Sai

Sự kiện KeyRelease, sê-ri 37, KHÔNG tổng hợp, cửa sổ 0x3000001,
    root 0x521, subw 0x0, thời gian 2444951582, (157,43), root:(388,257),
    trạng thái 0x84, mã khóa 37 (keysym 0xffe3, Control_L), same_screen CÓ,
    XLookupString cho 0 byte: 
    XFilterEvent trả về: Sai

Sự kiện KeyRelease, sê-ri 37, KHÔNG tổng hợp, cửa sổ 0x3000001,
    root 0x521, subw 0x0, thời gian 2444951586, (157,43), root:(388,257),
    trạng thái 0x80, mã khóa 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen CÓ,
    XKeysymToKeycode trả về mã khóa: 92
    XLookupString cho 0 byte: 
    XFilterEvent trả về: Sai

Có một gợi ý trên VMWare KB để nhấn AltGr, sau đó nhấn và thả trái Điều khiển để kích hoạt sự kiện KeyRelease cho Control_L, sau đó tôi có thể nhấn 7 và nhận kết quả tôi đang tìm kiếm: XLookupString/XmbLookupString trong trường hợp đó trả về 7b, tức là { như mong đợi.

Vì vậy, sau khi xác nhận sự cố, tôi đã xem xét các cách giải quyết trong Linux. tôi đã chạy xkbcomp để có được định nghĩa keymap trực tiếp bằng cách chạy:

xkbcomp $HIỂN THỊ out.xkb

Sau khi nhìn vào các sản phẩm được tạo ra ra.xkb, tôi cho rằng có thể xác định lại sơ đồ phím của mình để mong đợi Control_L cùng với các phím khác. Vì vậy, để chọn một số phần có liên quan, out.xkb của tôi chứa:

xkb_types "hoàn thành" {
...
  gõ "BỐN_LEVEL" {
    công cụ sửa đổi = Shift + Cấp ba;
    map[Shift]= Level2;
    map[LevelBa]= Level3;
    bản đồ[Shift+LevelBa]= Level4;
  };
};
...
xkb_symbols "pc+no+inet(evdev)" {
...
  phím <AE07> {
    loại = "BỐN_LEVEL",
    biểu tượng[Nhóm1]= [ 7, dấu gạch chéo, dấu ngoặc trái, phép chia ]
  };
...
}

Vòng đệm bên trái trong định nghĩa trên là những gì tôi đang cố gắng thực hiện ngay bây giờ.Ý tưởng của tôi chỉ đơn giản là xác định lại FOUR_LEVEL để mong đợi Control_L trong các trường hợp thích hợp, như sau:

  gõ "BỐN_LEVEL" {
    công cụ sửa đổi= Shift+LevelBa+LControl;
    map[Shift]= Level2;
    map[LevelBa+LControl]= Level3;
    map[Shift+LevelBa+LControl]= Level4;
  };

Tôi đã tạo một ánh xạ với thiết lập này, sau đó tôi cố gắng biên dịch và tải tệp đã sửa đổi của mình:

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

Thật không may, những thay đổi của tôi dường như không hoạt động như tôi mong đợi. Tôi không nhận được bất kỳ lỗi nào, nhưng tôi vẫn nhận được 0x1b thay vì { ký tự khi tôi nhấn AltGr+7. Điều gì có thể xảy ra?

Ngoài ra, tôi thấy rằng một số nhân vật khác (như â¬$) dường như hoạt động mặc dù cũng yêu cầu AltGr công cụ sửa đổi và nhận thêm Control_L không mong muốn. Nhưng thử khi bấm Control_L thủ công thì thấy vậy ⬠hoạt động cả khi có và không có nhấn Control_L, vì vậy dường như có một số định nghĩa dự phòng cho biểu tượng này không rõ ràng trong xkbcomp đầu ra. Tôi vẫn chưa tìm ra cách nó hoạt động. Có thể xác định các dự phòng tương tự cho các biểu tượng tôi đang thiếu không? Chẳng hạn, có lẽ một số loại kế thừa từ cấu hình bàn phím console? Điều này có lẽ sẽ đến từ cùng một nơi với 0x1b ký tự mà tôi nhận được khi nhấn Ctrl-AltGr-7. Tôi không thể tìm thấy nó trong XKB-config, vì vậy nó phải được xác định ở một nơi khác.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.