xmodmap 清除修饰符不起作用

mxl*_*ian 5 keyboard-shortcuts xkb

尝试了解 XKB 以及如何自定义键盘映射,特别是修饰符。

禁用修饰符的一个小实验会导致意想不到的结果:

(1) 之前的修饰符映射

$ xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  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)
Run Code Online (Sandbox Code Playgroud)

(2) 清除锁定修饰符

$ xmodmap -e 'clear Lock'
Run Code Online (Sandbox Code Playgroud)

(3) 清除完毕

$  xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock      
control     Control_L (0x25),  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)
Run Code Online (Sandbox Code Playgroud)

我原本希望禁用 CapsLock 设置锁定状态,但事实并非如此。它像往常一样工作,并且使用xev查看按键事件,我看到锁定标志仍然发生变化(state 0x0当 CapsLock 关闭时,state 0x2打开时)。

该命令实际上在clear做什么?

如何分离键(键码)以禁用其作为修饰符的功能?

kra*_*mir 4

实际上,CapsLock 功能与按下的按键的键符号值绑定。要查看键码到键符号的映射,请执行xmodmap -pke。(键码 66)的映射CapsLock应为 ( | grep 'keycode 66'):

keycode  66 = Caps_Lock NoSymbol Caps_Lock
Run Code Online (Sandbox Code Playgroud)

你可以玩一下xev。在 ArchWiki 中阅读更多内容:Xmodmap#Introduction

如何分离键(键码)以禁用其作为修饰符的功能?

您需要更改 的映射CapsLock

明确的命令实际上在做什么?

它清除修饰符的映射,而不是键码的映射。更多内容请参见ArchWiki:Xmodmap#Modifier_keys