SSH X11 轉發在 VPN 上非常慢
我正在使用 VPN(帶有 OpenVPN)來保持我的家庭和工作電腦之間的訪問,今天我嘗試 ssh 轉發一個僅限 GUI 的應用程序,我發現這非常慢。我以前使用過 SSH X11 轉發,它確實有延遲,但是在這兩個主機之間它真的很大。從點擊按鈕到在本地電腦上顯示輸出大約需要 20 秒。
我
rtt min/avg/max/mdev = 84.393/86.858/91.297/3.163 ms
在這兩個主機之間有延遲,SSH 連接給我大約 1.2MiB/s,我認為這應該綽綽有餘:\我正在使用
-YCX
, 並且我已經嘗試過使用和不使用Y
andC
(openvpn 已經用 lzo 壓縮了東西),以及不同的密碼,結果相似。我開始認為這可能是 GTK 主題,它可能真的很重或什麼的。
有人知道這是否正常,我該怎麼做才能減少延遲?(3-5s可以忍受,但20太多了)
轉發當代X(不是發明網路透明度時的“舊”X)的問題在於字型平滑:為了正確平滑呈現在某個表面上的每個文本字形,X 伺服器必須獲取位於來自希望呈現該字形的客戶端的該字形的邊界框。(這是平滑算法正常工作所必需的,因為它考慮了呈現字形的上下文。)
因此,使用現代 GUI 工具包,X 伺服器與其客戶端之間的流量非常*巨大:*您可以通過在本地 X 伺服器中啟用 TCP 來看到這一點(這些天它們通常
-nolisten tcp
以 . X 客戶端通過 TCP 與伺服器通信:$ DISPLAY=localhost:x11 /usr/bin/that/x-app
(參見
grep x11 </etc/services
X 伺服器的標準埠)。即使 X 流量沒有離開本地主機,您也會立即註意到客戶端的行為是多麼緩慢:這僅僅是因為通常 X 流量是通過 Unix 域套接字進行的,該套接字基本上只是在記憶體中的緩衝區之間複製字節,因此具有相當低的成本,現在它遍歷帶有所有隊列和復雜邏輯的完整 TCP/IP 堆棧。現在考慮在您的情況下發送此流量時會發生什麼 - 包裝在三層數據傳輸協議中: SSH 隧道由 VPN 承載 由網路承載的 TCP/IP 承載的隧道。至於該怎麼做,我不太確定。
mosh
退出遊戲後,我會嘗試使用OpenSSHIPQoS
客戶端選項。另一種方法是從另一個角度解決問題:嘗試基於 VNC 訪問您的應用程序。選項在此處有所不同: