Xorg

如何強制釋放鍵盤修飾符

  • August 30, 2019

有時,當我在使用全屏 VirtualBox 來賓時在我的機器之間使用協同作用時,我會卡住一些奇怪的鍵修飾符。如果它們存在於我的鍵盤上(如 Shift_L),我只需點擊它,它們的狀態就會重置,我可以繼續輸入小寫字母。但是其中一些根本沒有映射到我的鍵盤(如 ISO_Level3_Shift),所以我根本無法關閉它們!

如何重置它們?現在,我所能做的就是重新啟動電腦,但這是一個相當尷尬的解決方案。

我想要的只是一些可以人為地“點擊”所有可能的鍵盤修飾符的程序,因此它們的狀態將被重置。可以做到嗎?

我使用 Mint 14(Ubuntu 12.10 Quantal 的複製)。

如果你已經xdotool安裝了,你可以簡單地使用

xdotool keyup ISO_Level3_Shift

它將一個鍵釋放(當然是針對 ISO_Level3_Shift)事件發送到 X 伺服器。

但是你想要一個程序來釋放所有的修飾鍵。可以使用 xdotool 輕鬆實現這一目標,如果不是這樣,我不知道定義了什麼修飾符鍵符。找到它們的一種可能方法是解析keysymdef.h

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

它返回一些肯定是修飾符的鍵符。不幸的是,我現在找不到修飾鍵的任何精確定義,所以我不知道這是否是一個完整的列表。

附加| 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

引用自:https://unix.stackexchange.com/questions/60007