我有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 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
答案1
好像是环境变量展示此处设置不正确。
它应该设置为这样的:
export DISPLAY=:0.0
或者更一般地说:
export DISPLAY=$HOSTNAME:$N.$W
哪里$主机名 & $N & $W应符合现有情况。
在 OP 情况下,HOSTNAME 为空(这意味着 localhost),N 为 10(可以在 X 服务器的每个执行实例上随时间变化),W 为 0(可能大部分是恒定的)以获得工作配置。