nixp.ru v3.0

23 октября 2017,
понедельник,
16:38:09 MSK

DevOps с компанией «Флант»
Аватар пользователя ckjet
ckjet написал 23 сентября 2012 года в 15:27 (1090 просмотров) Ведет себя как мужчина; открыл 44 темы в форуме, оставил 134 комментария на сайте.

На сервере debian под управлением isp-manager.

Если запускаю через консоль php-скрипт, в котором вызов сторонней програмы с помощью exec, то выводит нормально через print_r результат работы это програмы. Если запускаю через апач — пустой массив. Как сделать чтобы через апач я тоже получал нормальный результат? Мне кажется дело в правах под которыми запускается апач, но я незнаю как это проверить.

ckjet

Разобрался по логам. Програма сообщает cannot connect to X server. Дело в том что программа консольная, не понимаю почему возникает такая ошибка, как можно решить эту проблему?

rgo

Очевидно, программа не совсем консольная. Что делать можно лишь гадать, не зная что за программа. Может быть у неё промежь опций есть что-то, говорящее программе не искать X-сервер. Может программу можно пересобрать указав ей в configure --without-X или что-нибудь типа того. В худшем случае можно запустить где-нибудь X-сервер доступный программе, и запускать её, передавая переменную окружения DISPLAY с координатами этого X-сервера.

defender

 

Если таки программу не получится отучить от X-ов, можнол использовать null X server (xvfb). Я запускаю под вайном на headless серверах софтину одну так:

DISPLAY=:99 xvfb-run -s"+extension GLX +extension XVideo  -screen 0 1600×1200x24» wine STserver_L01.exe

Даже если прога требует OpenGL то завести можно… Магическая константа DISPLAY=:99 — по умолчанию, скрипт xvfb-run запускает X-ы на 99-м дисплее.

ТОлько каждый раз запускать софтину с пом xvfb-run не надо, поскольку тогда каждый раз будет стартовать Х-серве заново. Где-нибудь с вкриптах инициализации можно сделать так:

DISPLAY=:99 xvfb-run -s"+extension GLX +extension XVideo  -screen 0 1600×1200x24» xlogo

Отдельно надо разрешить подключаться к X-ам с локальной машины:

DISPLAY=:99 xhost +local

от того-же пользователя, от которого запущен X-сервер.

После этого:

DISPLAY=:99 xcalc  , где xcalc — нужная программа, которая не может жить без иксов (глупая…)

 

ckjet

Спасибо, буду пробовать. А как проверить есть ли уже x при вызове того же калькулятора?

defender

В /tmp/.X11-unix/ должен быть UNIX domain сокет с именем файла X99.

ckjet

вот что получилось:

cannot connect to X server :99

defender

Попробуйте DISPLAY=:99 xhost + (без local)

ckjet

Это перед названием програмы?

defender

Нет. Это после запуска X-сервера. Это отключает контроль на подключение к X-серверу.