如何使Hyper和Super键不做同样的事情?

我已经使用xkb将正确的Windows密钥(RWIN)重新映射到Hyper_R,因为我想将它与AutoKey一起用于一些特殊的快捷方式。 我是通过编辑完成的

/usr/share/X11/xkb/symbols/pc 

修改RWIN行:

  key  { [ Hyper_R ] }; 

( 这是指导我的答案 )

据我所知,这是有效的,正确的Windows键现在激活Hyper_R。 然而,似乎在Ubuntu(确切地说是Xubuntu),Hyper和Super在某种程度上做了同样的事情。 所以Super + e推出了编辑器,Hyper + e也是如此。

我不确定为什么会这样,或者我可以改变这种行为。 我希望Hyper和Super成为不同的修饰符。

出于某种原因,Ubuntu目前将Super和Hyper分配给Mod4。 你可以在/ usr / share / X11 / xkb / symbols / pc中看到这个:

  key  { [ NoSymbol, Super_L ] }; modifier_map Mod4 {  }; key  { [ NoSymbol, Hyper_L ] }; modifier_map Mod4 {  }; 

我能够将其更改为将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  { [ NoSymbol, Super_L ] }; modifier_map Mod3 {  }; key  { [ NoSymbol, Hyper_L ] }; modifier_map Mod4 {  }; }; 

然后重新编译现有地图以添加“本地”:

 setxkbmap -print | sed -e '/xkb_symbols/s/"[[:space:]]/+local&/' | xkbcomp -I${HOME}/.config/xkb - ${DISPLAY} 

将其放入要在登录时运行的脚本中。您可以以普通用户身份运行它。

使用xmodmap您可以使用2个命令更改此行为:

 ## Hyper_L is mod4 by default, we will "move" it to Mod3 xmodmap -e "remove mod4 = Hyper_L" xmodmap -e "add mod3 = Hyper_L"