Xbindkeys
在不中斷按鍵事件的情況下在按鍵上執行程序
是否可以將(全域)按鍵綁定到某個命令並且仍然不會中斷按鍵完成?我的意思是,如果我嘗試在此處發布的 bindkey 解決方案:
# In file: ~/.xbindkeysrc # Bind key 'q' to running 'some_command' "some_command" q
然後按鍵’q’永遠不會完成,否則會這樣做:例如,永遠不會在終端上列印字元’q’。
像
xdotool
這樣發送“q”按鍵:# In file: ~/.xbindkeysrc # Bind key 'q' to running 'some_command' "some_command && xdotool key q" q
導致循環,因為執行的“q”鍵
xdotool
將通過綁定執行另一個“some_command”。為了更清楚一點,我希望按鍵“q”像往常一樣執行*,此外還執行一些外部命令。上面的解決方案用執行一些外部命令替換*了 ‘q’ 按鍵事件。問題是,如果該外部命令也模擬“q”按鍵,那麼綁定會重新啟動外部命令,我會陷入無限循環。
好的,所以我將發布一個我找到的解決方案,但也許其他人有更好的解決方案。按照此處提供的答案,我可以看到執行時按下的所有鍵
xinput test <keyboad_id>
在一個終端。這只是一個簡單的例子,將該命令的輸出傳遞到一個程序中,該程序監視諸如“key release 24”之類的字元串(在我的鍵盤上釋放 ‘q’ 時的輸出),然後它會做任何你喜歡的事情匹配這個字元串。
例如,我們可以按下“q”鍵並發出如下聲音:
xinput test <keyboard_id> | while read in ; do [[ $in = "key press 24" ]] && aplay /usr/share/sounds/purple/alert.wav done
然後,顯然,我們也可以觀察其他輸入,並在需要時執行其他東西。