[R] rgl snapshot on headless server

Duncan Murdoch murdoch.duncan at gmail.com
Sun Sep 15 13:18:52 CEST 2013


On 13-09-15 6:02 AM, Andreas Maunz wrote:
> The other write* options seem to limited to me. I am looking for a way
> to obtain a PS, or at least a PNG, since I develop a web application on
> a server that needs to grab the screenshot and create a written report
> with it. Starting my Xvfb like this:
>
> Xvfb :5 -screen 0 640x480x24 -ac +extension GLX +render -noreset -fbdir
> /tmp/foobar
>
> I can easily run glxgears and obtain nice snapshots of the gears via
> 'xwud -in /tmp/foobar/Xvfb_screen0'. However, it just won't work for
> rgl! Given my test.R script with (taken from the doc of bg()):

That does make it sound like an rgl problem.

>
> library('rgl')
> rgl.open()
> foo<-readline('Enter to cont')
> bg3d("white")
> foo<-readline('Enter to cont')
> rgl.bg <http://rgl.bg>(sphere=TRUE, color=c("black","green"), lit=FALSE,
> back="lines" )
> foo<-readline('Enter to cont')
> rgl.bg <http://rgl.bg>(sphere=TRUE,
> texture=system.file("textures/sunsleep.png", package="rgl"), back="filled" )
> foo<-readline('Enter to cont')
>
> I can skip through the steps and check at each with xwud, but it just
> manages to draw the white background. The two last steps fail
> completely, I only receive a black screen. Sane for plot3d(), for example.
>
> Please help, if you can, it would be quite important to have this
> functionality

I can't reproduce any of this, since I'm working on Windows, a system 
without Xvfb, and Mac OSX, where your Xvfb command fails with this error

_XSERVTransmkdir: ERROR: euid != 0,directory /tmp/.X11-unix will not be 
created.

(followed by a sequence of other errors).  So I'd like to fix this, but 
it just doesn't look feasible.  Perhaps you know some X11 expert who can 
tell you what rgl is doing wrong?

Duncan Murdoch

>
> Thanks
> Andreas
>
>
>
> On Wed, Sep 11, 2013 at 6:19 PM, Duncan Murdoch
> <murdoch.duncan at gmail.com <mailto:murdoch.duncan at gmail.com>> wrote:
>
>     On 11/09/2013 11:44 AM, Andreas Maunz wrote:
>
>         I am running Xvfb now with
>
>         -fbdir /some/path and
>         -extension RANDR
>
>         but rgl.snapshot is still not working.
>
>         Any other idea? Since I can display the webGL successfully in
>         firefox (so comes out correct), I assume there should be some
>         way of converting it on the server side to some (vector) graphic
>         file format?
>
>
>     The .html file that writeWebGL produces could be considered to be
>     that, but it's really mostly Javascript code, and I don't know
>     anything other than a browser that can display it.  If you look at
>     ?writeWebGL, you'll see links to various other ?write* files; they
>     are all vector formats, but are all more limited than writeWebGL in
>     what they can record.
>
>     Duncan Murdoch
>
>
>         Thanks
>         Andreas
>
>
>
>
>         On Tue, Sep 10, 2013 at 6:38 PM, Duncan Murdoch
>         <murdoch.duncan at gmail.com <mailto:murdoch.duncan at gmail.com>
>         <mailto:murdoch.duncan at gmail.__com
>         <mailto:murdoch.duncan at gmail.com>>> wrote:
>
>              On 10/09/2013 10:58 AM, Andreas Maunz wrote:
>
>                  Hi all,
>
>                  I have a shiny app, in which I want to use rgl's snapshot
>                  function. I am
>                  running Xvfb on my server so that rgl works. I start my
>         shiny
>                  app as
>                  follows:
>
>                  echo "Checking for Xvfb..."
>                  pgrep -U username Xvfb > /dev/null 2>&1
>
>                  if [ "$?" -gt 0 ]; then
>                     echo "Starting Xvfb..."
>                     Xvfb :7 -screen 0 1280x1024x24 &
>                     sleep 2
>                  fi
>
>                  echo "...starting shiny"
>                  export DISPLAY=":7"; R --no-save --no-restore -e
>                  "library('shiny');
>                  runApp('/path/to/app', port=8101)"
>
>                  In the app, I do plot3d(), generate webGL and send the
>         results
>                  to the
>                  browser. But the rgl.snapshot or rgl.postscript
>         functionality
>                  do not work,
>                  i.e. they produce black or empty images. I assume this
>         is due
>                  to Xvfb. Any
>                  chance I can create snapshots?
>
>
>              rgl.snapshot requires the X server to maintain a frame
>         buffer that
>              it can read.   It looks as though something is going wrong with
>              yours.  I don't use a system with Xvfb, so I can't really help,
>              but you could try Googling to see if that turns anything up.
>
>              rgl.postscript shouldn't need the X server, but it is
>         limited in
>              what it can display.
>
>              Duncan Murdoch
>
>
>
>



More information about the R-help mailing list