X11

如何重新映射超級鍵?

  • March 17, 2021

我正在玩鍵盤設置,為了方便起見,我想將我的 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

引用自:https://unix.stackexchange.com/questions/328400