在xkb中如何区分Alt和ISO_Level3_Shift?

在xkb中如何区分Alt和ISO_Level3_Shift?

我正在使用带有内置键盘的设备,并在其上运行 ARM Debian,并使用 i3 作为窗口管理器。有一个Alt键(keysym Alt_L),以及两个用于特殊字符的键,它们看起来类似于,AltGr因为它们对应ISO_Level3_Shiftxev

KeyPress event, serial 34, synthetic NO, window 0x2200001,
    root 0x38c, subw 0x0, time 86851282, (270,736), root:(1903,793),
    state 0x0, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x2200001,
    root 0x38c, subw 0x0, time 86851413, (270,736), root:(1903,793),
    state 0x8, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x2200001,
    root 0x38c, subw 0x0, time 86854252, (270,736), root:(1903,793),
    state 0x0, 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

KeyRelease event, serial 34, synthetic NO, window 0x2200001,
    root 0x38c, subw 0x0, time 86854362, (270,736), root:(1903,793),
    state 0x8, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XKeysymToKeycode returns keycode: 92
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

然而,尽管键盘符号不同,但 Debian 和 i3 WM 认为这三个键是相同的:无论我按下哪个键,在我 i3 配置中设置为后,它们都充当 i3 中的修饰键$modMod1我还没有找到一种方法让我的系统区分它们。

有没有办法将两个键盘分开并保留Alt基本功能,即使其在 GUI 应用程序中打开菜单但不触发 i3 修饰符?或者,我更倾向于使用它Alt_L来达到第三级 xkb 符号,并将ISO_Level3_Shift其作为我的 i3 修饰符;我该怎么做?

答案1

我找到了setxkbmap允许我为每个键分配正确功能的选项要旨

因此,在我的 i3 中添加此功能config可以将Alt键设置为ISO_Level3_Shift,并将我的其他修饰键(在键盘的两侧重复)设置为Super_R

exec --no-startup-id setxkbmap -model fxtecpro1 -layout fxtec_vndr/pro1 -variant us2 -rules evdev -option lv3:lalt_switch, compose:caps, altwin:swap_alt_win

命令中还有一些其他不相关的选项,要么是为了个人喜好,要么是为了符合我的设备的特性。pro1是一个xkb针对设备的文件,us2是一个自定义us-intl变体。

但是,尽管进行了更改,i3 仍然会忽略按键之间的差异,$mod当我将 i3 设置为使用 时,它们仍然会全部起作用Mod1。我相信这是因为我使用了 Xwayland,即使xmodmapxev报告了正确的设置,Xwayland也可能没有考虑到它们。我猜Wayland替代方案适用于Xwayland,但我不认为我可以使用替代方案实现这种级别的自定义Wayland

相关内容