我的 LAN 上有一台计算机,我想在其上运行 IPython Notebook 服务器。计算机是 headless 的,所以我只能使用 SSH 访问这台计算机。我尝试通过屏幕启动 IPython Notebook,然后分离,但内核重新启动并出现 X 服务器错误。
具体来说,我做了以下事情:
- SSH 进入远程框:
ssh -X 1.1.1.1
- 启动或重新附加到上一个屏幕:
screen -RD
- 启动Notebook
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 资源,我一注销笔记本就无法绘图。有人对此有解决方案吗?
最佳答案
Ipython 正在您使用 ssh -X
创建的 X session 中创建绘图(或任何其他 X 图形,例如 traitsui
UI 元素)。当您注销时,ssh 隧道与该 X session 一起关闭,因此出现错误。没有 ssh 隧道,阴谋就无法找到你。
假设您在服务器上没有用于查看图表等的物理终端,您可以通过告诉 IPython notebook 显示内联图表来查看 matplotlib 图表。请注意,对于当前版本的 ipython,绘图是静态 png 的。我不确定 traitsui
是否有办法做类似的事情?
有几种方法可以做到这一点:
- 使用
%pylab inline
导入pylab模块 - 使用
%matplotlib inline
导入 matplotlib(不确定旧版本是否可用) - 使用
ipython notebook --pylab=inline
运行ipython - configure ipython始终使用 pylab inline:运行
ipython profile create
,然后在ipython_notebook_config.py
中查找“inline”,它位于您的 ipython 配置文件目录 -~/。在 Ubuntu 上配置/ipython/profile_default/
。
关于python - 使用 SSH+screen 远程启动 IPython,然后分离并注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17997008/