我通过带有-X
(或-Y
) 标志的 SSH 打开 GUI 远程程序,例如,
$ ssh -Y [email protected]
最近,我发现有一种更有效的方法可以仅通过网页浏览来做到这一点:
$ ssh -DNNNN [email protected]
其中NNNN
是四位数端口号。然后我将本地浏览器配置为通过端口 NNNN 通过代理进行连接。这比第一种 SSH 方法高效得多,因为不需要通过隧道传输所有 GUI 信息,只需传输我请求的 Web 数据。
我的问题是:一般来说,有没有一种更有效的 SSH 与 X-forwarding 方法?也许有一些方案利用本地库或渲染或其他东西来帮助操作远程托管的 GUI 程序?
答案1
你混淆了术语。首先是 X11 转发,从定义上看,它效率低下,您对此几乎无能为力(它不是为高延迟连接而设计的,几十年前)。与其他方法相比,它效率低下,因为它正在通过新网络传输整个图形用户界面(浏览器?)。
另一种是SOCKS代理(完全不同的东西),它只传输你感兴趣的网络数据(封装在SOCKS协议和SSH中),这显然更高效。
你的问题是以无法回答的方式提出的。你想达到什么目的?运行GUI程序?代理网络连接?完全不同的东西吗?
答案2
X 转发通常很慢,即使在相对较快的网络上也是如此。它受到带宽和延迟的影响:许多应用程序经常等待服务器的答复,这可能会导致明显的延迟。
您可以通过压缩来提高带宽。 SSH 可以使用该选项进行压缩-C
。您还可以使用DXPC,这是一种特殊用途的压缩程序,它理解 X 协议,因此可以比通用压缩执行得更好。然而,如果限制因素是延迟,这将无济于事。通常,dxpc 对慢速链接上的轻量级应用程序有很大的影响,但对快速链接上的重量级应用程序没有太大改善。
NX是 dxpc 的更高级替代品。与 dxpc 不同,它不仅进行压缩,还缓存一些数据,因此可以减少延迟。
可以产生很大差异的一件事是使用服务器渲染字体(经典的 X11 文本渲染)而不是客户端渲染(fontconfig)。它们通过远程链接要快得多。但服务器渲染的字体有其缺点:它们更丑(没有抗锯齿),它们由服务器而不是应用程序管理(本质上不是缺点,但许多应用程序希望完全控制其字体),并且许多现代应用程序只是不再支持他们了。
答案3
尝试 Xpra。它是最好的X11转发应用程序,而且更安全。它支持多种编解码器和压缩格式,甚至包括 x264。当我因业务被迫这样做时,我用它在远程端运行 Skype,并且希望我的机器仅使用开源代码。应用程序持续运行,因此如果您断开连接,您可以重新连接到它,就像 GNU screen 一样。
另请关注正在积极开发的开源 NX 实现 X2GO。