Hi John, On Mon, Jul 14, 2014 at 8:12 PM, John Fox <j...@mcmaster.ca> wrote: > Dear Gabor, > > As I just explained, the problem isn't testing for X11, which I know how to > do -- though capabilities("X11") is a bit better than what I suggested. The > issue is specific to Mac OS X because the Windows implementation of R > includes a Tcl/Tk that doesn't use X11, and I've never seen the problem on > Linux.
actually, what I am saying is, that it is not specific to OSX. Some (older, before 2012) OSX versions do include an X11 server, and some Linux or other Unix installations do not. I am not saying tcltk should not test for an X11 server, all I am saying is that the test suggested below (based on the os and the existence of a certain file) is not the best one. If it turns out that there is no X11 server, and the os is OSX, then indeed a dialog box could be displayed, see e.g. the one at http://www.macrumors.com/2012/02/17/apple-removes-x11-in-os-x-mountain-lion-shifts-support-to-open-source-xquartz/ Best, Gabor > Best, > John > >> -----Original Message----- >> From: Gábor Csárdi [mailto:csardi.ga...@gmail.com] >> Sent: Monday, July 14, 2014 6:37 PM >> To: Marc Schwartz >> Cc: John Fox; urba...@research.att.com; R-SIG-Mac >> Subject: Re: [R-SIG-Mac] Mac OS X tcltk/X11 issues >> >> 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_schwa...@me.com> >> wrote: >> > >> > On Jul 14, 2014, at 4:53 PM, Marc Schwartz <marc_schwa...@me.com> >> wrote: >> > >> >> On Jul 14, 2014, at 4:13 PM, John Fox <j...@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@r-project.org >> > https://stat.ethz.ch/mailman/listinfo/r-sig-mac > _______________________________________________ R-SIG-Mac mailing list R-SIG-Mac@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-mac