PHP从命令行启动gui程序,但apache没有'


PHP from commandline starts gui programs but apache doesn't

首先,我阅读了一些有类似问题的人的帖子,但所有的答案都没有超出export DISPLAY=:0.0和xauth cookie。所以这是我的问题,提前感谢您的时间!

我开发了一个使用OpenGL和GLSL渲染货架的小库。最近几天,我把它包装在一个php扩展中,现在它工作起来非常容易。

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

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

我已经玩了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…

有什么额外的配置吗?

听起来有点危险,但基本上您甚至可以添加export DISPLAY=:0.0到apache启动脚本(如Linux/etc/init.)D/httpd或apache(取决于发行版)。和"xhost +"需要运行的帐户是连接到本地X服务器作为用户,虽然我只是想知道它将如何工作的php脚本应该只活,而apache http请求正在进行中。

编辑:这是一种应用启动器吗?,你可以使用exec("nohub/usr/bin/php script.php &");. .现在apache应该发布了,PHP应该继续在后台工作。

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

xhost +

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

DISPLAY=:0 glxgears 2>&1