使特定键粘滞

使特定键粘滞

我已经发现在 xorg(很棒的桌面管理器)下启用粘滞键在超级用户上,这表明我可以通过以下方式启用粘滞键

xkbset sticky -twokey

这按预期工作,但就我而言,我更愿意仅使特定键 ( Alt Gr) 成为粘性键,而不是所有修饰键。这个可以配置吗?如果是这样:在哪里?

答案1

在 X11 上实现这一点的一种方法是使用 XKB 并将右侧 alt 键设置为当前锁存模式作为 AltGr。有几种方法可以解决这个问题:

选项1

您可以将当前的键盘布局导出到文件,仅更改右侧 alt 键 (AltGr) 的行为并将其加载回 X,从而覆盖默认布局:

  1. 运行xkbcomp $DISPLAY current.xkb以导出当前的键盘布局。

  2. 打开current.xkb文件并找到以下代码片段:

    key <RALT> {
        type= "ONE_LEVEL",
        symbols[Group1]= [ ISO_Level3_Shift ]
    };
    
  3. 更改如下:

    key <RALT> {
        type= "ONE_LEVEL",
        symbols[Group1]= [ ISO_Level3_Shift ],
        actions[Group1]= [ LatchMods(mods=AltGr) ]
    };
    
  4. 保存文件并运行xkb current.xkb $DISPLAY以应用新布局。

注意事项

  1. 新布局仅适用于当前的 X 会话。您可能希望在登录后自动重新加载它。如果您使用窗口管理器,只需将其添加xkb current.xkb $DISPLAY到您的.xinitrc.xprofile.如果您使用的是桌面环境,这可能会有点棘手,因为桌面环境通常以自己的方式处理键盘布局,并且它们可以覆盖本地配置。请务必检查他们的文档,或者尝试选项2以下。

  2. 如果您使用多种键盘语言,则需要对每个导出的 xkb 文件重复上述步骤,并在适当时以某种方式加载它们(例如,使用每种语言的快捷方式)。

选项2

您可以创建一个新的 XKB 选项来启用 AltGr 键所需的行为,然后将其与语言布局一起激活:

  1. /usr/share/X11/xkb/symbols在named中创建一个altgr包含以下内容的文件:

    partial alphanumeric_keys
    xkb_symbols "latch" {
        key <RALT> {
            symbols = [ ISO_Level3_Shift ],
            actions = [ LatchMods(mods=AltGr) ]
        };
    };
    
  2. 打开evdev文件/usr/share/X11/xkb/rules并找到行! option = symbols.在其后添加一个新行并插入altgr:latch = +altgr(latch).它将如下所示:

    ! option  = symbols
      altgr:latch = +altgr(latch)
      ...
    

    +altgr(latch)方法使用位于以下位置的文件中latch的组altgr/usr/share/X11/xkb/symbols

现在您需要激活新选项。您可以执行以下操作之一:

  1. 运行setxkbmap -layout us -variant altgr-intl -option altgr:latch以激活新选项,将us和替换altgr-intl为您的语言和变体。这将持续当前的 X 会话(对于测试有用),您可能希望将其添加到.xinitrc.xprofile以便它在登录时自动加载。

  2. 如果使用 systemd,请运行以更新sudo localectl --no-convert set-x11-keymap us pc104 altgr-intl altgr:latch您的键盘配置。/etc/X11/xorg.conf.d

  3. 如果使用桌面环境,可能有一种方法可以告诉它在加载键盘布局时激活该选项。我知道 GNOME 使用 dconf 并且您可以在org.gnome.desktop.input-sources.xkb-options.

警告

中的 XKB 文件/usr/share/X11/xkb并不意味着可以直接编辑,并且在执行系统更新时可能会被覆盖。更改 XKB 配置的“正确方法”是太复杂了我建议您只需创建一个脚本,在需要时(重新)应用新选项。

相关内容