我有linux服务器。
我希望有可以由 CLI 为我的服务器控制的无头 GUI。
我确实知道可以使用 XRDP 显示 GUI。但我希望我可以使用 SSH 或 CLI 来控制它。当我使用 XRDP 时它工作正常。
我安装了 OpenBox(一个 Windows 管理器)。我希望我可以与 CLI 交互 GUI,或者也许有可以处理它的 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 Found
如果我在 CLI 中运行它,我的意思是 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
似乎这里的环境变量DISPLAY设置不正确。
它应该设置为这样的:
export DISPLAY=:0.0
或更一般地: $
export DISPLAY=$HOSTNAME:$N.$W
HOSTNAME & $N & $W应该与现有情况匹配。
在 OP 情况下,HOSTNAME 为空(这意味着 localhost)& N 为 10(可以在 X 服务器的每个执行实例上随时间变化)& W 为 0(可能大部分是恒定的)以获得工作配置。