Process
如何將按鍵(F5)從終端發送到 GUI 程序?
我將 Raspberry Pi 與 Chromium(資訊亭模式)結合使用來顯示一些統計資訊。Pi 沒有連接的鍵盤,因此我搜尋了一種將擊鍵從終端發送到 Chromium (tab) 程序的解決方案。正常輸入確實有效,但我如何
F5
通過此解決方案發送類似(特殊鍵:瀏覽器刷新)的內容?# pidof chromium 20809 20790 20788 20786 20783 # echo 'some text' > /proc/20809/fd/0
GUI 程序不從它們的標準輸入中讀取,它們從X 伺服器獲取它們的輸入。有一些工具可以將擊鍵注入視窗。xdotool相當常見且方便。
您需要找到要將擊鍵發送到的視窗 ID。你可以用 xdotool 做到這一點。
xdotool search --class Chrome
返回所有 Chrome 視窗的視窗 ID 列表。如果返回多個,則需要選擇所需的一個。您可以使用xdotool search --name
匹配標題而不是類。您還可以解析wmctrl的輸出並提取所需的視窗 ID。找到正確的視窗 ID 後,您可以呼叫
xdotool
以注入擊鍵。不幸的是,許多應用程序拒絕合成事件,即另一個應用程序發送的擊鍵和滑鼠事件。目前版本的 Chrome 就是這種情況。可以通過不同的機制從另一個應用程序注入擊鍵,但這需要聚焦視窗。您可以使用 xdotool 完成所有這些操作,但它會導致焦點快速閃爍到 Chrome 視窗並返回。以下程式碼段發送F5
到第一個 Chrome 視窗(以某種隨意的順序)。xdotool search --class Chrome windowactivate --sync %1 key F5 windowactivate $(xdotool getactivewindow)
或者使用舊版本的 xdotool:
xdotool windowactivate $(xdotool search --class Chrome) && xdotool key F5 && xdotool windowactivate $(xdotool getactivewindow)
請記住,這將發送
F5
到該視窗,由程序決定如何處理它。在 Chrome 中,這會重新載入目前選項卡。