X11
CapsLock 作為應用程序鍵盤映射的修飾鍵
我是開發人員,目前我正在使用帶有 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 並且這不起作用,請在此處發布您為解決它所做的事情,我會將其合併到答案中。