在系統啟動 Lubuntu 時執行 GUI Java jar
我有一台在沒有顯示器的情況下執行 Lubuntu 14.10 的 PC。使用者自動登錄。我創建了一個 Sysvinit 腳本並將其安裝在 /etc/init.d 上。除其他外,我的腳本啟動了一個 jar 文件,該文件打開了一個在串列埠上偵聽的 GUI 應用程序。
問題是我無法讓 jar 應用程序在啟動時自動啟動。Java 抱怨它無法連接到 X11 顯示伺服器。然而,這很奇怪。如果我 ssh 進入機器並使用 sudo service 自己執行腳本,它會正常啟動。此外,如果我在啟動過程中連接了顯示器,它也會自行正確啟動。
如何在沒有連接顯示器的情況下啟動腳本?好像沒有連接監視器時,Xorg 伺服器沒有啟動。
經過@Anthon Anthon 的大量故障排除和幫助後,我終於設法實現了我想要的。畢竟問題是 X 伺服器沒有足夠的時間來載入。Xserver 是從作為新貴服務的 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 啟動後,循環被取消,腳本繼續執行我的 java 應用程序,該應用程序現在找到 X 伺服器並正常執行。感謝大家的幫助。我希望其他人得到這個文章的幫助,而不是像我一樣受到折磨!
您可以使用Xvfb或Xvnc等工具讓任何應用程序在虛擬 X 幀緩衝區中執行。您還應該考慮改用一種不會強制您使用正在執行的 X 進行連接的語言。
如果您使用連接到機器,事情就可以正常工作
ssh
也就不足為奇了。在第一次進入後嘗試建立連接unset DISPLAY
,或者通過做ssh -o "ForwardX11 no" owl