我的局域网上有一台计算机,我想在其上运行IPython Notebook服务器。计算机是无头的,所以我只能使用SSH访问这台计算机。我尝试通过屏幕启动IPython Notebook,然后分离,但内核重新启动X服务器错误。
具体来说,我做了以下事情:
ssh -X 1.1.1.1
screen -RD
ipython notebook
ctrl-a-d
,exit
远程笔记本电脑服务器工作正常,直到我退出,然后尝试创建一个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资源,我似乎无法在注销后立即进行绘图。有人有解决方案吗?
答案 0 :(得分:4)
Ipython正在使用traitsui
创建的X会话中创建您的绘图(或任何其他X图形,例如ssh -X
UI元素)。当您注销时,ssh隧道将与该X会话一起关闭,从而导致错误。没有ssh隧道,情节无法找到你。
假设您在服务器上没有可以查看图表等的物理终端,您可以通过告诉IPython笔记本显示内联图来查看matplotlib图。请注意,对于当前版本的ipython,这些图是静态png。我不确定traitsui
是否有办法做这样的事情?
有几种方法可以做到这一点:
%pylab inline
%matplotlib inline
导入matplotlib(不确定旧版本是否可用)ipython notebook --pylab=inline
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 -X 1.1.1.1
screen -S ipython_process
ipython notebook --profile=nbserver
ctrl-a-d
通过端口8888上的浏览器远程欣赏