Linux XKB mod3一直映射到模式开关,而不是ISO_级别5_移位

Linux XKB mod3一直映射到模式开关,而不是ISO_级别5_移位,linux,x11,keyboard-layout,Linux,X11,Keyboard Layout,我的系统是Ubuntu 20.04,它在/usr/share/X11/XKB/symbols上使用XKB布局文件 我想在我自己的键盘布局上使用Level5,以增加我可以用单个布局键入的符号数 我自己的想法是将其作为一种替代的大写字母系统(与CapsLock结合使用),并使用Shift替代其他形式的字母 然而,当我使用这种布局时,ISO_Level5_Shift似乎不起作用。如下面的xmodmap命令所示,它将绑定到Mode\u开关: $xmodmap xmodmap:每个修改器最多4个键(括号中

我的系统是Ubuntu 20.04,它在
/usr/share/X11/XKB/symbols
上使用XKB布局文件

我想在我自己的键盘布局上使用Level5,以增加我可以用单个布局键入的符号数

我自己的想法是将其作为一种替代的大写字母系统(与CapsLock结合使用),并使用Shift替代其他形式的字母

然而,当我使用这种布局时,
ISO_Level5_Shift
似乎不起作用。如下面的
xmodmap
命令所示,它将绑定到
Mode\u开关

$xmodmap
xmodmap:每个修改器最多4个键(括号中的键代码):
移位L(0x32),移位R(0x3e)
锁帽和锁(0x42)
控制面板(0x25),控制面板(0x69)
mod1 Alt_L(0x40),Meta_L(0xcd)
mod2数字锁(0x4d)
mod3模式_开关(0xcb)
mod4超级线程(0x85)、超级线程(0x86)、超级线程(0xce)、超级线程(0xcf)
mod5 ISO_级别3_移位(0x5c)
我尝试过不同的方法,没有解决办法。这是我当前使用的一个(这意味着,首先我选择LSGT作为开关,然后交换左移和LSGT):

为了使布局正常工作,我制作了以下一些自定义键类型:

partial default xkb_types "default" {
    virtual_modifiers LevelThree,LevelFive,Alt;

    type "KYM_8_T1" {
        modifiers = Shift+Lock+LevelThree+LevelFive+Control;
        
        map[None] = Level1;
        map[Shift] = Level2;
        map[LevelThree] = Level3;
        map[Shift+LevelThree] = Level4;
        map[Lock] = Level5;
        map[Lock+Shift] = Level6;
        map[Lock+LevelThree] = Level3;
        map[Lock+Shift+LevelThree] = Level4;
        map[LevelFive] = Level5;
        map[LevelFive+Shift] = Level6;
        map[LevelFive+LevelThree] = Level7;
        map[LevelFive+Shift+LevelThree] = Level8;
        map[LevelFive+Lock] = Level1;
        map[LevelFive+Shift+Lock] = Level2;
        map[LevelFive+LevelThree+Lock] = Level8;
        map[LevelFive+LevelThree+Shift+Lock] = Level7;

        map[Control] = Level7;
        preserve[Control] = Control;
        map[Control+Shift] = Level8;
        preserve[Control+Shift] = Control;
        map[Control+LevelFive] = Level8;
        preserve[Control+LevelFive] = Control;
        map[Control+Shift+LevelFive] = Level7;
        preserve[Control+Shift+LevelFive] = Control;

        level_name[Level1] = "Base";
        level_name[Level2] = "Shift";
        level_name[Level3] = "Alt";
        level_name[Level4] = "Shift Alt";
        level_name[Level5] = "Caps";
        level_name[Level6] = "Shift Caps";
        level_name[Level7] = "Ascii";
        level_name[Level8] = "Shift Ascii";
    };
互联网上的人建议我用xmodmap重新映射修饰符,但它会无限期地将修饰符绑定到一个键上,直到重新启动,我认为这一切都太具有侵略性了。我有其他不使用Level5的布局,其中我用作修改器的键绑定到其他东西

对于多个组,它们不能处理单个布局文件

是否有办法仅使用XKB修复此问题

default partial alphanumeric_keys
xkb_symbols "e4" {
    include "us"
    include "level3(ralt_switch)"
    
    // changes to modifiers
    include "kyme4(e4_modifiers)"
    name[Group1] = "Kaymoskvan (E4)";

    key.type[Group1] = "KYM_8_T1";
partial default xkb_types "default" {
    virtual_modifiers LevelThree,LevelFive,Alt;

    type "KYM_8_T1" {
        modifiers = Shift+Lock+LevelThree+LevelFive+Control;
        
        map[None] = Level1;
        map[Shift] = Level2;
        map[LevelThree] = Level3;
        map[Shift+LevelThree] = Level4;
        map[Lock] = Level5;
        map[Lock+Shift] = Level6;
        map[Lock+LevelThree] = Level3;
        map[Lock+Shift+LevelThree] = Level4;
        map[LevelFive] = Level5;
        map[LevelFive+Shift] = Level6;
        map[LevelFive+LevelThree] = Level7;
        map[LevelFive+Shift+LevelThree] = Level8;
        map[LevelFive+Lock] = Level1;
        map[LevelFive+Shift+Lock] = Level2;
        map[LevelFive+LevelThree+Lock] = Level8;
        map[LevelFive+LevelThree+Shift+Lock] = Level7;

        map[Control] = Level7;
        preserve[Control] = Control;
        map[Control+Shift] = Level8;
        preserve[Control+Shift] = Control;
        map[Control+LevelFive] = Level8;
        preserve[Control+LevelFive] = Control;
        map[Control+Shift+LevelFive] = Level7;
        preserve[Control+Shift+LevelFive] = Control;

        level_name[Level1] = "Base";
        level_name[Level2] = "Shift";
        level_name[Level3] = "Alt";
        level_name[Level4] = "Shift Alt";
        level_name[Level5] = "Caps";
        level_name[Level6] = "Shift Caps";
        level_name[Level7] = "Ascii";
        level_name[Level8] = "Shift Ascii";
    };