我想根据我的德语键盘布局创建自定义键盘布局 ( 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 ] };
我对大写锁定按钮的更改已包含在内,无需修改
我的假设是:默认(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 帮我分析问题