Apache 用户的 X11

Apache 用户的 X11

我们使用它inkscape来转换通过 Web 表单上传到我们服务器的 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 是否有意义(如果有,该怎么做)?无论如何,这似乎不是正确的解决方案...

答案1

此行为是一个已知的错误,希望它能在下一个版本中修复: https://bugs.launchpad.net/inkscape/+bug/666272

与此同时,我的 google-fu 建议运行 vnc-server 而不是 Xvfb。它可以与您的 X 服务器同时运行。您可以以 apache 用户身份运行它,这样 apache 就可以毫无问题地在该缓冲区上显示 X 应用程序。

此连接仅通过密码验证,因此使用 vncviewer 连接的用户无关紧要。但请注意,VNC 协议不一定安全,因此请确保仅在本地使用它并适当配置防火墙。

以 apache 用户身份启动 vnc 服务器:

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/

答案2

我遇到过类似的问题,修复很简单,只需运行贰伍DISPLAY作为守护进程并使用适当的配置来配置 Apache 用户(在其环境中或启动脚本中)xauth

相关内容