在Jupyter Notebook终端上运行GUI应用程序(DISPLAY)-Linux

时间:2019-05-08 14:10:01

标签: linux jupyter-notebook jupyter display

我们正在Ubuntu服务器上运行jupyter笔记本,并使用jupyter的终端功能。这对于运行CLI很有帮助,但是当我们必须运行基于GUI的应用程序(例如xclock)时,它会显示“无法打开显示”。

如果我们通过从Windows jumpserver进行pytty会话并设置DISPLAY变量来运行相同的GUI命令,则它可以正常工作(即GUI应用程序显示正确)

(base) sandeep:/data$ xclock
Error: Can't open display:

理想情况下,如果我们设置正确的DISPLAY环境变量,它应该可以运行。但是,在jupyter笔记本终端的情况下,DISPLAY的正确值应该是什么,任何人都可以建议。

1 个答案:

答案 0 :(得分:0)

方案:在本地计算机上,您想打开和操作在远程计算机上运行的Juniper笔记本。我们将通过打开SSH隧道来做到这一点。该隧道会将远程运行的Jupyter实例使用的端口转发到本地计算机上的端口,可以像本地运行的Jupyter实例一样在浏览器中对其进行访问。

在远程计算机上,启动Jupyter笔记本服务器:

remote_user@remote_host$ Jupyter notebook --no-browser --port=8889

通常,Jupyter会打开浏览器以显示可用的笔记本,但是我们不需要这样做,因此我们使用选项--no-browser。我们也将端口更改为8889,除了显示其操作方式外,没有其他原因。

在本地计算机上,启动SSH隧道:

local_user@local_host$ ssh -N -f -L localhost:8888:localhost:8889 remote_user@remote_host

第一个选项-N告诉SSH不会执行任何远程命令,这对于端口转发很有用。第二个选项-f的作用是SSH将进入后台,因此本地启用隧道的终端仍然可用。最后一个选项-L列出了端口转发配置(从远程端口8889到本地端口8888)。

现在在本地计算机上打开浏览器,然后在地址栏中输入

localhost:8888

显示远程运行的Jupyter笔记本服务器。

要关闭本地计算机上的SSH隧道,请查找该进程并手动将其杀死:

local_user@local_host$ ps aux | grep localhost:8889
local_user 18418  0.0  0.0  41488   684 ?        Ss   17:27   0:00 ssh -N -f -L localhost:8888:localhost:8889 remote_user@remote_host
local_user 18424  0.0  0.0  11572   932 pts/6    S+   17:27   0:00 grep localhost:8889
local_user@local_host$ kill -15 18418

或者,您可以不使用-f选项来启动隧道。然后,该进程将保留在前台,并可以用ctrl-c终止。

在远程计算机上,使用ctrl-c ctrl-c杀死Jupyter服务器。