linux中的高級鍵映射
我正在使用 manjaro i3,並且正在研究修改我所做的一些鍵映射。目前我正在使用 xcape、xmodmap 和 setxkbmap 命令重新映射以下鍵:
- 握住時可控制的蓋子,按下時可退出
- 交換分號和冒號
我已經用這個設置腳本完成了這個:
setxkbmap -option 'caps:ctrl_modifier' xcape -e 'Caps_Lock=Escape' xmodmap -e "keycode 47 = colon semicolon"
我想就我希望進行的其他更改尋求一些幫助或建議,因為我已經破壞了我的鍵映射並且在玩下面列出的列印螢幕重新映射時必須重新安裝我的作業系統才能回到第一格。我希望做出的改變如下:
- 列印螢幕 –> 禁用或用作另一個超級鍵
- 左 alt –> mode_switch 鍵
- 轉義鍵 –> 波浪線和反引號
- 原始波浪號和反引號->退格
- 退格->刪除
- 禁用 home、end、insert、delete 鍵並映射它們以執行某些腳本
- mode_switch + h, j, k, l –> 附加箭頭鍵
- mode_switch + 退格-> 首頁
- mode_switch + 刪除 –> 結束
我應該使用什麼工具來完成這些重新映射?此外,如果有人有一些他們過去使用過的類似範例,那也將非常有幫助!提前感謝您的幫助。
我在 GNOME 中執行 Pop!_OS(Ubuntu 18.10 的衍生版本)的 ThinkPad P1 上確認了以下所有內容。
查找關鍵程式碼
在終端中執行
xev
並開始輸入。有很多數據,但是您要查找的通常是單詞之後的第二個第 3 行keycode
:KeyRelease event, serial 37, synthetic NO, window 0x3c00001, root 0x1a5, subw 0x0, time 291165043, (404,446), root:(454,634), state 0x0, **keycode 107** (keysym 0xff67, Menu), same_screen YES, XLookupString gives 0 bytes: XFilterEvent returns: False
有些鍵
xev
不會列印鍵碼,例如 Print Screen。對於這些,您可以通過 grep 瀏覽下一節中創建的文件。所需工具
xmodmap
轉儲你目前的綁定
您可以通過執行將目前映射列印到標準輸出
xmodmap -pke
。xmodmap
通過首先將佈局備份到文件,您將節省一些潛在的麻煩:xmodmap -pke ~/.Xmodmap.orig
該文件還可以作為一個簡單的參考,如果它們沒有出現在
xev
.cat ~/.Xmodmap | grep Print keycode 107 = Print Sys_Req Print Sys_Req
快速更改綁定的命令
您已經知道這一點,但只是重申一下:
xmodmap -e "keycode [number] = [keys...]"
這將為您的會話臨時重新綁定密鑰。再次執行
xmodmap -pke
將反映這些變化。句法
xmodmap
使用空格分隔的列來表示 a 的不同修飾符/模式keycode
。從左到右他們是:
- 鑰匙本身
- Shift + 鍵
- Mode_switch + 按鍵
- Mode_switch + shift + 按鍵
例如:
xmodmap -e "44 = j J Down Next"
這會單獨設置“J”鍵“j”,當按下 Shift 鍵時設置“J”,按下 Mode_switch 鍵時設置向下箭頭,按下 Mode_switch 和 Shift 鍵時設置 Page Down。
Mode_switch
Mode_switch
是一個單獨的通用修飾符,類似於 Shift。我認為許多鍵盤不再帶有專用Mode_switch
(AltGr) 鍵,但您可以使用xmodmap
.# Set left Alt as Mode_switch xmodmap -e "keycode 108 = Mode_switch"
使用 GNOME 設置執行腳本或
xbindkeys
我不知道使用
xmodmap
. 但是,有一些簡單的方法。從 i3 配置
i3 文件
bindsym
有關於在文件中使用/bindcode
指令的範例~/.config/i3/config
。bindcode 214 exec /home/you/some_script.sh
我還沒有設置 i3,還沒有測試過,但它直接來自使用者手冊。我猜程式碼與您在
xmodmap
& 朋友中找到的程式碼相匹配。侏儒
查看設置 > 設備 > 鍵盤 > 鍵盤快捷鍵。點擊加號並添加腳本/鍵組合。請注意,您必須將完整路徑(從根目錄)放入腳本並確保它是可執行的。
在我的測試中,GNOME 不允許您使用某些鍵,例如 Home 和 End。
xbindkeys
xbindkeys
可以攔截任何按鍵並執行腳本。也可以查看一些配置文件範例,執行
xbindkeys --defaults > $HOME/.xbindkeysrc
並查看文件。請注意,它不會打開終端,只需在程序中執行文件。
你的例子
這是為您想要的內容執行的實際命令。請務必確認您自己的密鑰程式碼,這些正是我碰巧擁有的。
第 1 步:重新映射
xmodmap
# print screen --> use as another super key, print screen with Mode_switch # Note: On GNOME, it appears Super_R doesn't work the same as Super_L xmodmap -e "keycode 107 = Super_L NoSymbol Print Sys_Req" # left alt --> mode_switch key xmodmap -e "keycode 64 = Mode_switch NoSymbol" # escape key --> tilde and backtick # Note: this can have unexpected consequences if you use `xcape` to map # Control/Caps to send Escape when tapped. It will instead send `/~ when you # press Caps Lock attempting to get Escape. # A solution might be to switch the keys around and use a non-op key as a # placeholder, like in the xcape README # https://github.com/alols/xcape/blob/master/README.md#examples xmodmap -e "keycode 9 = grave asciitilde grave asciitilde" # original tild and back tick --> backspace xmodmap -e "keycode 49 = BackSpace" # backspace --> delete, and # mode_switch + backspace --> home xmodmap -e "keycode 22 = Delete NoSymbol Home" # mode_switch + delete --> end # Note: This won't work when combined with `xbindkeys`, since `xbindkeys` # hijacks the entire Delete key from X. xmodmap -e "keycode 119 = Delete NoSymbol End" # mode_switch + h, j, k, l --> additional arrow keys # Bonus: capital J/K are Page Down/Up, H/L are Home/End with Mode_switch + Shift xmodmap -e "keycode 43 = h H Left Home" xmodmap -e "keycode 44 = j J Down Next" xmodmap -e "keycode 45 = k K Up Prior" xmodmap -e "keycode 46 = l L Right End"
第 2 步:保存更改
# Write current config to a file xmodmap -pke > ~/.Xmodmap # Load the config into xmodmap xmodmap ~/.Xmodmap
假設您有一個標准設置,將上面的最後一個命令添加到您的
~/.profile
或將在您登錄時載入它。~/.bash_profile
對我來說這有點慢,您可能只想xmodmap -e
手動添加所有命令。第 3 步:為自定義腳本設置綁定
xbindkeys
確保
xbindkeys
已安裝,並將其添加到您的~/.xbindkeysrc
文件中:# disable home, end, insert, delete keys and map them to run some script, and "some-script-in-PATH" Home "some-script-in-PATH" End "some-script-in-PATH" Insert "some-script-in-PATH" Delete
然後重新載入
xbindkeys -p
。第 4 步:沒有第 4 步
延伸閱讀
關於重新映射的Emacs Wiki 頁面 Xmodmap 上的
更多關於 StackExchange 上
的 Mode_switch 一個更全面、更費力的解決方案是編寫您自己的鍵盤佈局。