Во-первых, я прочитал некоторые темы людей с похожими проблемами, но все ответы не выходили за пределы экспорта 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