Python 하위 프로세스 SSH를 통해 원격 시스템에서 GUI 프로그램 실행

Python 하위 프로세스 SSH를 통해 원격 시스템에서 GUI 프로그램 실행

Ubuntu Server 19.10, Python 3.7.5 python3-xlib==0.15pyautogui==0.9.50. 모든 것이 기본 ubuntu사용자로 실행됩니다.

GUI 프로그램을 실행하고 일부 처리를 수행하기 Machine A위해 ssh 명령을 보내 려고 합니다 . Machine B일부 오류가 발생합니다 XAUTHORITY.

Machine A참고: 모니터 에서 GUI를 보고 싶지 않습니다 . 하지만 실행 중인 앱에는 Machine BGUI가 필요합니다.

그래서 Machine A나는 다음을 실행합니다.

subprocess.Popen(['ssh', 'ubuntu@ip_of_machine_B', 'python3', '/path/to/my_script.py'])

On Machine B, my_script.py실행

subprocess.call(['python3', '/path/to/gui_script.py'])

마지막으로 gui_script.py다음과 같은 시도를 합니다.

import os
os.environ['DISPLAY'] = ':0'
os.environ['XAUTHORITY'] = '/run/user/1000/gdm/Xauthority'
import subprocess
import pyautogui


subprocess.Popen(['the_gui_app'])
# Do stuff with pyautogui and the app.

불행히도 gui_script.py다음을 던지고 있습니다

Xlib.error.DisplayConnectionError: Can't connect to display ":0": No protocol specified.

나는 또한 다음을 통해 subprocess통화 에서 환경 설정을 시도했습니다.my_script.py

my_env = os.environ.copy()
my_env['DISPLAY'] = ':0'
my_env['XAUTHORITY'] = '/run/user/1000/gdm/Xauthority'
subprocess.call(['python3', '/path/to/gui_script.py'], env=my_env)

하지만 그것도 실패했다.

내 추측으로는 Machine B워크플로를 실행하기 전에 어딘가에서 일부 설정을 변경해야 한다는 것입니다(예: 에 대한 일회성 편집 xauth). 이것은 폐쇄형 시스템이므로 보안은 문제가 되지 않습니다!

관련 정보