XKB:使用 Mode_switch 将布局修改为多组

XKB:使用 Mode_switch 将布局修改为多组

我想根据我的德语键盘布局创建自定义键盘布局 ( de)。我们的想法是采用两组布局,并以 Caps-Lock 为关键Mode_switch。该重新映射似乎根据 进行工作xev。然而,第二组布局不起作用。当我按 [CAPS]+[H] --> 出现“h”(应为“`”)。

这是我的符号文件,名为de_ext

default
xkb_symbols "basic" {

    include "de"

    name[Group1]="de";
    name[Group2]="de2";

    // the H button should become accent grave when in second group
    override key <AC06> {
        type[Group2]="ALPHABETIC",
        symbols[Group2]= [           grave, grave ]
    };

    override key <CAPS> {         [     Mode_switch, Caps_Lock ] };

};

编辑1:

@quixotic 是对的,这实际上在直接设置时有效。我还尝试将de_ext文件复制到/usr/share/X11/xkb/然后运行,setxkbmap de_ext这也有效。

/usr/share/X11/xkb/rules/evdev.xml但是,当将布局添加到with 时,它不起作用

<layout>
  <configItem>
    <name>de_ext</name>
    <shortDescription>xy</shortDescription>
    <description>German extended</description>
    <languageList>
      <iso639Id>ger</iso639Id>
    </languageList>
  </configItem>
</layout>

尽管新布局出现在 Ubuntu 17.04 任务栏上的布局选择中,但当我选择它时,CAPS-Lock 按钮具有如上所述的不同行为。有效的是CAPS-Lock是Mode_switch(我检查过xev),但是,第二组似乎没有被选择,因为当按[CAPS]+[H]时它不起作用。知道使用 Ubuntu/Gnome 布局切换器时会有什么不同吗?

编辑2: 打电话时xkbcomp $DISPLAY broken.xkb,我注意到以下几点:

  1. 我的 xkb_symbols 的名称是:xkb_symbols "pc+prg+de:2+us:3+inet(evdev)"
  2. 我的布局有三组而不是两组(我注意到即使我的默认德语布局也有两个布局,尽管在 中只定义了一个symbols/de

    name[group1]="German";
    name[group2]="German";
    name[group3]="English (US)";
    
  3. 几乎所有按键都有三个组/布局,而第二个与第一个相同,第三个是英文键盘布局。我自己对字母的修改不包括在内。

    key <AC01> {
        type[group1]= "FOUR_LEVEL_ALPHABETIC",
        type[group2]= "FOUR_LEVEL_ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               a,               A,              ae,              AE ],
        symbols[Group2]= [               a,               A,              ae,              AE ],
        symbols[Group3]= [               a,               A ]
    };
    
  4. 这是我得到的字母 H

    key <AC06> {
        type[group1]= "FOUR_LEVEL_ALPHABETIC",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               h,               H,         hstroke,         Hstroke ],
        symbols[Group2]= [               h,               H ],
        symbols[Group3]= [               h,               H ]
    };
    
  5. 我对大写锁定按钮的更改已包含在内,无需修改

我的假设是:默认(ubuntu?)xkb 配置中必须存在一些规则,该规则会修改所有符号以将附加布局包含为附加组。有什么办法可以阻止我的 xkb 符号触发该规则吗?

答案1

我终于找到了解决方案。文件里/usr/share/X11/xkb/rules/evdev有一条规则

! model     layout[2]   =   symbols
  *         *           =   +%l[2]%(v[2]):2

这会导致用键盘的默认布局覆盖我的第二组。我可以通过添加以下行来解决此问题(de我的基本键盘布局在哪里):

! model     layout[2]   =   symbols
  *         de          =   +de

谢谢@quixotic 帮我分析问题

相关内容