从命令行PHP启动GUI程序,但Apache不

首先,我读了一些有类似问题的人的线索,但所有的答案都没有超出导出DISPLAY =:0.0和xauth cookies。 所以这里是我的问题,并提前感谢您的时间!

我已经开发了一个使用OpenGL和GLSL渲染架子的小型库。 最近几天,我把它包装在一个PHP扩展中,现在很容易。

但问题是,只有当我执行php脚本使用$php r100.php (我成功地从http用户运行这个扩展)的扩展。 该脚本是在apache的webroot,如果我从浏览器请求它,我得到** CRITICAL **: Unable to open displayApache的error_log。

所以,为了使testing更容易,并确保问题不在库/扩展中,目前我只想用下面的php脚本启动xmms。 <?php echo shell_exec("xmms"); ?> <?php echo shell_exec("xmms"); ?>它只能从shell工作。

我已经玩了很多的Apacheconfiguration,我真的不知道该怎么尝试。 我试过$xhost + && export DISPLAY=:0.0

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

所以我的问题似乎是这样的: 我怎样才能让Apache执行php脚本与http用户具有的所有权限,包括环境?

附加信息: HTTP在video和用户组中,并具有loginshell(bash)。 我可以用httplogin并执行没有问题的脚本,并且可以运行在显示器0上显示的GUI程序。似乎apache没有为脚本提供适当的环境。 我读了CLI / CGI之间的一些区别,但是不能用php-cgi运行xmms …

任何想法的额外configuration?

问候

听起来有点危险,但基本上你可以添加甚至导出DISPLAY =:0.0到apache启动脚本(如Linux /etc/init.d/httpd或apache依赖distro)。 和“xhost +”需要运行帐户连接到本地X服务器作为用户,虽然我只是想知道如何工作,因为PHP脚本应该只活在Apache HTTP请求正在进行。

编辑:这是一种应用程序启动器,你可以用exec(“nohub / usr / bin / php script.php&”)产生这个。 ..现在Apache应该被释放,PHP应该继续在后台工作。

在您的控制台中,允许每个人使用X服务器:

 xhost + 

在您的PHP脚本中,在执行命令时设置DISPLAY变量:

 DISPLAY=:0 glxgears 2>&1