xmodmap - 将 Caps_Lock 重新映射为 Escape,将 Shift+Caps_Lock 重新映射为 Caps_Lock

Fab*_*ius 5 linux keyboard xmodmap

我在使用xmodmap时遇到了奇怪的行为。我想重新映射Caps_Lock,使其充当EscapeShift+Caps_Lock因此它充当Caps_Lock。在我的例子中,~/.Xmodmap我尝试了以下命令的所有可能的组合,总是得到相同的结果:

clear Lock
remove Lock = Caps_Lock
keycode 66 =
keycode 66 = Escape Caps_Lock
keysym Caps_Lock = Escape Caps_Lock
Run Code Online (Sandbox Code Playgroud)

Caps_Lock正确地重新映射到Escape

$ xmodmap -pke | grep Caps
keycode  66 = Escape Caps_Lock Escape Caps_Lock
Run Code Online (Sandbox Code Playgroud)

重启后它仍然会锁定大写字母。所以它同时充当EscapeCaps_Lock。运行xev我可以看到在和state之间切换。虽然按预期工作(如)。如果我登录后在终端中运行,我会像以前一样得到:0x100x12Shift+Caps_LockCaps_Lockxmodmap ~/.Xmodmap

$ xmodmap -pke | grep Caps
keycode  66 = Escape Caps_Lock Escape Caps_Lock
Run Code Online (Sandbox Code Playgroud)

BUT Caps_Lock开始按预期运行,只是Escape并且不再锁定大写字母。

我真的不明白我做错了什么。

Fab*_*ius 3

终于找到了一种方法来完成这项工作。我发现X 键盘扩展还提供了一个选项。通过查看/usr/share/X11/xkb/rules/base.lst我发现了以下行:

caps:escape_shifted_capslock Make unmodified Caps Lock an additional Esc, but Shift + Caps Lock behaves like regular Caps Lock
Run Code Online (Sandbox Code Playgroud)

所以我只需要添加caps:escape_shifted_capslockXkbOptions里面/etc/X11/xorg.conf.d/00-keyboard.conf这样:

Option "XkbOptions" "terminate:ctrl_alt_bksp,caps:escape_shifted_capslock"
Run Code Online (Sandbox Code Playgroud)

重新启动后Caps_LockShift+Caps_Lock其行为完全符合我想要的方式。