如何启动x并让它通过SSH远程运行脚本?

如何启动x并让它通过SSH远程运行脚本?

我有以下脚本,它启动 X 并启动图形程序:

#!/bin/sh
#startGraphics.sh 
#Starts X and runs the graphics program

xinit /opt/common/graphics/bin/launchGraphics.sh &
sleep 10 ; 
echo "Successfully launched graphics program!"

我添加了 sleep 和 echo,因为如果我只是运行脚本,它会在 SSH 会话关闭时立即终止 X 和图形程序。问题是,虽然 sleep 和 echo 使 X 和图形程序启动,但 SSH 会话并没有结束。

然而,如果我手动通过 SSH 连接到计算机,然后运行 ​​startGraphics.sh 脚本,然后在 X 服务器和程序启动后退出 SSH 会话,它们将继续运行,并且 SSH 会话不会挂起。

我在这里做错了什么?执行我尝试的操作的正确方法是什么,即如何使用图形程序远程启动 X 并完成 SSH 会话而不挂起且不立即终止 X?

虽然我认为它与问题无关,但这里是 launchGraphics.sh 脚本,以防万一:

#!/bin/sh
#launchGraphics.sh
#Starts the graphics program. Requires X to be running
xrandr -s 1920x1050 ;
/opt/common/graphics/bin/graphics --position 0,0 --mode 1 &
/opt/common/graphics/bin/graphics --position 100,0 --mode 2 &
/opt/common/graphics/bin/graphics --position 300,0 --mode 3 

答案1

问题原来是 stdout(大概还有 stderr)的重定向。

通过将 > logfile.log 2>&1 & 添加到 xinit 行的末尾,SSH 会话安全关闭,X 会话和图形程序继续运行。

所以最终的 startGraphics.sh 看起来像:

#!/bin/sh
#startGraphics.sh 
#Starts X and runs the graphics program

xinit /opt/common/graphics/bin/launchGraphics.sh > /dev/null 2>&1 &
sleep 10 ; 
echo "Successfully launched graphics program!"

相关内容