我使用的VPN(与OpenVPN的),以保持访问我的家庭和工作电脑,今天我试图ssh转发一个应用程序是只有GUI,我发现这是非常缓慢。 我之前使用过SSH X11转发,确实有延迟,但是这两台主机之间真的很大。 单击button和本地机器上显示的输出之间大约需要20秒。
我在这两台主机之间的延迟rtt min/avg/max/mdev = 84.393/86.858/91.297/3.163 ms ,SSH连接给我1.2MiB / s左右,我认为这应该足够了:
我正在使用-YCX ,而且我已经尝试过使用和不使用Y和C (openvpn已经压缩了lzo的东西),以及不同的密码,并得到了类似的结果。
我开始认为这可能是GTK的主题,这可能是非常沉重的东西。
有人知道这是否正常,我能做些什么来减less延迟? (3-5秒可以忍受,但20秒太多了)
转发当代 X的问题(在networking透明度发明的时候不是“旧的”X)是字体平滑处理:为了适当地平滑在某些表面上渲染的文本的字形 ,X服务器必须获得位于从想要呈现该字形的客户端的该字形的边界框。 (这是平滑的algorythm正常工作的必要条件,因为它需要考虑字形的上下文。)
因此,使用当前的GUI工具包,X服务器与其客户端之间的通信量是巨大的:通过在本地X服务器上启用TCP(现在它们通常以-nolisten tcp启动),并强制一些GTK或基于Qt的X客户端通过TCP与服务器通信:
$ DISPLAY=localhost:x11 /usr/bin/that/x-app
(请参阅X服务器的标准端口的grep x11 </etc/services )。 即使Xstream量没有离开本地主机,您也会立即注意到客户端的行为有多慢:这只是因为通常Xstream量是通过Unix域套接字进行传输的,基本上只是在内存中的缓冲区之间复制字节,因此具有相当低的开销,现在它遍历完整的TCP / IP栈及其所有的队列和复杂的逻辑。 现在考虑一下这个stream量在你的情况下被发送时会发生什么 – 包装在三层数据传输协议中:通过TCP / IP携带的VPN隧道携带的SSH隧道。
至于怎么做,我不太确定。
当mosh不在游戏中时 ,我会尝试使用OpenSSH客户端的IPQoS选项。
另一种方法是从另一个angular度解决问题:尝试基于VNC访问您的应用程序。 选项有所不同:
x11nvc或类似的东西导出整个显示。 Xpra和winswitch 。 X2Go 。