我正在尝试重新映射 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。成功。