如何定义新的 xkb 类型并使其成为特定布局的默认类型?

如何定义新的 xkb 类型并使其成为特定布局的默认类型?

我是一名 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,但我仍然没有获得定义的功能。

相关内容