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

Gábor Csárdi csardi.gabor at gmail.com
Tue Jul 15 00:36:31 CEST 2014


What's wrong with capabilities("X11")?

I am not sure if teting for the OS, and especially for a particular X
server, installed in a particular directory, is a good idea, even if
it covers most of the _current_ installations.

Gabor

On Mon, Jul 14, 2014 at 6:13 PM, Marc Schwartz <marc_schwartz at me.com> wrote:
>
> 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
>
> _______________________________________________
> R-SIG-Mac mailing list
> R-SIG-Mac at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-mac



More information about the R-SIG-Mac mailing list