Keyboard
為 XKB 重新映射密鑰
我正在嘗試重新映射 Scroll Lock 鍵,以便它生成任何 Windows 鍵的鍵碼。
首先,我轉儲目前的鍵盤映射:
xkbcomp $DISPLAY original-dump
然後找到我感興趣的鍵的鍵碼:
cat original-dump | grep SCLK <SCLK> = 78; cat original-dump | grep LWIN <LWIN> = 133;
現在我將組件名稱列印到一個文件中:
setxkbmap -print > original-components
編輯文件以添加我的鍵碼修改:
xkb_keymap { xkb_keycodes { include "evdev+aliases(qwerty)" // Remap Scroll-lock to the keycode of LWIN(133) <SCLK> = 133; }; xkb_types { include "complete" }; xkb_compat { include "complete" }; xkb_symbols { include "pc+us+inet(evdev)" }; xkb_geometry { include "pc(pc105)" }; };
將上面的文件保存為 modified-components 並執行:
xkbcomp modified-components $DISPLAY
再次轉儲:
xkbcomp $DISPLAY original-dump
檢查鍵碼:
cat another-dump | grep SCLK <SCLK> = 133;
到目前為止一切順利,但是當我執行時
xev
,Scroll Lock 鍵的鍵碼仍然是78。如果我執行:
xmodmap -e "keycode 78 = Super_L"
xev仍然顯示78,但至少我在 XFCE 中為 LWIN 和 RWIN 創建的快捷方式有效。
我想知道我在xkb上做錯了什麼。謝謝。
嘗試了以下新方法(成功)
在目錄下新建了一個名為
sclkfile
的/usr/share/X11/xkb/symbols/
文件,並添加了以下內容:// Make the Scroll Lock key a left Super. xkb_symbols "sclk_super" { replace key <SCLK> { [ Super_L ] }; modifier_map Mod4 { <SCLK> }; };
在中添加了新規則
/usr/share/X11/xkb/rules/evdev
:sclkoption:sclk_super = +sclkfile(sclk_super)
以及規則的描述
/usr/share/X11/xkb/rules/evdev.lst
:! option sclkoption Scroll Lock behaviour sclkoption:sclk_super Scroll Lock is Super
這裡也是
/usr/share/X11/xkb/rules/evdev.xml
:<configItem> <name>sclkoption</name> <description>Scroll Lock behaviour</description> </configItem> <option> <configItem> <name>sclkoption:sclk_super</name> <description>Scroll Lock is Super</description> </configItem> </option>
最後執行:
$ setxkbmap -option sclkoption:sclk_super
沒有錯誤,當我列印佈局的組件時:
$ setxkbmap -print xkb_keymap { xkb_keycodes { include "evdev+aliases(qwerty)" }; xkb_types { include "complete" }; xkb_compat { include "complete" }; xkb_symbols { include "pc+us+inet(evdev)+sclkfile(sclk_super)" }; xkb_geometry { include "pc(pc105)" }; };
新規則就在那裡。
現在,如果我執行
xev
:keycode 78 (keysym 0xffeb, Super_R)
鍵碼仍然是 78,但鍵符是 Super_R。成功。