`setxkbmap` 不会改变修改器映射

`setxkbmap` 不会改变修改器映射

我可以使用以下命令成功更新我的键盘映射:

/usr/bin/setxkbmap -option "ctrl:swapcaps"

这似乎并没有改变我的修改器地图。

[OP@localhost ~]$ xmodmap
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x25)
control     Control_L (0x42),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

然而,一切似乎都有效。我的问题是:为什么这不会改变修改器映射,如果它有效,修改器映射有什么用?

答案1

修改器贴图不会改变,因为没有什么可以改变的;)

发生的情况是,xkbControl_L键符号归因于该键符号所在的键代码 66 CapsLock

CapsLockkeysym 仍然是大写锁定修饰符,即使它不再受到任何键码的影响。

Control_Lkeysym 已经在 Modmap 中,不需要添加。

事实上,您可能想添加另一个选项:当您同时按下两个 Shift 时,shift:both_capslock该选项将激活/停用。CapsLock由于 CapsLock 并未从 Modmap 中删除,因此它仍然可以工作。

现在,这个 modmap 是做什么用的?还有其他修饰符需要考虑:

ISO_Level5_shift适用于多语言、Unicode 符号,使用“EIGTH_LEVEL”键扩展键盘。

ISO_Prev_Group适用于多个组。

Hyper深受Emacs用户欢迎。

...等等,xkb每个修饰符都有许多变体(shift、latch、lock),但要注意这些功能并不全部与Xmodmap.

不管怎样,使用起来真是太棒了setxkbmap,里面的内容比大多数用户知道的还要多。

man Xkeyboard-config

请注意,您可以使用localectl相同的选项永久应用更改(注意轻微的语义更改)。

相关内容