[R-pkg-devel] Catching console messages from libGL
Duncan Murdoch
murdoch@dunc@n @end|ng |rom gm@||@com
Mon Feb 17 22:01:21 CET 2020
On 17/02/2020 2:56 p.m., Duncan Murdoch wrote:
> I'm working on the initialization code for rgl, especially for the case
> when it is running remotely and the user is connecting using X11.
>
> On some machines, this fails: I now understand that's because the local
> machine needs to enable "indirect GLX" (IGLX) for it to succeed, and by
> default most current machines have IGLX disabled. (It can be a security
> risk to enable it.)
>
> Failure looks like this (with the current CRAN version of rgl 0.100.47,
> and the remote system running Ubuntu, my local system running MacOS):
>
> > library(rgl)
> > open3d()
> libGL error: No matching fbConfigs or visuals found
> libGL error: failed to load driver: swrast
> X Error of failed request: GLXBadContext
> Major opcode of failed request: 149 (GLX)
> Minor opcode of failed request: 6 (X_GLXIsDirect)
> Serial number of failed request: 42
> Current serial number in output stream: 41
>
> I end up booted right out of R. I now know how to fix that, and will
> upload an update to CRAN in due course.
>
> On MacOS I can enable IGLX by running
>
> defaults write org.macosforge.xquartz.X11 enable_iglx -bool true
>
> and restarting XQuartz. When I do that, I see this (same setup as before):
>
> > library(rgl)
> > open3d()
> libGL error: No matching fbConfigs or visuals found
> libGL error: failed to load driver: swrast
> glX
> 1
>
> Now I want to suppress those two libGL messages, and I'm having trouble
> figuring out how to do it. If I redirect stderr when I start R, they
> are redirected: but if I do it after starting R, they aren't:
>
> > library(rgl)
> > capture.output(open3d(), type = "message")
> libGL error: No matching fbConfigs or visuals found
> libGL error: failed to load driver: swrast
> glX
> 1
> character(0)
>
> (capture.output with type = "output" gets c("glX", "1"), but leaves the
> libGL messages printing to the console. sink() behaves similarly.)
>
> So how do I capture stderr (or, off topic here, how do I get libGL to be
> quiet)?
>
A little bit of progress. After reading the Mesa 3d source, I can see
that setting environment variable
LIBGL_DEBUG=quiet
will suppress the first message. Unfortunately, the second message is
seen as "critical", and it can't be suppressed.
Duncan Murdoch
More information about the R-package-devel
mailing list