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 (если так, как)? В любом случае это не похоже на правильное решение...
2 ответа
Такое поведение является признанной ошибкой, будем надеяться, что это будет исправлено в следующем выпуске: https://bugs.launchpad.net/inkscape/+bug/666272
Тем временем мой гугл-фу предлагает запустить vnc-сервер вместо 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
,