PHP из командной строки запускает программы gui, но apache не

Во-первых, я прочитал некоторые темы людей с похожими проблемами, но все ответы не выходили за пределы экспорта DISPLAY =: 0.0 и xauth cookie. Так вот моя проблема и спасибо заранее за ваше время!

Я разработал небольшую библиотеку, которая предоставляет полки с использованием OpenGL и GLSL. В последние несколько дней я завернул его в расширение php и удивительно легко теперь работает.

Но проблема в том, что это работает только при выполнении php-скрипта с использованием расширения из командной строки $php r100.php (я успешно запускаю это из http-пользователя). Скрипт находится в webroot apache, и если я его прошу в браузере, я получаю ** CRITICAL **: Unable to open display в apache error_log.

Итак, чтобы все было проще протестировать, и чтобы убедиться, что проблема не в библиотеке / расширении, на данный момент я просто хочу запустить xmms со следующим скриптом php. <?php echo shell_exec("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 находится в видео и группах пользователей и имеет оболочку входа (bash). Я могу войти в качестве http и выполнить скрипты без проблем и запустить программы GUI, которые отображаются на дисплее 0. Кажется, что apache не предоставляет подходящую среду для скрипта. Я прочитал о некоторой разнице между CLI / CGI, но не могу запустить xmms с php-cgi тоже …

Любые идеи для дополнительной настройки?

С уважением

Звучит немного опасно, но в основном вы можете добавить даже экспорт DISPLAY =: 0.0 в сценарий запуска Apache (например, в Linux /etc/init.d/httpd или apache зависимости distro). И «xhost +» нужно запускать в учетной записи, которая подключена к локальному X-серверу как пользователю, хотя мне просто интересно, как она будет работать, поскольку скрипт php должен жить только в то время, когда выполняется HTTP-запрос apache.

Изменить: Это своего рода приложение для запуска приложений ?, вы можете создать это с помощью exec («nohub / usr / bin / php script.php &»); .. теперь apache должен быть выпущен, а php должен продолжать работать в фоновом режиме.

В вашей консоли разрешите всем использовать X-сервер:

 xhost + 

В вашем скрипте PHP установите переменную DISPLAY во время выполнения команд:

 DISPLAY=:0 glxgears 2>&1