Eu tenho servidor linux.
Espero que haja uma GUI sem cabeça que possa ser controlada pela CLI para o meu servidor.
Eu sei que é possível exibir GUI com XRDP. Mas espero poder controlá-lo com SSH ou CLI. Funciona bem quando estou usando o XRDP.
Eu tenho o OpenBox (um gerenciador de janelas) instalado. Espero poder interagir GUI com CLI ou talvez haja uma biblioteca Python que possa lidar com isso.
mouseclick(2,3) # mouse click area at coordinate (2,3)
screenshot("./current_screen.png") # saving screenshot of current screen in specified path.
E outro recurso que a biblioteca pode lidar com isso.
Eu encontrei uma biblioteca semelhante, era pyautogui
.
Mas pyautogui
funcione se houver GUI existente. Quero dizer, o erro de script python Display Not Found
se eu executá-lo na CLI.
# t.py
import pyautogui
print(pyautogui.size())
Deu-me erro:
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
Parece que a variável de ambiente DISPLAY não foi definida corretamente aqui.
Deve ser definido para algo assim:
export DISPLAY=:0.0
Ou mais geralmente:
export DISPLAY=$HOSTNAME:$N.$W
Onde $HOSTNAME & $N & $W devem corresponder à Situação Existente.
No caso OP, HOSTNAME está vazio (o que significa localhost) e N é 10 (que pode mudar ao longo do tempo em cada instância de execução do servidor X) e W é 0 (que pode ser quase constante) para obter uma configuração de trabalho.