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!"

スクリプトを実行すると、SSHセッションが終了するとすぐにXとグラフィックプログラムが終了するため、スリープモードとエコーが追加されました。問題は、スリープとエコーのためにXとグラフィックプログラムが起動しますが、SSHセッションは終了しないことです。

しかし、マシンに手動でSSHを接続し、startGraphics.shスクリプトを実行し、Xサーバーとプログラムの起動後にSSHセッションを終了しても、継続して実行され、SSHセッションは中断されません。

私がここで何を間違っているのか?私がしたいことをする正しい方法は何ですか?つまり、グラフィカルプログラムを使用してリモートでXを起動し、すぐにXを終了せずに中断することなくSSHセッションを完了するにはどうすればよいですか?

質問とは関係がないと思いますが、もし備えて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)のリダイレクトであることがわかりました。

xinit行の末尾に> logfile.log 2>&1&を追加すると、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!"

おすすめ記事