我有以下脚本,它启动 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!"