为什么 AltGr 从键码 108 重新映射到键码 92 (LVL3),在哪里?

为什么 AltGr 从键码 108 重新映射到键码 92 (LVL3),在哪里?

在构建我自己的 xkb 配置文件时,我设法使其AltGr功能失调。底线是:删除这三行(其中一行实际上是整个块)...

    xkb_keymap {
        xkb_keycodes "whatever" {
            [...]
>>>>        <LVL3> = 92;
            [...]
        };
        [...]
        xkb_symbols "anything" {
            [...]
>>>>        key <LVL3> { [ ISO_Level3_Shift ] };
>>>>        modifier_map Mod5 { <LVL3> };

...创建了问题并重新添加它们使问题消失,现在AltGr再次按预期工作。所以,问题是:我的键盘根本没有生成键代码 92 的键(这就是我首先删除这些行的原因)。现在,我在xev连接两个键盘(一个使用系统的默认键盘布局,因此可以工作AltGr,另一个使用损坏的 xkb 文件)运行并使用两个键运行时发现了这AltGr一点,直到我突然注意到这一行:

    KeyPress event, serial 53, synthetic NO, window 0x3000001,
        root 0x4b1, subw 0x0, time 2986451693, (63,136), root:(716,408),
        state 0x10, 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

这就是我尝试重新添加这些行的原因。

现在的问题是:为什么该键被重新映射到键码 92?这是在哪里发生的? (由于我的文件中不再有该密钥的任何定义,因此我的文件是无辜的;)

答案1

今天我也遇到了这个问题,我认为这是 ISO_Level3_Shift 位于 xmodmap 输出中键码 92 的键码行中的原因:

xmodmap -pk | grep -w 92
     92         0xfe03 (ISO_Level3_Shift)       0x0000 (NoSymbol)       0xfe03 (ISO_Level3_Shift)

或者更准确地说:它映射回第一的列表中的键码:

$ xmodmap -pk | grep -i ISO_Level3_Shift
     92         0xfe03 (ISO_Level3_Shift)       0x0000 (NoSymbol)       0xfe03 (ISO_Level3_Shift)
    108         0xfe03 (ISO_Level3_Shift)       0x0000 (NoSymbol)       0xfe03 (ISO_Level3_Shift)
    134         0xfe03 (ISO_Level3_Shift)       0x0000 (NoSymbol)       0xfe03 (ISO_Level3_Shift)

相关内容