如何使 Hyper 和 Super 鍵不執行相同的操作?

如何使 Hyper 和 Super 鍵不執行相同的操作?

我已經使用 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可以使用 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"

相關內容