如何在没有 X11 的服务器上运行 R,并避免损坏的依赖关系

Posted

技术标签:

【中文标题】如何在没有 X11 的服务器上运行 R,并避免损坏的依赖关系【英文标题】:How to run R on a server without X11, and avoid broken dependencies 【发布时间】:2009-11-10 20:10:25 【问题描述】:

我在一个大型 EC2 Ubuntu 实例上运行 R 2.9,加载了 RAM,但没有终端。当我加载具有显示依赖项的库时,例如 sqldf 包,我收到以下错误:

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

这似乎是一个普遍的问题,我想知道其他人是如何解决的。安装 X11 服务器不是理想的解决方案。

【问题讨论】:

【参考方案1】:

使用虚拟帧缓冲 X11 服务器——我们在无头 chroot 中构建需要 X11 的包以用于 R 构建。以例如来自 rggobi 的 Build-Depends 部分:

xvfb xauth xfonts-base

安装这些后,您可以使用xvfb-run 命令。如果您通过例如启动 R

xvfb-run R --no-save

您现在应该能够使用需要 X11 的例程和命令,例如一些绘图设备,或 tcl/tk 初始化也坚持使用 X11。

同样的技巧对 Web 服务器很有用。

【讨论】:

【参考方案2】:

如果您可以控制服务器并且可以运行 xvfb,那么 Dirk 的建议确实很有效。 如果没有,请继续阅读...

在较新版本的 R(>= 2.10 及可能更早版本)中,这不再是错误,而是警告:

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

您现在可以通过以下方式抑制此警告以及随后的包加载消息:

> suppressPackageStartupMessages(suppressWarnings(library(tcltk)))

由于加载依赖于tcltk 的包,例如qvalue,您经常会看到此消息;如果您在静默操作之后,您应该先静默加载 tcltk,然后再加载感兴趣的包:

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

标记

因:http://dev.list.galaxyproject.org/wrapping-qvalue-in-Galaxy-td4655164.html而复活

【讨论】:

以上是关于如何在没有 X11 的服务器上运行 R,并避免损坏的依赖关系的主要内容,如果未能解决你的问题,请参考以下文章

如何避免偶尔损坏的下载

调试 X11 程序时如何避免 SIGPIPE(由于超时?)?

python文件X11远程运行问题

X11 从无头服务器到另一个 X11 服务器

使用 MS Access VBA 在 .xlsx 文件中插入一行...如何避免损坏文件?

如何将 X11 转发到运行在远程 linux 主机上的虚拟机?