我正在嘗試重新映射 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"
西夫仍然向我展示78,但至少我在 XFCE 中為 LWIN 和 RWIN 創建的快捷方式可以工作。
我想知道我做錯了什麼xkb。謝謝。
答案1
嘗試了以下新方法(成功)
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。成功。