使用setkbmap

使用setkbmap

我使用 Caps Lock 作为控制键,并使用以下命令进行配置(我正在运行 Gnome):

gsettings set org.gnome.desktop.input-sources xkb-options \
  "['caps:ctrl_modifier']"

有时,当我按下 Control 修改的键时,该键会自动重复。例如,我会输入 Ctrl-w,然后 w 键突然开始重复,就好像我一直按住它一样。我怀疑 keyup 事件丢失了。重复会无限期地持续下去,直到我按下另一个键。

也可能相关,有时当我按下 Control 修改的键时,它根本不执行任何操作,就好像我“按错了”一样。我只是再试一次,它起作用了,但我怀疑这是同一根本问题的另一个症状。

我该如何调试/修复这个问题?我想查看正在发送哪些键盘事件以及何时发送。


更新

我仍然没有找到解决这个问题的方法(不知道如何处理下面的答案,因为它是有用的信息,但没有解决我的问题),但是我用的是xinput监视涉及的键盘事件。

press Caps它似乎与“翻转”有关,因为我只能使用、press Wrelease Caps、等按键序列重现按键重复错误release W(而不是在释放 Caps 之前释放 W)。

我也只能在 X 中重现该错误,而不能在虚拟控制台中重现。

我清空了xkb-options通过设置的设置gsettings,现在/etc/X11/xorg.conf.d/00-keyboard.conf改为依赖:

Section "InputClass"
  Identifier "Keyboard catchall"
  MatchIsKeyboard "on"
  Option "XkbModel" "pc104"
  Option "XkbLayout" "us"
  Option "XkbOptions" "ctrl:nocaps"
  Option "XkbVariant" ""
EndSection

我改用caps:ctrl_modifier它是ctrl:nocaps因为它可以在虚拟控制台和 X 中运行。

所以我仍在寻找解决方案,但我觉得我至少在这个过程中学到了一些东西。

答案1

在 XServer 而不是 Gnome 中设置控制键行为(假设您没有使用 wayland 而不是 X):

使用setkbmap

  1. 获取您的键盘布局:

    setxkbmap -query
    

    查找标有 的节layout。类似于gb英文布局。你的可能会有所不同。

  2. 使用您在上面 #2 中使用的相同布局修改键盘布局选项:

    setxkbmap -layout gb -option ctrl:nocaps
    

    这里的ctrl:nocaps选项使您的大写锁定一个额外的控制键。要使此更改永久生效,如果您使用终端或从终端.xinitrc启动 X,则可以将其添加到您的文件中。如果你不这样做startxxinit看到这个答案了解如何在登录 Gnome 时运行命令。

使用xmodmap

.Xmodmap在您的主目录中创建以下文件:

!
! Make Caps_Lock another Control_L
!
remove Lock = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock

然后,您可以在启动时运行以下命令,以使此更改对您的 X 会话生效:

xmodmap ~/.Xmodmap

一旦您有了喜欢的东西,您可以将此命令添加到您的命令中.xinitrc,或者使用与上面链接相同的方法来使其永久化。

更深入

您还可以使用 更改大小写以在内核级别进行控制loadkeys

这里的基础知识是用于dumpkeys将现有的键映射转储到文件中。更改大写锁定的映射,然后用于loadkeys加载新的键盘映射。

请注意,由于您要更改内核读取键盘输入的方式,因此这些更改将需要 root 权限。这是一个github要点并进行了相关修改和一些说明。

相关内容