0

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

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

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

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

4

1 回答 1

1

场景:在本地计算机上,您想要打开和操作在远程计算机上运行的瞻博网络笔记本。我们将通过打开一个 SSH 隧道来做到这一点。此隧道会将远程运行的 Jupyter 实例使用的端口转发到本地机器上的端口,在浏览器中可以像本地运行的 Jupyter 实例一样访问它。

在远程机器上,启动 Jupyter notebooks 服务器:

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.

于 2019-05-22T00:52:08.400 回答