Python サブプロセス SSH 経由でリモート マシン上で GUI プログラムを実行する

Python サブプロセス SSH 経由でリモート マシン上で GUI プログラムを実行する

Ubuntu Server 19.10、Python 3.7.5、python3-xlib==0.15およびRaspberry Pi 4 を実行していますpyautogui==0.9.50。すべてがデフォルトubuntuユーザーとして実行されます。

Machine AGUI プログラムを実行して何らかの処理を実行するために、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'])

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.

また、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ワークフローを実行する前に、 のどこかで設定を変更する必要があります (つまり、 を 1 回だけ編集するxauth)。これはクローズド システムなので、セキュリティは問題になりません。

関連情報