2009-11-10 12 views
22

Estoy ejecutando R 2.9 en una gran instancia Ubuntu de EC2, cargada con RAM, pero sin terminal. Cuando cargo una biblioteca que tiene dependencias de visualización, como el paquete sqldf, recibo el siguiente error:Cómo ejecutar R en un servidor sin X11, y evitar dependencias rotas

library(sqldf) 
... 
Loading required package: tcltk 
Loading Tcl/Tk interface ... Error in fun(...) : couldn't connect to display "localhost:11.0" 
Error : .onLoad failed in 'loadNamespace' for 'tcltk' 
Error: package 'tcltk' could not be loaded 

Esto parece ser un problema general, y me pregunto cómo otros han resuelto. Instalar un servidor X11 no es una solución deseable.

Respuesta

32

Utilice el servidor de framebuffer X11 virtual - hacemos lo mismo para crear paquetes que requieren X11 para compilaciones R en chroots sin cabeza. Tomando p. pars del Build-Depends de rggobi:

xvfb xauth xfonts-base

Después de instalar estos se puede utilizar el comando xvfb-run. Si inicia R por ej.

xvfb-run R --no-save 

ahora debería poder usar las rutinas y comandos que requieren X11 como p. Ej. algunos de los dispositivos de trazado, o la inicialización tcl/tk que también insiste en tener X11.

El mismo truco es útil para servidores web.

9

Sugerencia de Dirk de hecho funciona bien, si tiene control sobre el servidor & puede ejecutar xvfb. Si no es así, sigue leyendo ...

en nuevas versiones de R (> = 2.10 & quizás antes), esto ya no es un error, es una advertencia:

> library(tcltk) 
Loading Tcl/Tk interface ... done 
Warning message: 
In fun(libname, pkgname) : no DISPLAY variable so Tk is not available 

Ahora puede suprimir esta advertencia, y el posterior mensaje de paquete de carga a través de:

> suppressPackageStartupMessages(suppressWarnings(library(tcltk))) 

a menudo verá este mensaje debido a la carga de un paquete como qvalue que depende de tcltk; si después de un funcionamiento silencioso, debe cargar en silencio tcltk primero, y luego el paquete de interés:

> suppressPackageStartupMessages(suppressWarnings(library(tcltk))) 
> library(qvalue) 

Marcos

resucitado debido a: http://dev.list.galaxyproject.org/wrapping-qvalue-in-Galaxy-td4655164.html

Cuestiones relacionadas