使用SSH +屏幕远程启动IPython,然后分离并注销

时间:2013-08-01 14:34:34

标签: python ssh ipython enthought ipython-notebook

我的局域网上有一台计算机,我想在其上运行IPython Notebook服务器。计算机是无头的,所以我只能使用SSH访问这台计算机。我尝试通过屏幕启动IPython Notebook,然后分离,但内核重新启动X服务器错误。

具体来说,我做了以下事情:

  • SSH进入远程框:ssh -X 1.1.1.1
  • 开始或重新连接到最后一个屏幕:screen -RD
  • 启动笔记本ipython notebook
  • 分离并退出:ctrl-a-dexit

远程笔记本电脑服务器工作正常,直到我退出,然后尝试创建一个matplotlib图。那时我得到了

Kernel Restarting
The kernel appears to have died. It will restart automatically.

来自客户端的网络浏览器,

-c: cannot connect to X server localhost:10.0
2013-08-01 10:28:48.072 [NotebookApp] KernelRestarter: restarting kernel (1/5)
WARNING:root:kernel 6e0f5395-6ba7-44c8-912f-1e736dd66517 restarted

在服务器上。

由于缺少X资源,我似乎无法在注销后立即进行绘图。有人有解决方案吗?

3 个答案:

答案 0 :(得分:4)

Ipython正在使用traitsui创建的X会话中创建您的绘图(或任何其他X图形,例如ssh -X UI元素)。当您注销时,ssh隧道将与该X会话一起关闭,从而导致错误。没有ssh隧道,情节无法找到你。

假设您在服务器上没有可以查看图表等的物理终端,您可以通过告诉IPython笔记本显示内联图来查看matplotlib图。请注意,对于当前版本的ipython,这些图是静态png。我不确定traitsui是否有办法做这样的事情?

有几种方法可以做到这一点:

  • 使用%pylab inline
  • 导入pylab模块
  • 使用%matplotlib inline导入matplotlib(不确定旧版本是否可用)
  • 使用ipython notebook --pylab=inline
  • 运行ipython
  • configure ipython始终使用pylab内联:运行ipython profile create,然后在ipython_notebook_config.py中查找“内联”,该内容位于您的ipython配置文件目录中 - {Untntu上的~/.config/ipython/profile_default/

答案 1 :(得分:0)

似乎只有当我在笔记本中导入traitsui模块时才会重新启动这些内核。特别是,以下导入会导致错误。

from traitsui.api import *
from traitsui.menu import *

解决方案是在导入任何traitsui模块之前更改traitsui的后端

from traits.etsconfig.api import ETSConfig
ETSConfig.toolkit = 'null'

编辑:traitsui功能没有在ssh中使用,它只是一个更大模块的一部分。

答案 2 :(得分:0)

  • SSH进入远程框:ssh -X 1.1.1.1
  • 开始屏幕:screen -S ipython_process
  • 启动笔记本:ipython notebook --profile=nbserver
  • 分离:ctrl-a-d

通过端口8888上的浏览器远程欣赏