Mac OS X tcltk/X11 issues
On Jul 14, 2014, at 4:53 PM, Marc Schwartz <marc_schwartz at me.com> wrote:
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.
A possible correction in the above code relative to detecting OS X:
if ((Sys.info()["sysname"] == "Darwin") & 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()
}
I believe that Sys.info()["sysname"] == "Darwin" is preferred for detecting the OS that R is running on versus the OS that it was built upon according to the help files, if I read correctly. This could be important if someone is building R from source versus installing Simon's CRAN binary, I presume.
Regards,
Marc