我在 VMware 中运行 Ubuntu 21.10 客户机,主机是 Windows 11。
我想禁用所有 Caps Lock 功能,并将键用作 Meta_R。我尝试使用xmodmap -e "clear Lock"
、 和禁用它setxkbmap -option caps:none
。
但是,当我按下 Caps Lock 时,键盘上的灯会亮起,并且当我打字时,按键会导致打印大写字符。
这可能是由 VMware 引起的?VMware 根据主机上处于活动状态的窗口更改键盘状态,并可能通过内核或类似方式设置 Caps Lock 状态。
我在想,解决方案可能是禁用 0x2 状态对键盘符号映射的影响?
结果:xmodmap 正确显示 Caps Lock 为已禁用...
$ xmodmap
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)
结果:xev 显示状态为 0x2
按‘a’键结果为‘a’。
KeyPress event, serial 34, synthetic NO, window 0x1400001,
root 0x1b8, subw 0x0, time 678615, (118,123), root:(368,501),
state 0x0, keycode 38 (keysym 0x61, a), same_screen YES,
XLookupString gives 1 bytes: (61) "a"
XmbLookupString gives 1 bytes: (61) "a"
XFilterEvent returns: False
正确按下 Caps Lock 键会导致“VoidSymbol”
KeyPress event, serial 37, synthetic NO, window 0x1400001,
root 0x1b8, subw 0x0, time 680515, (118,123), root:(368,501),
state 0x0, keycode 66 (keysym 0xffffff, VoidSymbol), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
释放 Caps Lock 会错误地将状态更改为 0x2。
KeyRelease event, serial 37, synthetic NO, window 0x1400001,
root 0x1b8, subw 0x0, time 680655, (118,123), root:(368,501),
state 0x2, keycode 66 (keysym 0xffffff, VoidSymbol), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
在状态 0x2 下按下‘a’将得到符号‘A’。
KeyPress event, serial 37, synthetic NO, window 0x1400001,
root 0x1b8, subw 0x0, time 682240, (118,123), root:(368,501),
state 0x2, keycode 38 (keysym 0x41, A), same_screen YES,
XLookupString gives 1 bytes: (41) "A"
XmbLookupString gives 1 bytes: (41) "A"
XFilterEvent returns: False