如何在无头Ubuntu上通过svSocket在R会话和rstudio服务器之间发送消息



我有一个无头R服务器,它为最近的rstudio-server提供服务。

我需要通过svSocket传递一些对象。

因为svSocket使用TCL/TK消息队列,它需要一个工作的X11会话,我知道我需要在虚拟X11环境中嵌入一些东西。

我通过ssh登录到服务器,并在命令行中输入以下命令:

sudo Xvfb :0 &
export DISPLAY=":0"
/usr/lib/rstudio-server/bin/rserver &
R

然后,我通过其web界面登录到rstudio服务器,并键入以下命令:

> library(svSocket)
> startSocketServer()
[1] TRUE

然后,在这个R会话中,我放置了以下

> library(svSocket)
> con<-socketConnection(host='localhost', port=8888)
> evalServer(con,'2+2')

我希望得到"4"结果,但R挂起,从不返回任何提示。

如果我用常规的R替换rstudio服务器,那么一切都可以正常工作。

它对待rsession的方式有什么特别之处,以至于这个例子被打破了?如何修复?

SessionInfo():

R version 3.2.3 (2015-12-10)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04 LTS
locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=pl_PL.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=pl_PL.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=pl_PL.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=pl_PL.UTF-8 LC_IDENTIFICATION=C       
attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

启动套接字连接时需要提及端口号

> library(svSocket)
> startSocketServer(port=8888)

在这之后它应该可以工作了。

最新更新