Headless

在無頭環境中模擬擊鍵

  • August 31, 2014

我需要在無頭環境中模擬擊鍵。

全部xtexdotool許多C++設計用於 X11 視窗

我試過 xdotool,它會拋出一些錯誤:

xdotool type "aaaaa"
Error: Can't open display: (null)
Failed creating new xdo instance

我知道Xvfb但正在尋找其他可能的解決方法

為了讓應用程序接收任何擊鍵,它必須從某個地方接收它們。通常只有兩個選項是通過視窗或通過 TTY。如何模擬擊鍵取決於兩者中的哪一個。

透過一扇窗戶

如果應用程序通過視窗接收擊鍵,那麼模擬它們xdotool是完成這項工作的正確工具。您只需要設置適當的DISPLAY變數,以便xdotool連接到與應用程序相同的 X 伺服器。

通過虛擬 TTY

許多程序會在虛擬 TTY 中呼叫 shell。xterm, sshd, script,screen是一些典型的例子。創建虛擬 TTY 的程序可以通過在虛擬 TTY 的控制端上寫來向 TTY 發送任何擊鍵。

如果它是xterm或任何類似的終端仿真器,模擬擊鍵的方法將是通過如上所述的視窗來完成。

在列表的其餘部分中,我所知道的唯一具有模擬擊鍵功能的程序是screen. 您可以在這樣的會話中將擊鍵發送到任何命名視窗screen(實際範例,我經常使用):

screen -X at alsamixer stuff 2

這裡screen -X將連接到正在執行的螢幕並呼叫命令。at alsamixer將導致在名為 的視窗中呼叫命令的其餘部分alsamixerstuff 2將模擬按2

需要注意的一個警告是,僅當screen會話目前從某個地方附加時,上述內容才有效。我不知道如何使它在分離的screen.

通過硬體 TTY

您可以讓硬體發送實際的擊鍵。如果是串列線路,您可以通過將按鍵寫入線路另一端電腦上的串列埠來發送按鍵。如果它是本地控制台,您可以將一塊硬體連接為真正的鍵盤(我相信可以找到可以做到這一點的 USB 設備。)

對於 Linux,存在驅動程序,可以在本地控制台上模擬擊鍵,就好像它們來自實際硬體一樣。

引用自:https://serverfault.com/questions/625286