我刚刚从带有 Gnome 桌面的 Fedora 14 升级到带有 Mate 桌面的 Fedora 20。在 F14 下,我之前将 CapsLock 与 Control_Left 交换,将 Alt_Right 与 Control_Right 交换。我通过将以下几行添加到 /etc/X11/xinit/xinitrc-common 来完成这些操作(请原谅每行上的“xmodmap”)
xmodmap -e 'clear lock'
xmodmap -e 'clear control'
xmodmap -e 'remove mod1 = Alt_R'
xmodmap -e 'add control = Caps_Lock Alt_R'
xmodmap -e 'add mod1 = Control_R'
xmodmap -e 'add lock = Control_L'
在 F14 下,它们按预期工作。但是,当我将它们复制到 F20 下的 /etc/X11/xinitrc-common 时,CapsLock Control_L 交换不会发生。相反,两个键都变为 CapsLock。 Alt_R/Control_R 交换确实工作正常。
接下来,我尝试了 xmodmap 手册页中提供的解决方案,也在这里: 使用 xmodmap 重新映射 Caps Lock 不起作用
xmodmap -e 'remove Lock = Caps_Lock'
xmodmap -e 'remove Control = Control_L'
xmodmap -e 'keysym Control_L = Caps_Lock'
xmodmap -e 'keysym Caps_Lock = Control_L'
xmodmap -e 'add Lock = Caps_Lock'
xmodmap -e 'add Control = Control_L'
奇怪的是,CapsLock 和 Control_L 键现在都是 Control_L。
不过,使用键码映射进行所有交换就像一个魅力:
xmodmap -e 'clear Lock'
xmodmap -e 'clear Control'
xmodmap -e 'remove Mod1 = Alt_R'
xmodmap -e 'keycode 66 = Control_L'
xmodmap -e 'keycode 37 = Caps_Lock'
xmodmap -e 'keycode 108 = Control_R'
xmodmap -e 'keycode 105 = Alt_R'
xmodmap -e 'add Lock = Caps_Lock'
xmodmap -e 'add Control = Control_L Control_R'
xmodmap -e 'add Mod1 = Alt_R'
交换前的原始键码为 66=CapsLock、37=Control_L、108=Alt_R、105=Control_R。
我想了解为什么前两种方法不起作用。有任何想法吗?
答案1
当我尝试切换笔记本电脑上的右控制键和菜单键时,我遇到了类似的问题(戴尔交换了它们在键盘上的物理位置)。
由于某种原因,修饰键必须具备两个功能才能发挥作用。它需要知道特定键是 Control_R,并且需要知道特定键附加有 Control 修饰符。
所以我不得不交换键码,然后单独删除一个键的控制功能并将其添加到另一个键。当我尝试交换字母键时,我只需要执行第一步。
我的猜测是系统对修饰符函数的处理方式不同。