我是一名 Java 程序员,经常需要用匈牙利语、德语或斯洛伐克语编写大量文本。很多时候,我必须同时完成所有工作,这使得在不同布局之间不断切换变得不切实际。幸运的是,匈牙利语键盘布局已经拥有一切所需的大部分符号,其余的可以通过更改相关的 xkb 符号文件轻松添加。
然而,这隐藏了第三级背后的许多必要角色。我尚未解决的一个问题是定义访问第三层的方式。理想情况下,我想模仿 Windows 的相同行为,其中可以通过同时按左 Alt + Ctrl 或按右 Alt (AltGr) 键来访问第三级。不幸的是,在我们公司使用的 Ubuntu 22.04 上,这只能使用右 Alt (AltGr) 键来完成。 Gnome 调整可以选择将默认值更改为其他各种键,但它们都没有达到我想要的效果。
我发现了一个类似的相关问题:如何将 AltGr 绑定到 <Ctrl> + <Alt>其中答案表明这可以通过创建新的 xkb 类型来完成,但最终没有人共享他们的代码,并且我无法可靠地复制将新的 xkb 类型设置为布局默认值的最后一步,这是使整个事情都有效。
- 我开始编辑我的
/usr/share/X11/xkb/symbols/hu
文件。通过更改key <AE...
相关xkb_symbols "102_qwerty_comma_dead"
部分内的条目,我能够向第三级添加一些额外的字符。 - 然后,我将上述问题中的新 xkb 类型的定义添加到我的
/usr/share/X11/xkb/types/basic
文件中:
default xkb_types "basic" {
...
type "CA_to_L3" {
modifiers = Control+Alt+Shift;
map[None] = Level1;
map[Shift] = Level2;
map[Control+Alt] = Level3;
map[Control+Alt+Shift] = Level4;
level_name[Level1] = "Base";
level_name[Level2] = "Shift";
level_name[Level3] = "Alt Base";
level_name[Level4] = "Shift Alt";
};
...
};
最后,我尝试添加
key.type="CA_to_L3";
到文件的xkb_symbols "def_common" {...}
和部分,但它没有达到我预期的效果,它只是完全禁用了第三级。xkb_symbols "102_qwerty_comma_dead" {...}
/usr/share/X11/xkb/symbols/hu
我也尝试过同样的操作
key.type[Group1]="CA_to_L3";
,因为在同一文件的其他地方使用了类似的语句,但它导致了相同的行为。
有人能指出我做错了什么吗?通过运行:$ setxkbmap -print -verbose 10
我得到:
Setting verbose level to 10
locale is C
Trying to load rules file ./rules/evdev...
Trying to load rules file /usr/share/X11/xkb/rules/evdev...
Success.
Applied rules from evdev:
rules: evdev
model: pc105
layout: hu,gb,sk,gb
variant: 102_qwerty_comma_dead,,qwerty,
Trying to build keymap using the following components:
keycodes: evdev+aliases(qwertz)
types: complete
compat: complete
symbols: pc+hu(102_qwerty_comma_dead)+gb:2+sk(qwerty):3+gb:4+inet(evdev)
geometry: pc(pc105)
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwertz)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+hu(102_qwerty_comma_dead)+gb:2+sk(qwerty):3+gb:4+inet(evdev)" };
xkb_geometry { include "pc(pc105)" };
};
这表明 xkb 类型完整已加载,其中包含 xkb 类型 basic,但我仍然没有获得定义的功能。