事后更新: 在与 xmodmap 搏斗了一上午的大部分时间后,我发现这个答案完美地解决了问题。我认为原因是xmodmap不如xkb强大,而xkb更接近键盘硬件。按照这些步骤操作后,我的 KUL ES-87(Alt 和 Super 键已切换)并且处于“OS X 模式”,其行为就像 Apple 键盘一样。
我刚刚使用以下脚本通过 xmodmap 重新映射了一些修饰键:
remove mod4 = Super_L
remove control = Control_L
add control = Super_L
add mod4 = Control_L
Super 键确实可以用作 Control 键(我可以使用 Super 键进行复制和粘贴,因为它映射到 Control 键)。但是,我无法使用 Control 键(映射到 Super)执行 Super 在 Ubuntu 中执行的任务,例如使用 Super+V 查看通知栏或使用 Super+PgDn 切换工作区。
奇怪的是,当我进入键盘快捷键重新映射这些功能时,它看到的击键正如我所期望的那样。如果我在键盘上按 Crtl+V,它会记录我发送了 Super+V,但尝试在键盘快捷键中记录快捷键之外的任何其他上下文中使用此组合键仍然不起作用。因此,键盘设置可以正确解释修改后的键映射,但它们仍然无法发挥其功能。如果我重置 xmodmap Super 和 Control 将按预期工作,并且所有快捷方式都像开箱即用一样工作。
此问题的原因是什么?如何使键盘按预期运行?
更新:我将 xkb 重置为默认值(这也重置了 xmodmap),然后使用键码更新了 xmodmap 映射。除了禁用超级键之外,这没有任何效果(该键不再用于打开通知列表,但仍然在键盘快捷键中注册为超级键,并且左键以某种方式Ctrl
保留了 Control_L 功能(我可以从这里复制并粘贴)键,并且在分配新快捷键时键盘快捷键仍将其识别为 Control)到底发生了什么?
m@buntoo:~$ setxkbmap -layout us
m@buntoo:~$ xmodmap -pke | grep 'Super\|Control'
keycode 37 = Control_L NoSymbol Control_L
keycode 105 = Control_R NoSymbol Control_R
keycode 133 = Super_L NoSymbol Super_L
keycode 134 = Super_R NoSymbol Super_R
keycode 206 = NoSymbol Super_L NoSymbol Super_L
m@buntoo:~$ xmodmap -e "keycode 37 = Super_L"
m@buntoo:~$ xmodmap -e "keycode 133 = Control_L"
m@buntoo:~$ xmodmap -pke | grep 'Super\|Control'
keycode 37 = Super_L NoSymbol Super_L
keycode 105 = Control_R NoSymbol Control_R
keycode 133 = Control_L NoSymbol Control_L
keycode 134 = Super_R NoSymbol Super_R
keycode 206 = NoSymbol Super_L NoSymbol Super_L
m@buntoo:~$ xmodmap -e "keycode 206 = Control_L"
m@buntoo:~$ xmodmap -pke | grep 'Super\|Control'
keycode 37 = Super_L NoSymbol Super_L
keycode 105 = Control_R NoSymbol Control_R
keycode 133 = Control_L NoSymbol Control_L
keycode 134 = Super_R NoSymbol Super_R
keycode 206 = Control_L NoSymbol Control_L
m@buntoo:~$
答案1
除了删除和添加 mod4 和 Super_L 之外,还交换键码。
获取键码xmodmap -pke
并交换值。对我来说,keycode 37 = Control_L NoSymbol Control_L
),所以我这样做:
xmodmap -e "keycode 37 = Super_L"
以及另外两个(如果需要)。我无法准确测试,我的键盘没有Super_L
.