作为服务器,我有一个 Raspberry Pi,其显示器通过 hdmi 连接。在我的 Windows 10 电脑上,我想通过 ssh 在我的 Pi 上执行一个 gui 应用程序,以便该应用程序显示在 Pi 的显示屏上。执行应该由使用 paramiko 的 Python 程序启动。
如果我在 Windows 控制台中尝试以下操作,它工作得很好:
但是,如果我在 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()
我做错了什么?
在服务器上,在
/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”