如何在啟動時訪問 X 伺服器?
我在 Linux 上執行 Java Swing 應用程序。我用服務包裝了 Java 程式碼。
我可以從命令提示符啟動 my_java_service 沒有任何問題。
我希望我的應用程序在啟動時啟動。
update-rc.d
所以我使用命令將 my_java_service 複製到 /etc/rc5.d 文件夾。X伺服器的啟動順序是START20 (S20)。
於是我把START55(S55)的啟動命令給了my_java_service。
我得到的錯誤是這樣的:
Exception in thread "main" java.awt.AWTError: Can't connect to X11 window server using '0.0' as the value of the DISPLAY variable.
我相信 my_java_service 在啟動時無法訪問 X 伺服器。
我
xhost +local:all
在 my_java_service 中使用過,但它什麼也沒做。如何在啟動時訪問 X 伺服器並啟動我的應用程序?
如果你能做到這一點,你的應用程序的視窗會在登錄螢幕上彈出,任何經過的人都可以訪問——你真的想要這個嗎?
當有人登錄時,我認為登錄螢幕上啟動的任何視窗都將被迫終止,因此您的應用程序必須檢測使用者登錄並以某種方式重新建立與該使用者會話的連接。當有人使用 GUI 註銷時,將觸發 X 伺服器重置,這肯定會強制所有 X 應用程序與伺服器斷開連接。這將需要復雜的重新連接邏輯,或者接受在您的服務執行時不得使用本地 GUI。
如果您的實際需求只是在 GUI 控制台上執行獨立於使用者登錄/註銷的 java 服務,更好的解決方案是為您的應用程序設置一個單獨的 X 伺服器。
如果您有時需要與應用程序互動,那麼獨立的 VNC X 伺服器可能是合適的。它有自己的虛擬顯示器,如有必要,您可以使用 VNC 客戶端連接到該顯示器。
如果根本不需要使用本地 GUI 與應用程序互動,那麼您可以使用虛擬幀緩衝區 X 伺服器執行應用程序,它根本沒有真正的顯示,但在其他方面表現得就像一個真正的 X 伺服器。你可能會發現它被你的 Linux 發行版打包為
xvfb
或類似。