我有一台装有 shell 脚本的 ubuntu 机器。当我从 Windows 机器通过 SSH 进入这台机器时,我可以运行“导出显示=:0“然后运行脚本”/home/enter.sh“并且图像在 Ubuntu 机器上正确显示。
但是,当我尝试从树莓派运行远程 SSH 命令时,“远程控制[电子邮件保护]/home/enter.sh“,导出显示后,我仍然收到错误”display-im6.q16:无法打开 X 服务器“”@error/display.c/DisplayImageCommand/432“
答案1
当你在 Pi 上运行此程序时:
# shell on Pi
export DISPLAY=:0
ssh [email protected] /home/enter.sh
您正在export …
Pi 上运行。然后ssh
从 shell 继承变量,但它不会将其环境推送到服务器。它可以DISPLAY
在服务器上设置,但变量不会具有您在客户端上设置的值(请参阅man 1 ssh
,环境部分)。
但是当你运行这个:
# connected to the server interactively
# interactive shell on the server
export DISPLAY=:0
/home/enter.sh
export …
你在服务器上运行。然后enter.sh
从交互式 shell 继承导出的变量。
你ssh
可以运行多个命令。像这样:
# shell on Pi
ssh [email protected] 'export DISPLAY=:0; /home/enter.sh; another_command; yet_another'
此方法export …
在服务器上运行。变量将对enter.sh
、another_command
和起作用yet_another
。
或者你可以只设置变量enter.sh
。如果脚本是本地的,它将是这样的:
DISPLAY=:0 /home/enter.sh
(注意没有分号)。ssh
它将是:
ssh [email protected] 'DISPLAY=:0 /home/enter.sh'
在这种情况下,如果您选择添加更多命令,则DISPLAY=:0
不会影响它们。