linux 按鍵修改簡單示例
1、修改方法
文字介面和圖形介面的keycode是不一樣的,按鍵對映方式不同,因此修改方法不同。
1.1 文字介面
1.1.1 修改命令
在文字介面,dumpkeys 可以查詢當前keycode。在文字或圖形介面loadkeys 可以修改,例如將ctrl+alt+g修改為開啟虛擬終端tty1的快捷鍵。g的keycode是35。
[email protected]-os:/etc/systemd$ sudo loadkeys -u
[sudo] kylin 的密碼:
正在載入 <stdin>
contron alt keycode 35 = Console_1
ctrl+d確認修改。
但是用命令會在重啟後失效,要不在啟動的某個指令碼中新增該命令,要不就修改對映檔案;
1.1.2 修改對映檔案
/etc/console-setup下 cached.kmap.gz 解壓,根據dumpkeys的結果找到對應的設定項後修改。
這是dumpkeys的部分結果:
keycode 35 = +h
shift keycode 35 = +H
shift altgr keycode 35 = +H
control keycode 35 = BackSpace
shift control keycode 35 = BackSpace
altgr control keycode 35 = BackSpace
shift altgr control keycode 35 = BackSpace
alt keycode 35 = Meta_h
shift alt keycode 35 = Meta_H
altgr alt keycode 35 = Meta_h
shift altgr alt keycode 35 = Meta_H
control alt keycode 35 = Meta_BackSpace
shift control alt keycode 35 = Meta_BackSpace
altgr control alt keycode 35 = Meta_BackSpace
cached.kmap檔案的部分內容:
keycode 35 = +U+0068 +U+0048 +U+0068 +U+0048 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace +U+0068 +U+0048 +U+0068 +U+0048 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace +U+0068 +U+0048 +U+0068 +U+0048 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace +U+0068 +U+0048 +U+0068 +U+0048 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace +U+0048 +U+0068 +U+0048 +U+0068 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace +U+0048 +U+0068 +U+0048 +U+0068 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace +U+0048 +U+0068 +U+0048 +U+0068 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace +U+0048 +U+0068 +U+0048 +U+0068 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace
希望得到control alt keycode 35 = Console_1的話, cached.kmap檔案修改為:
keycode 35 = +U+0068 +U+0048 +U+0068 +U+0048 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Console_1 Meta_BackSpace Meta_BackSpace Meta_BackSpace ...
1.2 圖形介面
可以通過xev來獲取相應按鍵的keycode和keysym值。
1.2.1 通過xmodmap修改
xmodmap -pk 檢視當前對映規則;
xmodmap修改本人只實驗修改單獨按鍵和shift+單個按鍵的兩種,其他情況沒搞清楚,這兩種設定方式有其他文章說明,此處不細說;
1.2.2 通過xkb修改相應檔案
[email protected]-os:/etc/console-setup$ cd /usr/share/X11/xkb/
[email protected]-os:/usr/share/X11/xkb$ ls
compat geometry keycodes rules symbols types
xkb下有6個資料夾,此處關注symbols資料夾下
檔名 | 簡介 |
---|---|
pc | 修飾鍵對應規則 |
us | English us 鍵盤佈局規則 |
srvr_ctrl | fkey 對應 vt 的規則 |
未完待續 |
xkbcomp $DISPLAY filename
檢視xkb keymap資訊,包括keycodes、types、compatibility、symbols、geometry,根據名稱查詢該條目在哪個檔案中設定。
例如將ctrl+alt+g修改為開啟虛擬終端tty1的快捷鍵,
在/usr/share/X11/xkb/symbols/us檔案,xkb_symbols “basic” 中
key <AC05> { [ g, G ] };
改為:
key <AC05> {type[Group1] = "CTRL+ALT",
symbols[Group1] = [ g, G, NoSympol, NoSympol, XF86Switch_VT_1 ] };
參考:
1、https://www.charvolant.org/doug/xkb/html/xkb.html
2、https://github.com/Chunlin-Li/Chunlin-Li.github.io/blob/master/blogs/linux/ubuntu-xkb-keyboard-remap.md