2011-09-04 37 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

相关问题