我使用 xkb 将右侧 Windows 键 (RWIN) 重新映射到 Hyper_R,因为我想将其与 AutoKey 一起使用以实现一些特殊的快捷键。我通过编辑
/usr/share/X11/xkb/symbols/pc
修改 RWIN 行:
key <RWIN> { [ Hyper_R ] };
据我所知,这个方法有效,现在右 Windows 键可以触发 Hyper_R。但是,在 Ubuntu(确切地说是 Xubuntu)中,Hyper 和 Super 似乎在做同样的事情。因此 Super + e 可以启动编辑器,Hyper + e 也可以。
我不确定这是为什么,也不知道我可以在哪里改变这种行为。我希望 Hyper 和 Super 是不同的修饰符。
答案1
由于某种原因,Ubuntu 目前将 Super 和 Hyper 都分配给 Mod4。您可以在 /usr/share/X11/xkb/symbols/pc 中看到这一点:
key <SUPR> { [ NoSymbol, Super_L ] };
modifier_map Mod4 { <SUPR> };
key <HYPR> { [ NoSymbol, Hyper_L ] };
modifier_map Mod4 { <HYPR> };
我可以将其更改为将 super 和 hyper 放在单独的修饰符上,而无需成为 root 或修改任何系统文件。我不确定这是否是最好的方法,因为我绝对不是 xkb 专家,但对我来说这是一种可靠的方法。
首先,创建一个本地符号文件。我的文件位于 ${HOME}/.config/xkb/symbols/local。这会将 Super 分配给 Mod3,将 Hyper 分配给 Mod4。
default partial modifier_keys
xkb_symbols "superhyper" {
modifier_map Mod3 { Super_L, Super_R };
key <SUPR> { [ NoSymbol, Super_L ] };
modifier_map Mod3 { <SUPR> };
key <HYPR> { [ NoSymbol, Hyper_L ] };
modifier_map Mod4 { <HYPR> };
};
然后重新编译现有的地图以添加“本地”:
setxkbmap -print | sed -e '/xkb_symbols/s/"[[:space:]]/+local&/' | xkbcomp -I${HOME}/.config/xkb - ${DISPLAY}
将其放入登录时运行的脚本中。您可以以普通用户身份运行它。
答案2
你xmodmap
可以用两个命令来改变这种行为:
## Hyper_L is mod4 by default, we will "move" it to Mod3
xmodmap -e "remove mod4 = Hyper_L"
xmodmap -e "add mod3 = Hyper_L"