X11

CapsLock 作為應用程序鍵盤映射的修飾鍵

  • January 9, 2020

我是開發人員,目前我正在使用帶有 PyCharm IDE 的 Ubuntu Linux 來開發網站。為了提高打字性能,我考慮將 CapsLock 更改為 Hyper_L 並使用 xmodmap 將其分配給 mod3。在此之後,我想將“i”鍵的 mod3 映射到“向上”。到目前為止,我所做的是:

xmodmap -e "keysym Caps_Lock = Hyper_L"

輸出是這樣的:

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Hyper_L (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

然後我從 mod4 中刪除 Hyper_L

xmodmap -e "remove Mod4 = Hyper_L"

之後我嘗試將 Hyper_L 分配給 mod3

xmodmap -e "add Mod3 = Hyper_L"

但是我收到以下錯誤:

X Error of failed request:  BadValue (integer parameter out of range for operation)
 Major opcode of failed request:  118 (X_SetModifierMapping)
 Value in failed request:  0x17
 Serial number of failed request:  11
 Current serial number in output stream:  11

那麼,這裡的問題是什麼?我怎樣才能使它工作?我的做法對嗎?或者我應該使用不同的方法來使用 mod3 作為自定義鍵?

PS 我正在使用 Microsoft Natural Ergonomic 7000 鍵盤

網際網路上有無數的答案,其中大多數令人困惑。

關鍵是您需要將“keycode 66”映射到您的超級鍵,從其他 mod{1,2,4,5} 中刪除該鍵的映射(僅當存在時),然後設置 mod3。

打開 ~/.Xmodmap 並輸入以下內容:

! Unmap capslock
clear Lock
keycode 66 = Hyper_L

! Leave mod4 as windows key _only_
remove mod4 = Hyper_L

! Set mod3 to capslock
add mod3 = Hyper_L

執行這個

xmodmap ~/.Xmodmap

如果出現問題,您可以使用以下方法重置鍵盤:

setxkbmap -layout us

爆炸的可能原因是 Hyper_L 映射到其他地方。通過執行不帶 args 的 xmodmap 來確定還有什麼綁定到 Hyper_L 來解決這個問題。當您知道需要刪除的內容時,請在 .Xmodmap 文件中添加“刪除 BINDING = Hyper_L”。

.Xmodmap 文件將在您打開 X11 會話時載入,您應該在下次登錄或重新啟動時使用此映射。

此配置適用於我的 ubuntu 14.04 設置。如果您有不同的 *nix 並且這不起作用,請在此處發布您為解決它所做的事情,我會將其合併到答案中。

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