在Ubuntu Server 19.10,Python 3.7.5,python3-xlib==0.15
和pyautogui==0.9.50
上运行RPi4。一切都以默认的ubuntu
用户身份运行。
我试图让Machine A
向Machine B
发送ssh命令以运行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 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.
我还尝试通过{p>在subprocess
的{{1}}调用中设置环境
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
的一次性编辑)吗?这是一个封闭的系统,因此安全性不是问题!