我正在调试第三方Python脚本,该脚本使用VTK库实现无头图像处理。当使用常规X窗口会话运行时,它按预期工作,闪烁窗口一瞬间。当针对Xvfb(内存中的虚拟帧缓冲区)运行时,它会崩溃。脚本就像这样(忽略了绒毛):
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
进行测试。操作系统是RHEL 6。
任何评论什么是“视觉”以及如何在Xvfb中启用它都是受欢迎的。
编辑:正在运行glxinfo
会发出类似的消息:
Error: couldn't find RGB GLX visual or fbconfig
但是GLX扩展就在命令行中。 Xvfb日志没有任何错误消息。
EDIT2:但当我xdpyinfo -queryExtensions
时,GLX未列出。
答案 0 :(得分:2)
我使用Xvfb运行selenium测试,但我使用模块xvfbwrapper,它是Xvfb的轻量级模块
代码下方:
from xvfbwrapper import Xvfb
display = Xvfb()
display.start()
[ yourcode ]
display.stop()