如何使用 python/paramiko 通过 SSH 在服务器 (Raspi) 上打开 GUI 应用程序?

问题描述 投票:0回答:1

作为服务器,我有一个 Raspberry Pi,其显示器通过 hdmi 连接。在我的 Windows 10 电脑上,我想通过 ssh 在我的 Pi 上执行一个 gui 应用程序,以便该应用程序显示在 Pi 的显示屏上。执行应该由使用 paramiko 的 Python 程序启动。

如果我在 Windows 控制台中尝试以下操作,它工作得很好:

  • ssh -X 用户@raspberrypi
  • 导出显示=:0
  • python3 my_gui_app.py

但是,如果我在 python 脚本中尝试以下操作,它会正常运行,但 Pi 的屏幕上不会弹出

import paramiko

hostname = "raspberrypi"
username = "user"
password = "1234"
command = "python3 my_gui_app.py"

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

try:
    client.connect(hostname=hostname, username=username, password=password)

    with client.get_transport().open_session() as session:
        session.get_pty()
        session.request_x11(single_connection=True)
        session.set_environment_variable("DISPLAY", ":0")
        session.exec_command(command)

        # Continuously read the stdout and stderr streams
        while True:
            if session.recv_ready():
                stdout = str(session.recv(4096).decode("utf-8"))
                print(stdout, end="")
            if session.recv_stderr_ready():
                stderr = str(session.recv_stderr(4096).decode("utf-8"))
                print(stderr, end="")

            # Check if the command has finished executing
            if session.exit_status_ready():
                break

finally:
    client.close()

我做错了什么?

python x11 paramiko x11-forwarding
1个回答
0
投票

在服务器上,在

/etc/ssh/sshd_config
中,会有一个名为
AcceptEnv
的选项,允许 ssh 客户端发送环境变量。 使用
session.set_environment_variable()
设置环境变量时,环境变量也应该出现在
/etc/ssh/sshd_config

使用以下命令进行验证:

grep AcceptEnv /etc/ssh/sshd_config

如果 DISPLAY 不存在,请添加它并重新启动 SSHD 服务。

如果您无法更新/编辑服务器的 sshd_config,请更新您的命令

命令=“导出DISPLAY =:0; python3 my_gui_app.py”

© www.soinside.com 2019 - 2024. All rights reserved.