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

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

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

GUIプログラムを実行し、いくつかの処理を実行するMachine Aためにsshコマンドを送信しようとしています。Machine Bいくつかのエラーが発生します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.

私はまた、次の通話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)。これは閉鎖型システムなので、セキュリティは問題になりません!

関連情報