我正在debugging第三方的Python脚本,用VTK库实现无头image processing。 当运行一个常规的X窗口会话时,它按预期工作,瞬间闪烁一个窗口。 当针对Xvfb(内存中的虚拟帧caching)运行时,它崩溃。 剧本是这样的(绒毛省略):
inname = args[0] outname = args[1] from vtk import * reader = vtkPLYReader() reader.SetFileName(inname) gf = vtkGraphicsFactory gf.SetOffScreenOnlyMode(1) gf.SetUseMesaClasses(1) if_ = vtkImagingFactory if_.SetUseMesaClasses(1) mapper = vtkPolyDataMapper() mapper.SetInputConnection(reader.GetOutputPort()) actor = vtkActor() actor.SetMapper(mapper) renderer = vtkRenderer() renderWindow = vtkRenderWindow() renderWindow.SetSize(xsize, ysize) renderWindow.SetOffScreenRendering(1) renderWindow.AddRenderer(renderer) renderer.AddActor(actor) renderer.SetBackground(1, 1, 1) renderWindow.Render() #<------------ This line crashes wif = vtkWindowToImageFilter() wif.SetInput(renderWindow) wif.Update() writer = vtkPNGWriter() writer.SetFileName(outname) writer.SetInput(wif.GetOutput()) writer.Write()
崩溃的消息是:
ERROR: In /builddir/build/BUILD/VTK/Rendering/vtkXOpenGLRenderWindow.cxx, line 404 vtkXOpenGLRenderWindow (0x26942e0): Could not find a decent visual Segmentation fault (core dumped)
Xvfb作为服务运行; 其命令行是:
/usr/bin/Xvfb :99 -ac -extension GLX
DISPLAY
设置为:99
进行testing。 操作系统是RHEL 6。
任何评论什么是“视觉”,如何在Xvfb中启用一个是值得欢迎的。
编辑:运行glxinfo
给出了类似的消息:
Error: couldn't find RGB GLX visual or fbconfig
但GLX扩展就在命令行中。 Xvfb日志没有任何错误消息。
EDIT2:但是当我做xdpyinfo -queryExtensions
,GLX没有列出。
我使用Xvfb来运行硒测试,但我使用模块xvfbwrapper ,这是一个Xvfb轻量级模块
下面的代码:
from xvfbwrapper import Xvfb display = Xvfb() display.start() [ yourcode ] display.stop()