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

Ale*_*ner 9 keyboard shortcut-keys xkb

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

/usr/share/X11/xkb/symbols/pc
Run Code Online (Sandbox Code Playgroud)

修改 RWIN 行:

  key <RWIN> {  [ Hyper_R   ]   };
Run Code Online (Sandbox Code Playgroud)

这是指导我的答案

据我所知,这是有效的,现在正确的 Windows 键会触发 Hyper_R。然而,在 Ubuntu(确切地说是 Xubuntu)中,Hyper 和 Super 似乎在做同样的事情。所以 Super + e 启动编辑器,Hyper + e 也是如此。

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

erg*_*sys 12

出于某种原因,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> };
Run Code Online (Sandbox Code Playgroud)

我能够更改它以将 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> };
};
Run Code Online (Sandbox Code Playgroud)

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

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

把它放在一个脚本中,在你登录时运行。你可以以普通用户的身份运行它。

  • 你可以这样做。不就地编辑的好处是系统更新不会覆盖您的更改。 (3认同)
  • 我也用那个。已经有一个罐头设置,所以我使用: setxkbmap -option 'caps:hyper' (2认同)

Ale*_*ies 5

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

## Hyper_L is mod4 by default, we will "move" it to Mod3
xmodmap -e "remove mod4 = Hyper_L"
xmodmap -e "add mod3 = Hyper_L"
Run Code Online (Sandbox Code Playgroud)