ssh -X:远程应用程序应在本地浏览器中打开超链接

ssh -X:远程应用程序应在本地浏览器中打开超链接

我用来ssh -X在远程机器上执行 GUI。

这很有效,除了一件事:

如果我单击应用程序中的超链接,则远程计算机上会启动浏览器。

就我而言,该应用程序是 PyCharm。

如何打开我的本地浏览器

在本地浏览器中打开超链接

屏幕截图有点误导,因为 URL 是 127.0.0.1。对于这个问题来说,URL 并不重要。所有应用程序的所有超链接都应在本地计算机上打开。

远程机器是 Ubuntu Linux。

有一个从本地机器8000到远程服务器8000端口的端口转发。

答案1

当您使用 在远程计算机上运行命令时ssh -X,运行的任何命令都在远程计算机上运行,​​但会显示在当前显示屏上。因此,为了使此功能完全正常工作,您需要满足以下条件:

  1. 您本地机器上的浏览器需要以某种方式向 X 服务器注册才能被发现。
  2. 您需要将BROWSER远程计算机上的环境变量设置为一个程序,该程序将查询 X 服务器并向您的本地浏览器发出信号,使用某些 X11 特定的 IPC 机制打开页面。

但是,我不知道有哪个浏览器支持这种配置。理论上你可以自己做,但需要一堆自定义代码才能与 X 服务器交互。

您可以交替使用本地编辑器加上远程 shell 的 SFTP 编辑功能来工作,这可能会更容易。

答案2

我没有看到针对所有应用程序的解决方案,该解决方案不使用处理链接并将其发送到您的计算机的应用程序/脚本来取代浏览器。

另一个解决方案是尽可能在本地计算机上编译和调试项目,并且只有当其合理工作时才将其复制到目标机器上。

我能看到的最后一个解决方案是使用可以在远程计算机上进行远程调试的调试器。当您使用 PyCharm 时,请查看以下帮助文章是否适合您的情况:

答案3

以下远非一个现成的解决方案(我对 Linux / Unix GUI 的了解不足以提供一个),但它在概念上是干净的(如果您能够自己弄清楚服务器上的 GUI 部分)。

不久前,我有一个 Web 项目,其中只有几个手工制作的页面。虽然很简单,但我希望每次更改都能在保存页面后立即反映在浏览器显示中。我基本上按照概述的步骤解决了这个问题这里

那么这和你的问题有什么关系呢?好吧,你可以使用与 VSCode 相同的技术来远程控制 Chrome:基本思路是在本地 PC 上启动“调试器”Chrome,它将监听“调试”查询。然后,你的远程机器可以使用 Chrome 调试协议将要打开的链接发送到本地 PC 上的“调试器”Chrome,并在那里打开它。

第一步很简单。只需在本地电脑上启动 Chrome 并使用某些附加选项即可,例如

chrome --remote-debugging-port=9222

对我来说,最困难的部分是重新配置远程系统。必须有一种机制来告诉系统或应用程序单击链接时会发生什么。您必须更改该配置:不是在远程系统上打开浏览器,而是必须将链接嵌入到远程调试数据包(即命令)中,并且必须将该命令转发到本地 PC 上的“调试器”Chrome 实例。

您没有写出远程服务器上运行的是哪种窗口管理器/GUI,因此没有人可以告诉您如何更改那里的系统范围配置(例如,我不知道如何告诉 KDE 或 Gnome 如何打开链接,但我相当确定两者之间有所不同)。此外,可能有些应用程序有自己的配置机制,告诉它们应该如何打开链接。同样,我对 PyCharm 一无所知,所以我也无法帮助您。

假设您已经解决了该问题。然后,您将分别告诉远程服务器系统或应用程序运行一个脚本,该脚本在您激活链接时执行以下操作:

(a)为 Chrome 构建适当的调试器数据包/命令,并

(b) 将此数据包发送到本地电脑上的 Chrome 实例。

这一页是关于 Chrome 调试协议 (CDP) 的入门指南。除其他内容外,它还说明了如何通过远程控制的 Chrome 实例中的 HTTP 端点在新选项卡中打开 URL。值得注意的是,请查看页面末尾的部分GET /json/new?{url}

至于 (b),您可以使用 wget 或 cURL 等将该查询/命令发送到本地 PC 上的 Chrome 实例。

最后,请注意,即使“调试器”Chrome 不与发送/接收调试器数据包/命令的客户端在同一台 PC 上运行,Chrome 远程调试也绝对有效,尽管(出于我不明白的原因)教程很少提到这一点。我个人曾使用过这样的配置:在上面提到的小项目中,我在远程 Linux 系统上编辑源文件,而 Chrome 在我的本地 PC 上运行。

相关内容