我使用 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 W
、release 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
获取您的键盘布局:
setxkbmap -query
查找标有 的节
layout
。类似于gb
英文布局。你的可能会有所不同。使用您在上面 #2 中使用的相同布局修改键盘布局选项:
setxkbmap -layout gb -option ctrl:nocaps
这里的
ctrl:nocaps
选项使您的大写锁定一个额外的控制键。要使此更改永久生效,如果您使用终端或从终端.xinitrc
启动 X,则可以将其添加到您的文件中。如果你不这样做startx
xinit
看到这个答案了解如何在登录 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要点并进行了相关修改和一些说明。