Lubuntu 14.10を実行しているコンピュータがあり、モニタはありません。ユーザーが自動的にログインします。 Sysvinitスクリプトを生成して/etc/init.dにインストールしました。私のスクリプトは、何よりもシリアルポートでリッスンするGUIアプリケーションを開くjarファイルを起動します。
問題は、起動時にjarアプリケーションを自動的に起動させることができないことです。 JavaはX11ディスプレイサーバーに接続できないと文句を言います。ところで、ここで奇妙なことがあります。コンピュータにsshを接続し、sudoサービスを使用して直接スクリプトを実行すると、正常に起動します。また、起動中にモニターを接続すると、それ自体が正しく起動します。
モニタが接続されていない状態でスクリプトを起動するにはどうすればよいですか?モニターが接続されていないと、Xorgサーバーが起動しないようです。
答え1
答え2
数多くのトラブルシューティングと@Anthon Anthonの助けの最後に、ついに欲しいものを達成しました。問題は、Xサーバーをロードするのに十分な時間がないという事実に起因します。 Xserverはupstartサービスlightdmで始まり、私のスクリプトはinit.dで始まります。
モニターが接続されると、Xサーバーがより早く起動し、init.dのスクリプトがクラッシュしないようです。
単純なsleep 10
コマンドは、Xサーバーが起動するまでスクリプトの実行をブロックします。しかし、これはXサーバーがいつ起動するかについての推測です。したがって、よりエレガントな解決策は、デスクトップがいつ起動するのかを確認してから、アプリケーションを起動することです。これを達成するために、スクリプトを開始する前に次の行を挿入しました。
while [ -z $(pidof lxsession) ]; do
echo "LXSession not started yet, waiting for 2 secs"
sleep 2
done
-z $(pidof lxsession)
返されたpidof文字列が空であることを確認してください。 (これでlxsessionプロセスのPIDが見つかりませんでした。) lxsessionが起動するとループがキャンセルされ、スクリプトはXサーバーを探して正常に実行されているJavaアプリケーションを実行し続けます。
みんなの助けに感謝します。他の人もこの投稿を介して助けられ、私のように拷問されないことを願っています!