2011-09-04 71 views
1

首先,我讀了一些線程的人有類似的問題,但所有的答案沒有超出導出DISPLAY =:0.0和xauth cookie。所以這是我的問題,並提前感謝您的時間!從命令行PHP啓動gui程序,但Apache不

我開發了一個使用OpenGL和GLSL渲染書架的小型庫。 最近幾天我將它封裝在一個php擴展中,現在它非常簡單。

但問題是它只在我使用命令行的擴展名執行php腳本時才起作用 $php r100.php(我成功地從http用戶運行這個腳本)。該腳本位於apache的webroot中,如果我從瀏覽器請求它,我會在Apache的error_log中獲得** CRITICAL **: Unable to open display

因此,爲了使測試更容易,並確保問題不在庫/擴展中,目前我只想使用以下php腳本啓動xmms。 <?php echo shell_exec("xmms"); ?> 它只能從外殼工作。

我已經玩過apache的配置,所以現在我真的不知道該怎麼嘗試。 我試圖$xhost + && export DISPLAY=:0.0

在http.conf中我有這些 SetEnv DISPLAY :0.0SetEnv XAUTHORITY /home/OpenGL/.Xauthority

所以我的問題似乎是這樣的: 我怎樣才能讓Apache執行PHP腳本與該HTTP用戶擁有所有權限,包括環境?

其他信息: HTTP是在視頻和用戶組,並且具有一個登錄shell(bash)的。 我可以登錄爲http並執行沒有問題的腳本,並且可以運行顯示在顯示器0上的GUI程序。 似乎apache不爲腳本提供適當的環境。 我讀了CLI/CGI之間的一些區別,但是無法使用php-cgi運行xmms ...

有關其他配置的任何想法?

問候

回答

2

xhost + 

在你的PHP腳本中,在執行命令設置DISPLAY變量

聽起來有點危險,但基本上你可以添加甚至導出DISPLAY =:0.0到apache啓動腳本(如Linux /etc/init.d/httpd或Apache依賴發行版)。 並且「xhost +」需要在帳戶上運行,該帳戶作爲用戶連接到本地X服務器,但我只是想知道它如何工作,因爲php腳本應該只在Apache HTTP請求正在進行時才能存活。你可以使用exec(「nohub/usr/bin/php script.php &」)產生這個應用程序啓動器嗎?你可以使用exec(「nohub/usr/bin/php script.php &」)產生這個應用程序啓動器。 ..現在apache應該被釋放,php應該繼續在後臺工作。

+0

這是真正的答案,實際上我增加了導出DISPLAY =:0到/ etc /環境。 xauth只是安全問題,我打算玩它,但env var是我的問題:) –

+0

到你最後的問題,不是它不是應用程序啓動器,在我從我開發的庫中調用函數的擴展。 –

+0

@NaydenDochev我只是試圖想象你如何設法運行這些,因爲通常任何php(帶有apache)函數都只在請求正在進行時才能生存。當然,有一種方法是啓動後臺並將pid存儲到某處以「殺死」命令。或者擴展是否在Apache運行時存在?無論如何,你找到解決方案的好:) – Manda

1

在您的控制檯,讓每個人都使用X服務器:

DISPLAY=:0 glxgears 2>&1 
+0

不要做'xhost +'。這是完全不安全的。看看這裏:http://www.lugod.org/pipermail/vox-tech/2005-March/010864.html – ceving

+0

好吧,這工作,現在我需要考慮如何使這個工作也使用功能從延期。謝謝! –

+0

@ceving,我的X11似乎沒有聽任何接口,即使在'xhost +'之後。你會用什麼來代替'xhost +'? – arnaud576875

相關問題