首先,我阅读了有类似问题的人的一些主题,但所有答案都没有超出导出DISPLAY =:0.0和xauth cookies。所以这是我的问题,并提前感谢您的时间!
我开发了一个小型库,使用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");
?>
它也仅适用于shell。
我已经玩了很多apache配置,因为我真的不知道该尝试什么。
我试过了$xhost + && export DISPLAY=:0.0
在http.conf中我有这些
SetEnv DISPLAY :0.0
SetEnv XAUTHORITY /home/OpenGL/.Xauthority
所以我的问题似乎是这样的: 如何让apache执行具有http用户拥有的所有权限的PHP脚本,包括环境?
其他信息: HTTP 位于视频和用户组中,并具有登录shell(bash)。 我可以作为http登录并执行脚本没有问题,并且可以运行显示在显示0上的GUI程序。 似乎apache没有为脚本提供适当的环境。 我读到了CLI / CGI之间的一些区别,但是不能用php-cgi运行xmms ......
有关其他配置的想法吗?
此致
答案 0 :(得分:2)
听起来有点危险,但基本上你甚至可以添加导出DISPLAY =:0.0到apache启动脚本(比如Linux /etc/init.d/httpd或apache,取决于发行版)。 并且“xhost +”需要在作为用户连接到本地X服务器的帐户上运行,尽管我只是想知道它是如何工作的,因为php脚本应该只在apache http请求正在进行时才能生效。
编辑: 这是一种应用程序启动器吗?你可以用exec生成这个(“nohub / usr / bin / php script.php&amp;”); ..现在应该发布apache,php应该继续在后台工作。
答案 1 :(得分:1)
在您的控制台中,允许每个人使用X服务器:
xhost +
在PHP脚本中,在执行命令时设置DISPLAY变量:
DISPLAY=:0 glxgears 2>&1