Raspberry Pi 4 wird mit Ubuntu Server 19.10, Python 3.7.5 python3-xlib==0.15
usw. ausgeführt pyautogui==0.9.50
. Alles wird als Standardbenutzer ausgeführt ubuntu
.
Ich versuche, Machine A
einen SSH-Befehl zu senden, um Machine B
ein GUI-Programm auszuführen und einige Verarbeitungsvorgänge durchzuführen. Ich erhalte einige XAUTHORITY
Fehlermeldungen.
Hinweis: Ich möchte die GUI nicht auf Machine A
dem Monitor sehen – aber die darauf laufende App Machine B
benötigt eine GUI.
Also Machine A
laufe ich weiter:
subprocess.Popen(['ssh', 'ubuntu@ip_of_machine_B', 'python3', '/path/to/my_script.py'])
Am Machine B
wird my_script.py
ausgeführt
subprocess.call(['python3', '/path/to/gui_script.py'])
Schließlich gui_script.py
werden Versuche unternommen ,
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.
Leider gui_script.py
wirft das folgende
Xlib.error.DisplayConnectionError: Can't connect to display ":0": No protocol specified.
Ich habe auch versucht, die Umgebung im subprocess
Anruf my_script.py
über einzustellen
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)
Aber auch das schlug fehl.
Meine beste Vermutung ist, dass ich vor dem Ausführen des Workflows irgendwo eine Einstellung ändern muss Machine B
(z. B. eine einmalige Bearbeitung von xauth
)? Dies ist ein geschlossenes System, daher stellt Sicherheit kein Problem dar!