在构建我自己的 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)