[Rd] capabilities("X11"): Force refresh from within R? (... and minor documentation issue)

Henrik Bengtsson henrik.bengtsson at ucsf.edu
Wed May 6 22:37:26 CEST 2015


Is there a way to refresh capabilities("X11") without restarting R
such that it reflects the enabling/disabling of X11?


BACKGROUND:

If I launch R with X11 server disabled (e.g. ssh -X / ssh -Y to remote
Linux but forgot to enable Xming on local Windows), then I get:

> capabilities("X11")
  X11
FALSE

> x11()
Error in .External2(C_X11, d$display, d$width, d$height, d$pointsize,  :
  unable to start device X11cairo
In addition: Warning message:
In x11() : unable to open connection to X11 display ''

So far so good.  However, if I then enable the X11 server (e.g. start
Xming on Windows), I still get:

> capabilities("X11")
  X11
FALSE

but

> x11()

successfully opens an X11 plot window.  In other words, the value of
capabilities("X11") is not reflecting the availability of X11; from
?capabilities:

     X11: Are the 'X11' graphics device and the X11-based data editor
          available?  This loads the X11 module if not already loaded,
          and checks that the default display can be contacted unless a
          'X11' device has already been used.

Not sure what that last "...unless a 'X11' device has already been
used" actually means here; is it a disclaimer for the above behavior?

If I restart R, the I get:

> capabilities("X11")
  X11
TRUE

I came up with the following approach that launches another R session
querying the availability of X11:

capabilitiesX11 <- function() {
  bin <- file.path(R.home("bin"), "Rscript")
  cmd <- "cat(capabilities('X11'))"
  value <- system2(bin, args=c("-e", dQuote(cmd)), stdout=TRUE)
  as.logical(value)
}

> capabilitiesX11()
[1] TRUE

but it's certainly feels like a hack.

Is there a way to force a refresh of capabilities("X11") without restarting R?

BTW, the description of ?capabilities says: "Report on the optional
features which have been compiled into this build of R."  The
"compiled into this build" part seems too specific; the above shows
that capabilities() also reflects run-time availabilities.  Other
"properties" does this as well.


Thanks,

Henrik



More information about the R-devel mailing list