Well, with “window-type” set to “none”, nothing is being rendered of course, so there’s nothing to make a screenshot of. Try “offscreen” as “window-type”, this renders stuff into an offscreen buffer.
I’m not sure, but I think base.screenshot() renders the scene too. Try it and see if it works.
If not, just invoke base.graphicsEngine.renderFrame(). You might need to invoke it twice, because a render operation will always only show the last frame’s results - or call base.graphicsEngine.flipFrame() after renderFrame().
You can enable software rendering with “load-display tinydisplay” in your Config.prc file. This will run just fine without access to the X display.
But if you want to use your graphics hardware to render images, you need to have permission to access the X display, because that’s who owns the graphics hardware.