我在远程服务器上运行 Jupyter 服务器,nohup jupyter lab --no-browser --port 1234 $
并使用 X11 转发来访问远程服务器上的 GUI 程序。
但$DISPLAY
Jupyter Server 的编号是 Jupyter Server 当前启动的 shell 之一。例如,user
通过 登录到远程服务器ssh
,我们称之为user_shell1@remote
,假设 DISPLAY 编号为localhost:10.0
。如果相同的 user
使用第二个shell登录远程,则user_shell2@remote
DISPLAY数字为localhost:11.0
,这意味着第二个shell上的同一个用户由于环境不一致而无法使用Jupyter Server运行GUI程序$DISPLAY
。
因为我在服务器上运行一些需要运行相当长一段时间的量子化学程序,所以我不想每次都重新启动 Jupyter 服务器,而且我想在家里和办公室用两台电脑访问 Jupyter 服务器的 GUI。
以下是输出xauth list
(base) [user@node01 ~]$ xauth list
node01/unix:15 MIT-MAGIC-COOKIE-1 849739cabda5e7e974a5ef9dd448f864
node01/unix:10 MIT-MAGIC-COOKIE-1 6016f581849916680257ef82ff73582e
node01/unix:11 MIT-MAGIC-COOKIE-1 35df3ba83b9cc86654ff324964dc89d0
node01/unix:12 MIT-MAGIC-COOKIE-1 4418caa4a79c693da602c37e08202da5
实际上,从 10 到 12 的“用户”都是同一个帐户,但在不同的本地机器上访问远程服务器,是否可以为所有这些“用户”设置 $DISPLAY 数字,以便这些 $DISPLAY 数字与正在运行的 Jupyter 服务器的数字一致。
或者是否有其他方法可以访问 GUI 功能,而无需在不同的本地机器上重新启动 Jupyter 服务器?
答案1
正如@meuh所建议的,我在这里发布了我自己的答案。Jupyter的魔术命令可以在不重新启动Jupyter服务器的情况下重置笔记本的环境变量。
所以在这里我只需将%set_env DISPLAY localhost:11.0
DISPLAY 环境变量重置为与当前登录 shell 一致,就可以在 ipython 笔记本中运行 gui 程序,而无需重新启动 Jupyter 服务器。