我想根据我的德语键盘布局 ( 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
,这些是我注意到的事情:
- 我的 xkb_symbols 的名称是:
xkb_symbols "pc+prg+de:2+us:3+inet(evdev)"
我的布局有三个组而不是两个(我注意到即使我的默认德语布局也有两个布局,尽管在 中只定义了一个
symbols/de
)name[group1]="German"; name[group2]="German"; name[group3]="English (US)";
几乎所有键都有三个组/布局,而第二个与第一个相同,第三个是英文键盘布局。不包括我自己对字母所做的更改。
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 ] };
这是我得到的字母 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 ] };
我对 Caps-Lock 按钮的更改包括在内,没有修改
我假设:默认(ubuntu?)xkb 配置中必须有一些规则,它修改所有符号以将其他布局作为附加组包含在内。有什么办法可以阻止我的 xkb 符号触发该规则吗?
我终于找到了解决方案。文件
/usr/share/X11/xkb/rules/evdev
中有一条规则这导致用我的键盘的默认布局覆盖我的第二组。我可以通过添加以下行来解决这个问题(
de
我的基本键盘布局在哪里):谢谢@quixotic 帮我分析问题