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


8

我已经使用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是不同的修饰符。


有它的事情在这里,虽然我不认为现在的对话中存在13.10 ...
维尔夫

但这必须在某处可配置,对吗?
亚历山大·雷希施泰纳2014年

您可能可以在dconf-editor
Wilf

1
谢谢,但是没有运气。该死的,Linux上整个键盘的重新映射使我患上了糖尿病。
亚历山大·雷希施泰纳2014年

+1:一致(在糖尿病部分)。我找不到有关如何在Ubuntu中管理键盘的详尽,详尽的详尽指南。gnome-control-center,gnome-tweak-tool,xkbd,xmodmap之间存在一系列交互,这些交互非常复杂,最糟糕的是没有记录。如果您找到一些链接,请分享!(尽管我怀疑几乎没有人真正了解它。请看bugs.launchpad.net/ubuntu/+source/gnome-settings-daemon/+bug/…的不可修复性
Rmano 2014年

Answers:


11

由于某种原因,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}

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


是否可以只编辑该文件以将HYPR更改为Mod3?
Alex Moore-Niemi

3
你可以这样做。不进行适当编辑的好处是系统更新不会覆盖您的更改。
ergosys

对于我自己,我让它与raw.githubusercontent.com/jabbalaci/dotfiles/master/.Xmodmap进行了短暂的合作,尽管它一直在神秘地停止着……
Alex Moore-Niemi

我发现我的答案方法的另一个缺点是,如果您的键盘由于随机故障而被拔出或丢失了USB通信,则必须再次运行该脚本。可能有一些方法可以自动重新运行它,但是我没有研究它。幸运的是,随机故障对我来说只发生一个月左右。如果您编辑系统文件,这应该不是问题。因此,存在优缺点。
ergosys

1
我也用。有已经为它设置罐头,所以我用:setxkbmap -option“帽子:超”
ergosys

3

有了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"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.