我们使用它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
。