首先,我读了一些线程的人有类似的问题,但所有的答案没有超出导出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