对于特定键盘, xkb_numlock / xkb_capslock 无效,默认 ("智能") 键盘组合
作者: joanbm创建于 2026年9月5日更新于 2026年9月5日
标签enhancement
描述: 考虑以下情况:
- 您希望 NumLock 默认情况下启用(例如用于笔记本电脑键盘)。
- 您希望为特定键盘禁用 NumLock(例如,在 TKL 键盘中,NumLock 会遮挡一些键)。 以下配置:
input type:keyboard xkb_numlock enabled
input 9610:1:MY_USB_KEYBOARD xkb_numlock disabled没有任何效果,即 NumLock 仍然默认情况下为 MY_USB_KEYBOARD 启用。
原因:
问题在于,在默认的"智能"键盘分组中,具有不同 xkb_numlock 的键盘仍然被放在同一个键盘组中,这与文档一致[5bc72dee4771a2d2d2648b8f69d30e0747f263f6/sway/sway-input.5.scd?plain=1#L287-L295]:
smart 会根据它们的键盘映射和重复信息将座位中的键盘分组到同一组中 因此,在上面的示例中,
xkb_numlock enabled规则为笔记本电脑键盘启用 NumLock,然后将其同步到 MY_USB_KEYBOARD,因此xkb_numlock disabled规则没有实际效果。 但是,对于用户来说,这种行为是不合理的,而且要找出这种行为发生的原因并不容易。 建议:
- 具有不同
xkb_numlock和xkb_capslock的键盘应放在不同的组中(个人补丁 )。 - 类似于今天,具有不同
repeat_rate的键盘也应放在不同的组中。 - 或者,通过物理设备进行分组(#5218)也可以解决此问题。 附录 - 缓解措施:
- 添加
input 9610:1:MY_USB_KEYBOARD xkb_options "numpad:pc":设置某个键盘映射选项,以便"智能"键盘分组将此设备放在不同的组中。 - 禁用键盘分组,使用
seat * keyboard_grouping none:可能会导致一些将自己呈现为多个设备的键盘无法正常工作。
内容来源: swaywm/sway