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