GNOME Wayland环境下配置小键盘:默认始终输入数字、AltGr组合触发箭头及运算符(不受NumLock状态影响)
GNOME Wayland环境下配置小键盘:默认始终输入数字、AltGr组合触发箭头及运算符(不受NumLock状态影响)
我明白你遇到的问题——两个XKB选项单独用都能满足部分需求,但一起启用就会冲突,导致NumLock又开始影响小键盘行为。既然你已经在用自定义布局,那直接修改XKB符号文件来整合两个功能是最靠谱的方案,毕竟Wayland下GNOME完全依赖XKB配置,下面是具体步骤:
一、备份现有自定义布局
先备份你的自定义布局文件(通常在/usr/share/X11/xkb/symbols/目录下,比如叫mycustom),避免修改出错无法恢复:
sudo cp /usr/share/X11/xkb/symbols/mycustom /usr/share/X11/xkb/symbols/mycustom.bak
二、修改自定义布局的小键盘映射
打开你的自定义布局文件,添加一个新的XKB符号段,定义小键盘的行为:
// 小键盘按键规则:基础/Shift层始终输出数字,AltGr层输出箭头/数学运算符 key <KP_0> { [ 0, 0, U2192, 0 ] }; // 0, 0, →, 0 key <KP_1> { [ 1, 1, U2199, 1 ] }; // 1, 1, ↙, 1 key <KP_2> { [ 2, 2, U2193, 2 ] }; // 2, 2, ↓, 2 key <KP_3> { [ 3, 3, U2198, 3 ] }; // 3, 3, ↘, 3 key <KP_4> { [ 4, 4, U2190, 4 ] }; // 4, 4, ←, 4 key <KP_5> { [ 5, 5, U25CB, 5 ] }; // 5, 5, ○, 5 key <KP_6> { [ 6, 6, U2192, 6 ] }; // 6, 6, →, 6 key <KP_7> { [ 7, 7, U2196, 7 ] }; // 7, 7, ↖, 7 key <KP_8> { [ 8, 8, U2191, 8 ] }; // 8, 8, ↑, 8 key <KP_9> { [ 9, 9, U2197, 9 ] }; // 9, 9, ↗, 9 key <KP_Dec> { [ period, period, U2219, period ] }; // ., ., ·, . key <KP_Add> { [ plus, plus, U2212, plus ] }; // +, +, −, + key <KP_Sub> { [ minus, minus, U00B1, minus ] }; // -, -, ±, - key <KP_Mult>{ [ asterisk, asterisk, U00D7, asterisk ] }; // *, *, ×, * key <KP_Div> { [ slash, slash, U00F7, slash ] }; // /, /, ÷, / key <KP_Enter> { [ KP_Enter, KP_Enter, KP_Enter, KP_Enter ] }; // 保持回车功能不变 };
然后在你的主布局符号段里引用这个自定义小键盘规则,比如:
include "us(basic)" // 这里替换成你当前基于的布局,比如us、de等 include "numpad_custom" // 引入自定义小键盘映射 // 你的其他自定义布局设置... };
三、添加Compat规则忽略NumLock
为了确保NumLock状态完全不影响小键盘,我们需要添加XKB兼容规则,让小键盘按键忽略NumLock修饰符。在布局文件中添加以下兼容段:
// 让所有小键盘按键忽略NumLock状态 interpret KP_* { action = SetMods(modifiers=none); }; };
然后在主布局里关联这个兼容规则:
include "us(basic)" include "numpad_custom" compat = "numpad_compat" // 关联兼容规则 // 你的其他自定义设置... };
四、应用配置并生效
修改完成后,需要清除XKB缓存,避免GNOME读取旧配置:
sudo rm -rf /var/lib/xkb/*
然后注销当前用户再重新登录,或者重启GNOME会话,新的配置就会生效。
五、验证配置
登录后可以做以下测试:
- 不管NumLock是开启还是关闭,按小键盘按键都应该输出对应数字
- 按住AltGr再按小键盘按键,应该输出对应的箭头或数学运算符(比如AltGr+KP_2输出↓,AltGr+KP_Mult输出×)
如果需要调整某个按键的AltGr行为,直接修改numpad_custom段里对应的Unicode编码即可(比如把KP_5的AltGr层改成你想要的符号)。
备注:内容来源于stack exchange,提问作者matj1




