[R-SIG-Mac] Mac OS X tcltk/X11 issues

Marc Schwartz marc_schwartz at me.com
Mon Jul 14 23:53:14 CEST 2014


On Jul 14, 2014, at 4:13 PM, John Fox <jfox at mcmaster.ca> wrote:

> Dear Simon and list members,
> 
> As many of you are aware, when X11 isn't installed on Mac OS X, loading the
> tcltk package produces an error, with a message that many users find
> cryptic. There was yet another instance of this problem reported to the list
> today.
> 
> I'm interested in the issue because the Rcmdr package uses tcltk and thus
> fails to load when X11 is absent. Rcmdr users tend to be inexperienced and
> so, unless they find their way to the Rcmdr installation webpage, where
> detailed installation instructions are provided, they tend to be stymied by
> the problem.
> 
> If I could, I'd intercept the problem by checking capabilities()["X11"] in
> the Rcmdr .onLoad() or .onAttach() function, but because the Rcmdr package
> imports the tcltk namespace, the error occurs before these startup functions
> are executed -- a chicken-and-egg problem.
> 
> It occurs to me that tcltk could fail more gracefully on Mac OS X when X11
> is absent, perhaps popping up a webpage in a browser with instructions and a
> link for installing XQuartz. I'd do this myself in the Rcmdr package if I
> could. Or tcltk could check for the presence of X11 and not try to start it
> if it's absent, reporting a warning rather than throwing an error.
> 
> Alternatively, I'd be grateful if someone could suggest how I might detect
> the problem in the Rcmdr package before loading fails. The only thing that I
> could think of was writing a separate RcmdrInstall package that bypasses
> tcltk, but that would be awkward and would only help users who discovered
> that RcmdrInstall exists.
> 
> Thanks,
> John


John,

Is there someplace in your startup process where you could run code along the lines of:

if (grepl("apple", R.version$platform) & length(list.files("/opt/X11/bin", pattern = "Xquartz")) == 0) {
     cat("X11 is required. Please visit http://xquartz.macosforge.org to download and install Xquartz.")
     stop()
}


The above code will check to see if the user is running R on OS X and also if the Xquartz binary is present in the default location.

Not sure if this is helpful.

Regards,

Marc Schwartz



More information about the R-SIG-Mac mailing list