退出带有正在运行图形界面程序的ssh -X会话,但让程序在远程主机上继续运行。

11
我已经通过SSH连接到远程机器。我启用了X11转发(ssh -X)并启动了一个GUI程序。
该程序需要5分钟的设置时间来进行一些处理,但实际处理需要1-2小时。当程序在运行时,我不想流式传输数据。甚至当程序完成并产生文件输出时,我也不想再次看到它,因为我可以使用scp把它们传输过来。
那么如何退出SSH会话但让程序在机器上继续运行?在终端中按CRTL+C吗?
编辑: 答案请参见我下面的评论。

好的,我偶然发现了我认为是最简单的方法。我正在阅读有关屏幕的内容,突然想到可以使用屏幕实用程序来分离和注销,让进程在远程计算机上运行。之后,您可以登录并重新附加。 - s5s
1
可以使用 xpra 来管理 X 程序,类似于使用 screen 来管理终端程序:在 xpra 下启动 X 程序,进行分离/重新连接。-- http://en.wikipedia.org/wiki/Xpra - imz -- Ivan Zakharyaschev
5个回答

10

简而言之 - 如果不对运行方式进行一些修改,您将无法完成此操作。GUI应用程序需要一个X服务器目标来接受其GUI更新 - 如果您正在使用本地的X服务器进行此操作,则需要 (1) 打开连接 (2) 实际处理更新。

解决这个问题的方法是使用类似 Xvfb 的东西 - 这是一种无头方式来托管虚拟X服务器。除了维基百科页面上提供的示例之外,经常使用此机制的人们还包括Selenium用户。


1
一个人可以类似地使用“xpra”:在其下启动X程序,然后分离/重新连接。--http://en.wikipedia.org/wiki/Xpra - imz -- Ivan Zakharyaschev
没听说过xpra,非常酷 - 它就像是X应用程序的屏幕。这听起来似乎符合OP的要求。 - synthesizerpatel
1
是的,xvfb是正确的选择。特别是在Ubuntu上: $ sudo apt install xvfb 然后 $ xvfb-run your_program arguments... & - Palo

2

太棒了,我已经花了几个小时寻找一个可接受的解决方案来解决我的问题,终于有一个出现了。 ssh -X -f login@machine yourprogram 对我非常有效。虽然我使用了ssh -Y -f login@machine yourprogram。这让我疯狂了。


1
你可以写一个注释,而不是在答案中说这么多。 - Naddy

1

有些人说,SSH -X 使用本地的 X 服务器,因此需要连接。我也遇到了同样的问题,想要退出 ssh 但保留 GUI 应用程序运行。为了做到这一点,我在远程主机上安装了 X 服务器和 VNC 服务器。使用本地计算机上的 VNC 客户端,您可以轻松连接到 VNC 服务器并断开连接,同时保留 GUI 应用程序运行。

顺便说一下,使用 VNC 或 X2Go 可以获得更好的性能。在我的情况下,使用 SSH -X,即使使用 -Y 或 -C 优化,Firefox 运行非常缓慢,有些网站根本无法加载。


0
运行 ssh -X -f login@machine yourprogram 应该可以解决问题。

1
但它不会使ssh会话退出,它将在后台保持打开状态,或者...? - Oleg Mikheev
1
是的,它会在后台运行。如果没有它,您将无法与您启动的应用程序进行通信。 - Michał Kosmulski

0

使用nohup program &启动程序将使其在关闭终端后仍然运行,保证程序的安全性。

在结束ssh会话后,您将无法看到UI界面,但由于您不需要它,程序仍然可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接