xmodmap 清除修饰符不起作用

xmodmap 清除修饰符不起作用

尝试了解 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)

(2) 清除锁定修饰符

$ xmodmap -e 'clear Lock'

(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)

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

该命令实际上在做什么clear

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

答案1

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

keycode  66 = Caps_Lock NoSymbol Caps_Lock

你可以玩一下xev。阅读更多内容ArchWiki:Xmodmap#简介

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

您需要更改 的映射CapsLock

  • 要禁用CapsLock,您需要取消映射它:

    xmodmap -e 'keycode  66 = NoSymbol NoSymbol NoSymbol'
    
  • 要启用CapsLock,您需要将其再次映射为默认值:

    xmodmap -e 'keycode  66 = Caps_Lock NoSymbol Caps_Lock'
    

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

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

相关内容