在share/X11/xkb/rules/evdev/lst中,我找到了这组ctrl选项
ctrl Ctrl key position
ctrl:nocaps Caps Lock as Ctrl
ctrl:lctrl_meta Left Ctrl as Meta
ctrl:swapcaps Swap Ctrl and Caps Lock
ctrl:ac_ctrl At left of 'A'
ctrl:aa_ctrl At bottom left
ctrl:rctrl_ralt Right Ctrl as Right Alt
ctrl:menu_rctrl Menu as Right Ctrl
ctrl:ctrl_ralt Right Alt as Right Ctrl
ctrl:swap_lalt_lctl Swap Left Alt key with Left Ctrl key
ctrl:swap_lwin_lctl Swap Left Win key with Left Ctrl key
ctrl:swap_lalt_lctl_lwin Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt
其中一些有效 - 如果我运行 setxkbmap -option -option 'ctrl:nocaps'
,我会得到正确的行为。但是,其他一些会被忽略,例如 setxkbmap -option -option 'ctrl:swap_lalt_lctl_lwin'
。
我的一个观察结果是,被忽略的选项是由 setxkbmap -query
显示的,而不是由 setxkbmap -print
显示的。这是此行为的演示。
$ setxkbmap -option -option ctrl:nocaps
$ setxkbmap -query
rules: evdev
model: pc104
layout: us
variant: colemak
options: ctrl:nocaps
$ setxkbmap -print
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us(colemak)+inet(evdev)+ctrl(nocaps)" };
xkb_geometry { include "pc(pc104)" };
};
$ setxkbmap -option -option ctrl:swap_lalt_lctl_lwin
$ setxkbmap -query
rules: evdev
model: pc104
layout: us
variant: colemak
options: ctrl:swap_lalt_lctl_lwin
$ setxkbmap -print
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us(colemak)+inet(evdev)" };
xkb_geometry { include "pc(pc104)" };
};
我不知道如何更深入地研究这个问题。一些进一步的环境信息是
- Linux 发行版是 NixOs
- 窗口管理器是 XMonad,显示管理器是 SLiM,没有桌面管理器
- 键盘布局为 colemak(如果我切换到 qwerty,问题仍然存在)
- 根据手册页,setxkbmap 版本为 1.3.0
最佳答案
这似乎是因为并非文件 evdev.lst 中列出的所有选项也在相邻文件 evdev 中。我在 why does the file evdev in /usr/share/X11/xkb/rules not match with evdev.lst? 上问了一个关于为什么会出现这种情况的问题
关于keyboard - 为什么某些 setxkbmap 选项被忽略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26661743/