如何强制释放键盘修饰符

Ada*_*ski 23 xorg keyboard synergy virtualbox linux-mint

有时,当我在使用全屏 VirtualBox 来宾时使用我的机器之间的协同作用时,我会遇到一些奇怪的键修饰符打开的情况。如果它们存在于我的键盘上(如 Shift_L),我只需点击它,它们的状态就会重置,我可以继续输入小写字母。但是其中一些根本没有映射到我的键盘(例如 ISO_Level3_Shift),所以我根本没有办法关闭它们!

如何重置它们?现在,我所能做的就是重新启动计算机,但这是一个相当尴尬的解决方案。

我想要的只是一些可以人为“点击”所有可能的键盘修饰符的程序,因此它们的状态将被重置。可以做到吗?

我使用 Mint 14(Ubuntu 12.10 Quantal 的克隆)。

小智 27

如果你已经xdotool安装,你可以简单地使用

xdotool keyup ISO_Level3_Shift
Run Code Online (Sandbox Code Playgroud)

它向 X 服务器发送一个密钥释放(当然是 ISO_Level3_Shift)事件。

但是你想要一个程序来释放所有的修饰键。可以使用 xdotool 轻松实现这一目标,否则我不知道定义了哪些修饰键符号。找到它们的一种可能方法是解析keysymdef.h

grep '^#define' /usr/include/X11/keysymdef.h | sed -r 's/^#define XK_(\S*?).*$/\1/;' | grep -E '_(L|R|Level.*)$'
Run Code Online (Sandbox Code Playgroud)

它返回一些肯定是修饰符的键符。不幸的是,我现在找不到修饰键的任何精确定义,所以我不知道这是否是一个完整的列表。

附加| xargs xdotool keyup到上述管道将释放所有这些密钥。在我的系统上,它执行以下命令:

xdotool keyup Shift_L Shift_R Control_L Control_R Meta_L Meta_R Alt_L Alt_R Super_L Super_R Hyper_L Hyper_R ISO_Level2_Latch ISO_Level3_Shift ISO_Level3_Latch ISO_Level3_Lock ISO_Level5_Shift ISO_Level5_Latch ISO_Level5_Lock
Run Code Online (Sandbox Code Playgroud)


rkj*_*nsn 11

我发现对于我的系统,发布的解决方案xdotool通常没有涵盖卡住的密钥,并且setxkbmap在我的系统上运行似乎没有完成任何事情。

我发现的解决方案是使用x11vnc. 具体来说,我使用以下命令:

x11vnc -deny_all -clear_keys -timeout 1
Run Code Online (Sandbox Code Playgroud)

-clear_keys是关键部分,在这里。它指示x11vnc在退出时清除所有按下的键。-timeout 1告诉x11vnc在没有连接的情况下 1 秒后退出,并-deny_all确保在该窗口期间没有人可以连接。

有时卡住的键会阻止与桌面进行任何有意义的交互,在这种情况下,我将通过 ssh 执行以下操作:

env DISPLAY=:0 XAUTHORITY=/home/[username]/.Xauthority x11vnc -deny_all -clear_keys -timeout 1
Run Code Online (Sandbox Code Playgroud)


小智 5

我使用没有参数的“setxkbmap”。它似乎重置了键盘。我的面板中有一个“快捷方式”,当键盘完全无法操作时,我可以将其与鼠标一起使用。