如何重新映射超級鍵?
我正在玩鍵盤設置,為了方便起見,我想將我的 Windows 鍵重新映射到選項卡。所以我嘗試了(133 是我鍵盤上的左超級鍵)
xmodmap -e "keycode 133 = Tab Super_L"
但這不起作用,因為按下 windows 鍵仍然會調出“windows”菜單,並且沒有插入選項卡。同一主題的一些不同變體也不起作用,例如使 Tab 發生在 shift+super 上。
我正在使用肉桂(從 ubuntu 16.04 上的 ppa 安裝)和 lightdm,我想 windows/super 鍵在較低級別被攔截,xmodmap 無法完全處理……有什麼辦法實現我想要的?歡迎不涉及 xmodmap 的答案!
(我遠非專家,所以也許有一個非常簡單的解決方案……)
試圖了解正在發生的事情
如果我
xmodmap
不帶參數輸入(獲取修飾符列表),我會得到:xmodmap: up to 4 keys per modifier, (keycodes in parentheses): shift Shift_L (0x32), Shift_R (0x3e) lock Caps_Lock (0x42) control Control_L (0x25) mod1 Alt_L (0x40), Meta_L (0xcd) mod2 Num_Lock (0x4d) mod3 ISO_Level5_Shift (0x69) mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf) mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
重要的部分是用於
mod4
. 那是在哪裡Super_L
。現在,我執行 :
xmodmap -e "keycode 133 = Tab Super_L" && xmodmap | grep mod4
,我得到:mod4 Tab (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
該
mod4
行更改並添加了Tab
. 這就是為什麼您的鑰匙133
仍然打開視窗菜單的原因。順便說一句,我正在嘗試這個,
I3WM
所以結果可能會有所不同。例如,如果我
133
在終端或文本編輯器上按下鍵,它既會寫一個選項卡,又會變成一個修飾符。我還注意到我沒有不同的行為,
Shift
因為密鑰的類型是ONE_LEVEL
.您還可以執行
xev | grep key
以查看某些組合鍵會發生什麼。解決方案
但
xmodmap
也告訴你每個修飾符不能有超過 4 個鍵,所以一個解決方案(到目前為止唯一對我有用的)是犧牲一個你不使用/沒有的鍵,讓它變成Super_L
.如果您使用
QWERTY
,您可以修改位於的佈局/usr/share/X11/xkb/symbols/us
(如果您使用其他佈局,通常是同一文件夾的另一個文件),並編寫:key.type[Group1] = "TWO_LEVEL"; key <MENU>{[Super_L]}; // ONE or TWO level, assuming MENU key isn't used key <LWIN>{[ Tab, Super_L]}; // should be TWO_LEVEL key.type[Group1] = "ONE_LEVEL";
而不是(可能是文件的第 14 行)
key <LWIN>{[Super_L]};
然後,使用 更新您的鍵盤佈局
setxkbmap us && xmodmap | grep mod4
。你會得到類似的東西:
mod4 Super_R (0x86), Super_L (0x87), Super_L (0xce), Hyper_L (0xcf)
如果您仍然得到
Tab
,您可能應該犧牲另一個密鑰。請注意,這0x85
是 的十六進制值133
,這意味著該鍵不會是直接鍵,mod4
但如果按下它仍然可以像視窗鍵一樣Shift
。