CLI(ヘッドレスGUI)でGUIと対話する

CLI(ヘッドレスGUI)でGUIと対話する

Linuxサーバーがあります。

私のサーバーにCLIを介して制御できるヘッドレスGUIがあることを望みます。

XRDPを使用してGUIを表示することが可能であることを知っています。しかし、SSHやCLIを介して制御できたらと思います。 XRDPではうまくいきます。

OpenBox(ウィンドウマネージャ)をインストールしました。 GUIとCLIをやり取りできることを願っています。あるいは、それを処理できるPythonライブラリがあるかもしれません。

mouseclick(2,3) # mouse click area at coordinate (2,3)

screenshot("./current_screen.png") # saving screenshot of current screen in specified path.

ライブラリが処理できるもう一つの機能です。

同様のライブラリが見つかりましたpyautogui

ただし、pyautogui既存のGUIがある場合は機能します。Display Not FoundCLIでPythonスクリプトを実行するとエラーが発生します。

# t.py
import pyautogui
print(pyautogui.size())

エラーが発生します。

root@server-kentang:~/py# python3 t.py
Traceback (most recent call last):                           File "/usr/local/lib/python3.8/dist-packages/Xlib/support/unix_connect.py", line 76, in get_socket
    s.connect('/tmp/.X11-unix/X%d' % dno)                  FileNotFoundError: [Errno 2] No such file or directory

During handling of the above exception, another exception occurred:

Traceback (most recent call last):                           File "t.py", line 1, in <module>
    import pyautogui
  File "/usr/local/lib/python3.8/dist-packages/pyautogui/__init__.py", line 249, in <module>
    import mouseinfo
  File "/usr/local/lib/python3.8/dist-packages/mouseinfo/__init__.py", line 223, in <module>
    _display = Display(os.environ['DISPLAY'])
  File "/usr/local/lib/python3.8/dist-packages/Xlib/display.py", line 80, in __init__
    self.display = _BaseDisplay(display)
  File "/usr/local/lib/python3.8/dist-packages/Xlib/display.py", line 62, in __init__
    display.Display.__init__(*(self, ) + args, **keys)
  File "/usr/local/lib/python3.8/dist-packages/Xlib/protocol/display.py", line 58, in __init__
    self.socket = connect.get_socket(name, host, displayno)
  File "/usr/local/lib/python3.8/dist-packages/Xlib/support/connect.py", line 76, in get_socket
    return mod.get_socket(dname, host, dno)
  File "/usr/local/lib/python3.8/dist-packages/Xlib/support/unix_connect.py", line 78, in get_socket
    raise error.DisplayConnectionError(dname, str(val))
Xlib.error.DisplayConnectionError: Can't connect to display ":0": [Errno 2] No such file or directory

答え1

環境変数だと思います。展示するここの設定が正しくありません。

次のように設定する必要があります。
export DISPLAY=:0.0
または、より一般的には、
export DISPLAY=$HOSTNAME:$N.$W
次のように設定する必要があります。$ホスト名&$ N&$ W既存の条件と一致する必要があります。

OPの場合、HOSTNAMEは空であり(ローカルホストを意味します)、Nは10(Xサーバーの各実行インスタンスで時間によって異なります)、Wは動作設定を取得するための0(ほとんど一定です)です。

関連情報