通过python子进程ssh在远程机器上运行GUI程序

通过python子进程ssh在远程机器上运行GUI程序

在 Ubuntu Server 19.10、Python 3.7.5python3-xlib==0.15pyautogui==0.9.50.一切都以默认用户身份运行ubuntu

我正在尝试Machine A发送 ssh 命令来Machine B运行 GUI 程序并进行一些处理。我收到一些XAUTHORITY错误。

注意:我不想在Machine A显示器上看到 GUI - 但运行的应用程序Machine B需要 GUI。

所以Machine A我运行:

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

Machine Bmy_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.

我还尝试在viasubprocess中的通话中设置环境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)?这是一个封闭的系统,因此安全性不是问题!

相关内容