有一個原因,我問你爲什麼試圖做你想做的。我不想在我的評論中看到很多細節。
Unix上的Firefox是一個X-Window進程(大部分Linux/Unix桌面都基於X11協議,這是X-Window的核心)。 X-Window所做的是將程序的顯示與運行程序的進程分開。例如,我現在在工作時正在Linux框中運行Firefox,但Linux框實際上是在我的Mac上在家中顯示Firefox瀏覽器窗口。
爲了做到這一點,我必須:
- 運行X11在我的Mac。 X11程序創建了一個名爲
0.0
的默認X11客戶端顯示屏,它幾乎說明了第一個屏幕和X11運行的第一個實例(計算機愛好者從零開始計數)。該進程在我的Mac上在後臺運行。在某種意義上,它確實是一個服務器進程,而不是客戶端,因爲它正在端口6000上等待客戶端 X11進程(Firefox)告訴它該做什麼。
- 在我運行firefox之前,我必須告訴我的Mac的X11進程,我授予運行Firefox的X11服務器能夠顯示在我的X11客戶端進程上。否則,您可以想象有人通過在顯示屏上不斷彈出Windows來發送垃圾郵件。您可以使用
xhost
程序來執行此操作。
- 爲了在Linux上運行Firefox,我已經告訴Firefox進程我正在運行它的X11客戶端。我可以通過將DISPLAY環境變量設置爲「10.0.1.33:0.0」來實現。這意味着X11客戶端正在運行IP地址爲10.0.1.33的計算機,並且我希望您使用該屏幕上的第一個屏幕以及X11客戶端的第一個實例。
- 現在,我可以在我的Linux機器上運行Firefox,並且顯示器將顯示在我的Mac上。
您遇到的問題是,當您將FireFox作爲守護進程啓動時,根本沒有X11客戶端。 X11客戶端與用戶和某種顯示相關聯。顯示器可以是虛擬顯示器,但必須有一個運行中的X11客戶端,並且可以通過某種方式進行尋址,因此該進程知道在哪裏顯示輸出。
順便說一句,你說守護進程它在Unix/Linux中有非常非常具體的含義。守護進程是一個在後臺運行的進程,通常有一個服務(和一個端口)與之關聯。例如,有一個叫做ftpd
的FTP守護進程,郵件服務器使用sendmail守護進程,ssh有sshd
守護進程。守護進程沒有與它們關聯的顯示。
但是,看起來你可能會用這個詞來表示通過另一個進程啓動Firefox。真的嗎?如果是這樣,你必須確保Firefox知道要使用的X11顯示器(有一個用於指定顯示器的命令行設置),並且X11客戶端(您的登錄會話)已授予其他進程更新的權限您的顯示與程序窗口。
你能解釋一下你想要做的更詳細一點嗎?如果您只是想從遠程http服務器下載文件(當然這正在運行http守護程序進程httpd
),則應使用curl
或wget
,這些程序不需要顯示並且使用起來更簡單。如果您正在嘗試做其他事情,請告訴我們究竟是什麼。
你爲什麼要將FireFox作爲守護進程啓動? Firefox需要一個終端來操作,並且守護進程沒有連接到終端進程。你想在後臺下載網址嗎?你應該看看[Curl](http://curl.haxx.se/docs/manual.html)或[Wget](http://www.gnu.org/software/wget/manual/wget.html)。 –
@David:我不認爲'firefox'需要一個終端。我用'dmenu'啓動我的'firefox','ps ux'輸出顯示'firefox'沒有控制終端。似乎工作正常。 – sarnold