我正在使用带有 Xfce 的 MX Linux 并尝试交换三个键:
- Ctrl → Win(超级)
- 击键 → Alt
- Alt → Ctrl
一次交换两个键可以使用setxkbmap
,例如:
setxkbmap -option ctrl:swap_lalt_lctl
但是,如果我尝试添加第二个交换,例如:
setxkbmap -option ctrl:swap_lalt_lctl,altwin:swap_alt_win
我最终重复了相同的键,而不是干净的三向交换。
尝试的解决方案
我创建了一个自定义的 XKB 符号文件:
xkb_symbols "ctrl_win_alt_swap" {
include "us" // Keep the default US layout
key <LCTL> { [ Super_L ] }; // Left Ctrl → Left Win
key <LWIN> { [ Alt_L ] }; // Left Win → Left Alt
key <LALT> { [ Control_L ] }; // Left Alt → Left Ctrl
};
我将其应用于:
setxkbmap -layout custom -variant ctrl_win_alt_swap
重新映射有效,但有一个问题除外:
- 仅按下Alt 键会产生
Ctrl
,这是预期的。 - 按下Alt 与其他键的组合键将产生Ctrl+Alt效果,而不仅仅是
Ctrl
。
为什么会发生这种情况?如何正确交换 Ctrl、Win 和 Alt 而不发生修饰符冲突?