首先,我讀了一些線程的人有類似的問題,但所有的答案沒有超出導出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.0
SetEnv XAUTHORITY /home/OpenGL/.Xauthority
所以我的問題似乎是這樣的: 我怎樣才能讓Apache執行PHP腳本與該HTTP用戶擁有所有權限,包括環境?
其他信息: HTTP是在視頻和用戶組,並且具有一個登錄shell(bash)的。 我可以登錄爲http並執行沒有問題的腳本,並且可以運行顯示在顯示器0上的GUI程序。 似乎apache不爲腳本提供適當的環境。 我讀了CLI/CGI之間的一些區別,但是無法使用php-cgi運行xmms ...
有關其他配置的任何想法?
問候
這是真正的答案,實際上我增加了導出DISPLAY =:0到/ etc /環境。 xauth只是安全問題,我打算玩它,但env var是我的問題:) –
到你最後的問題,不是它不是應用程序啓動器,在我從我開發的庫中調用函數的擴展。 –
@NaydenDochev我只是試圖想象你如何設法運行這些,因爲通常任何php(帶有apache)函數都只在請求正在進行時才能生存。當然,有一種方法是啓動後臺並將pid存儲到某處以「殺死」命令。或者擴展是否在Apache運行時存在?無論如何,你找到解決方案的好:) – Manda