Process

如何將按鍵(F5)從終端發送到 GUI 程序?

  • November 18, 2017

我將 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 中,這會重新載入目前選項卡。

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