Мы используем 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
.