【问题标题】:Quitting ssh -X session with a running GUI program but leaving the program to run on the remote host使用正在运行的 GUI 程序退出 ssh -X 会话,但让程序在远程主机上运行
【发布时间】:2012-03-23 06:25:44
【问题描述】:

我已经 ssh-ed 到远程机器。我启用了 X11 转发 (ssh -X) 并启动了一个 GUI 程序。

该程序需要 5 分钟来设置执行一些处理,但实际处理需要 1-2 小时。我不想在程序运行时流式传输数据。我什至不想再次看到该程序,因为它在完成时会生成文件作为输出,我可以直接对它们进行 scp。

那么我怎样才能退出 ssh 会话但让程序在机器上运行呢?终端中的CRTL+C?

编辑:答案请看我下面的评论。

【问题讨论】:

  • 好的,所以我偶然发现了我认为最简单的方法。我正在阅读有关屏幕的信息,我突然想到您可以使用屏幕实用程序分离和注销,让进程在远程计算机上运行。之后您可以登录并重新附加。
  • 可以将xpra 用于X 程序,类似于screen 用于终端程序:在其下启动X 程序,分离/重新连接。 -- en.wikipedia.org/wiki/Xpra

标签: linux user-interface ssh terminal x11


【解决方案1】:

长话短说 - 如果不对您的运行方式进行一些修改,您就无法做到这一点。 GUI 应用程序要求 X 服务器目标接受它的 GUI 更新 - 如果您使用本地 X 服务器来执行此操作,那么它需要 (1) 打开连接 (2) 您实际处理更新。

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

【讨论】:

  • 同样可以使用xpra:启动它下的X程序,分离/重新连接。 -- en.wikipedia.org/wiki/Xpra
  • 没听说过 xpra,很酷 - 它就像 X 应用程序的屏幕。这听起来很符合 OP 的要求。
【解决方案2】:

太棒了,我一直在为我的问题寻找一个可以接受的答案几个小时,终于弹出了一个。 ssh -X -f login@machine yourprogram 非常适合我。虽然我使用了 ssh -Y -f login@machine yourprogram。这让我发疯了。

【讨论】:

  • 您可以写评论,而不是在答案中说出所有这些。
【解决方案3】:

就像有些人说的,SSH -X 正在使用你本地的 X 服务器,所以它需要连接。我有同样的问题,想退出 ssh 但让 GUI 应用程序运行。为此,我在远程主机上安装了 X 服务器和 VNC 服务器。使用本地计算机上的 VNC 客户端,您可以轻松连接到 VNC 服务器并断开连接,让 GUI 应用程序继续运行。

顺便说一句,使用 VNC 或 X2Go 会有更好的性能。在我的例子中,Firefox 非常慢,并且一些网站使用 SSH -X 根本无法加载,即使使用 -Y 或 -C 优化也是如此。

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 但它不会使 ssh 会话退出,它会在后台打开,或者..?
    • 是的,它将在后台激活。没有它,您将无法与您启动的应用程序进行通信。
    【解决方案5】:

    使用nohup program & 启动您的程序将使您可以安全地关闭您的终端 - 程序仍将运行。

    结束 ssh 会话后您将无法看到 UI,但因为您不需要它 - 它会完成这项工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多