Назад | Перейти на главную страницу

X11 для пользователя apache

Мы используем inkscape для преобразования изображений SVG, загруженных на наш сервер через веб-форму. Для этого inkscape предлагает пакетный режим через -z вариант, но у этого пакетного режима есть недостаток: когда inkscape запускается пользователем apache, он не говорит

$ inkscape -z -W drawing.svg
X11 connection rejected because of wrong authentication.
The application 'inkscape' lost its connection to the display localhost:11.0;
most likely the X server was shut down or you killed/destroyed
the application.

Если вы сделаете то же самое, что и обычный пользователь, вы также получите ошибки:

Xlib: connection to "localhost:11.0" refused by server
Xlib: PuTTY X11 proxy: MIT-MAGIC-COOKIE-1 data did not match
(inkscape:24050): Gdk-CRITICAL **: gdk_display_list_devices: assertion `GDK_IS_DISPLAY (display)' failed
301.27942

Но хотя бы inkscape дает правильный ответ (здесь число, указывающее ширину изображения).

Кто-нибудь знает, как заставить это работать и для пользователя apache? Есть ли смысл авторизовать apache использовать X (если да, то как)? В любом случае это не кажется правильным решением ...

Такое поведение является признанной ошибкой, будем надеяться, что она будет исправлена ​​в следующем выпуске: https://bugs.launchpad.net/inkscape/+bug/666272

А пока мой google-fu предлагает запустить vnc-server вместо Xvfb. Он может работать одновременно с вашим X-сервером. Вы можете запустить его как пользователь apache, поэтому у apache не будет проблем с отображением X-приложений в этом буфере.

Это соединение проверяется только паролем, поэтому не имеет значения, какой пользователь подключается к vncviewer. Однако обратите внимание, что протокол VNC не обязательно безопасен, поэтому обязательно используйте его только локально и настройте брандмауэр соответствующим образом.

Запустите сервер vnc от имени пользователя apache:

vncserver :2 -geometry 1024x768 - Это нужно сделать только один раз

В сценарии, запущенном apache, запустите только приложение; не запускайте vncserver или vncviewer: DISPLAY=:2.0 inkscape -z -W drawing.svg

Google нашел здесь ответ: http://www.linuxquestions.org/questions/programming-9/can-php-script-execute-x11-applications-811779/

Я столкнулся с подобной проблемой, исправить легко, просто запустите Xvfb в качестве демона и настройте пользователя Apache (в его среде или в сценарии запуска) с DISPLAY и соответствующий xauth.