如何使用 xkb 将 LSGT 映射到左控件?

如何使用 xkb 将 LSGT 映射到左控件?

我试图将LSGT(欧洲键盘上的键)映射到“左控制”,但xkb没有成功(在 X 和 ubuntu 18 下)。

我尝试了以下方法:

  1. 将该LSGT行替换为
    key <LSGT> { [Control_L] };

modifier_keys并在我使用的布局主体中的块之前添加标签/usr/share/xkb/symbols/fr(在 bepo 部分,因为这是我使用的布局)

  1. 大致遵循详细步骤这里这里:更准确地说,我在末尾添加了以下代码.../xkb/symbols/ctrl
partial modifier_keys alphanumeric_keys
xkb_symbols "lsgt_lctrl" {
    key <LSGT> { [Control_L] };
};

(字母数字标签在这里,因为我不清楚标签是否指的是键映射或实际的键,我猜LSGT是一个字母数字键,我也尝试删除它)

.../xkb/rules/evdev下面的行! option = symbols

ctrl:lsgt_lctrl = +ctrl(lsgt_lctrl)

! option以及evdev.lst 中的以下行

ctrl:lsgt_lctrl Use LSGT as left control 

使用dconf['ctrl:lsgt_lctrl']xkb选项中添加的编辑器

然后我重新启动,因为这不起作用,我尝试删除其中的所有内容/var/lib/xkb(仅包含一个README.compiled文件)并再次重新启动,但它仍然不起作用。

我记得在以前的 Linux 安装下使用过类似的程序,所以我很困惑。

感谢您阅读我的文章,这是我第一次在此类论坛中提出问题,而且我对 Linux 还很陌生,所以如果我这样做的方式错误或烦人,请告诉我。

答案1

我通过replace在第一段代码中添加关键字解决了我的问题。现在读的是

partial modifier_keys alphanumeric_keys
xkb_symbols "lsgt_lctrl" {
   replace key <LSGT> { [Control_L] };
};

我认为(?)LSGT中其他地方还有另一个相互冲突的定义xkb

注意:因为我第一次没有注册,所以我不知道我是否可以正确地表明这是我回答我自己的问题或者答案确实有效。

答案2

我通过 /usr/share/X11/xkb/keycodes/evdev 中的以下更改解决了类似的问题

#        <LSGT> = 94;
#        <RCTL> = 105;
        <RCTL> = 94;

之后,“\&|*”(称为 LSGT)在我的例子中占据了右控制的位置,充当右控制。缺点是在外部键盘上,此更改后右键控件不再起作用。

因此,要让 LSGT 作为 LCTL 工作,请尝试以下操作

#        <LSGT> = 94;
#        <LCTL> = 37;
        <LCTL> = 94;

答案3

运行setkbdmap -print > somefile.xkb会打印 XKB 配置,其中包含扩展的宏/指令,如中所示这个线程

如果您将其与未扩展的setkbdmap -print输出进行比较,您的配置问题可能会更清楚。这样做还会为您提供一个文件,其中按顺序列出了您的密钥代码。

查看该配置后,我发现我的 XKB 宏/指令没有按顺序扩展,导致在包含我的io(swapcaps)和行后对以下行进行评估。ìo(intl)

    key <LVL3> {
        type= "ONE_LEVEL",
        symbols[Group1]= [ ISO_Level3_Shift ]
    };
    key <LSGT> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [ backslash, bar, backslash, bar ]
    };

另外,如果您进入键盘配置(在 KDE 系统设置模块中),那么在布局下您可以生成布局预览。对于这种情况,预览会比使用xkbcomp /usr/share/X11/xkb/symbols/io $DISPLAY或解析布局生成更好的输出setxkbmap -config ~/.config/me/xkb/io -print -verbose 10。一旦您生成预览,那么您应该在映射/替换它的键上看到“< >”符号。

我正在尝试映射key <ESC> {[ LSGT ]}或使用replace key下面的脚本,然后应用level5(lsgt_switch)以获得额外的 modkey - 或者至少获得 LaTeX/Julia 的扩展符号范围...

hidden partial
xkb_symbols "swapcaps" {
    key <ESC> {[ LSGT ]};
    key <CAPS> {[ Escape ]};
};

xkb_symbols "intl" {

    include "us(intl)"
    include "io(swapcaps)"
    include "level5(lsgt_switch)"

    name[Group1] = "Digimon - US (With Dead Keys)";

    key <SPCE> {[       space, underscore, nobreakspace, nobreakspace   ]};

    //key <TLDE> {[dead_grave, dead_tilde, grave, asciitilde ] };

    key <AE01> {[              exclam, 1,    exclamdown,      onesuperior ] };
    key <AE02> {[                  at, 2,   twosuperior, dead_doubleacute ] };
    key <AE03> {[          numbersign, 3, threesuperior,      dead_macron ] };
    key <AE04> {[              dollar, 4,      currency,         sterling ] };

    //// ...
};

关于 pc104 和 pc105 键码的一些注释:

  • pc104 键盘唯一缺少的键码是93, 紧接在key <LSGT> = 94.我仍然遇到问题。但奇怪的是这个键甚至在那里定义,因为pc104和之间的唯一区别pc105是添加的LSGT键。
  • 我似乎找不到实际的 pc105 定义,它似乎只存在于$XKB/symbols/pc符号中。

相关内容