我已經寫了一個Java服務器,允許連接到它的客戶端控制計算機的鼠標和鍵盤。要做到這一點,它使用java.awt.Robot
類。我可以在守護進程中使用java.awt.Robot嗎?
我需要這臺服務器在後臺運行並自動啓動。我正在解決這個問題的第一個操作系統是基於Debian的(Ubuntu 11.04),而守護進程似乎是一個明顯的選擇。問題是,當啓動期間或安裝我的Debian軟件包(它的postinst腳本開始使用/etc/init.d/pc-remote-server start
它)我得到這個錯誤時啓動守護程序:
java.awt.AWTException: headless environment
at java.awt.Robot.<init>(Robot.java:97)
at com.se.pcremote.server.CommandExecuter.<init>(CommandExecuter.java:72)
at com.se.pcremote.server.PCRemoteServer.<init>(PCRemoteServer.java:215)
at com.se.pcremote.server.PCRemoteServer.main(PCRemoteServer.java:122)
有什麼辦法,我可以使用java.awt.Robot
類從守護進程內?我可以從不是「無頭環境」的守護進程產生一個輔助進程嗎?或者,有沒有更好的方式讓我獲得像這樣沒有這種限制的結果的「服務」?
測試設置/未設置DISPLAY =:0.0和設置java.awt.headless = true或java.awt.headless = false的組合後,我認爲我已經確定:1)當不是'DISPLAY'環境變量,Java進入無頭模式。 2)如果你手動設置一個,它會使Java陷入**而不是**進入無頭模式。 3)您可以設置'java.awt.headless'來覆蓋開始時決定的任何Java。 4)如果你試圖欺騙Java,它只會崩潰而不是優雅地拋出一個異常。 – 2011-05-23 08:16:22
我現在要去查看這個VNC業務。 – 2011-05-23 08:17:44
我已經想出瞭如何使用x11vnc啓動一個VNC服務器,並使用tightvnc啓動一個客戶端,但是打開一個窗口顯示您想要控制的屏幕(如您所期望的那樣)。有沒有辦法打開窗口連接,然後在該環境中運行shell命令? – 2011-05-23 09:48:08