在 xmodmap 中交换 Ctrl 和 caps 后,如何让 Ctrl 在多修饰键组合中正常工作?

在 xmodmap 中交换 Ctrl 和 caps 后,如何让 Ctrl 在多修饰键组合中正常工作?

我已经交换Left CtrlCaps Lock通过创建 ~/.Xmodmap

keycode 66 = Control_L
keycode 37 = Caps_Lock
clear Lock
clear Control
add Lock    = Caps_Lock
add Control = Control_L Control_R

然后运行$ xmodmap ~/.Xmodmap​​。按下Left Ctrl键可按预期工作,切换Caps Lock。按下Caps Lock键通常适用于简单的快捷方式,例如Ctrl+N.

但是,当需要多个修饰键(例如Alt++ )时,只有我先按下该键时,此操作才有效Ctrl。如果我先按下该键,则没有任何效果。IAltCaps Lock

我可以使用 重置键盘布局$ setxkbmap -layout us,上述快捷方式将正常工作。如果我$ xmodmap ~/.Xmodmap再次运行,我还会遇到同样的问题。

我还发现,即使对于单修饰键组合,我也必须Caps Lock比使用普通Ctrl键时多按住一秒钟才能使其生效。这大概是 0.01 秒,但很明显,十分之一的按键会发出错误信号。

此外,如果我使用CtrlCaps Lock进行交换$ setxkbmap -layout us -option 'ctrl:swapcaps',我就不会再注意到多个修饰键的问题。但是,我仍然想解决 xmodmap 解决方案的问题,因为我很快就会得到一个新键盘,并且需要用Ctrl不同的键进行交换。

=EDIT= 我尝试了另一款键盘(Das Keyboard),似乎第二个问题(需要Caps Lock比我之前多按住一秒钟)Ctrl可能是原装键盘(Apple 铝制有线键盘)的硬件问题。但是,多个修改器的第一个问题仍然存在。

=EDIT= 我在 xev 中测试了不同的按键。按住Alt然后按下Caps Lock键会导致keycode 66 (keysym 0x0, NoSymbol),而keycode 66 (keysym 0xffe3, Control_L)不是 Alt按住 。

答案1

显然,上面的 xmodmap 代码是不是只需交换Ctrl+LCaps Lock键即可。

keycode 66 = Control_L

应该

keycode 66 = Control_L Control_L

允许在Ctrl另一个修饰键之后按下时正确运行。我找不到关于此解决方案的任何好的参考资料,但是显然第二项与Shift+有关Key。我不确定为什么这里它似乎也适用于Alt+ Key

(此外,FWIW,其他来源指出最多有八列,而不是链接中提到的六列。)

相关内容