在 Linux 下交换 Super (Win) 和 Ctrl 键位

起因是我在 MacOS 下使用 Karabiner-Elements 交换了 Command 和 Option 的位置,以符合 Windows 的操作习惯。而 UTM 虚拟机又做了一次转换,为了让 Linux 中的快捷键使用体验也与 Windows 一致,我需要在 Linux 中交换 Super (Win) 键和 Ctrl 键的位置。

本文仅对 Fedora 40 测试过,并在 Debian 12 下测试无效。

本文所述内容出于满足个人的小众需求,无法作为普适的解决方案。请酌情参考。

首先编辑 ~/.Xmodmap 文件,添加以下内容:

1
2
3
4
5
6
7
8
clear control
clear mod4
keycode 37 = Super_L
keycode 133 = Control_L
keycode 105 = Super_R
keycode 134 = Control_R
add control = Control_L Control_R
add mod4 = Super_L Super_R

然后执行以下命令:

1
xmodmap ~/.Xmodmap

此时可以测试交换是否生效。若生效,则可在 ~/.xinitrc 中添加上述命令,使其在 X11 启动时自动执行。

1
[ -f "$HOME/.Xmodmap" ] && xmodmap "$HOME/.Xmodmap"

参考:Harttle Land: ArchLinux 键盘映射:交换 CapsLock 和 Ctrl