我尝试通过 SSH 启动 Firefox,使用
ssh -X user@hostname
进而
firefox -no-remote
但它非常非常慢。
我怎样才能解决这个问题?是连接问题吗?
答案1
远程启动某些 X 客户端时最大的问题之一是 X 协议,而不是 ssh 开销! X 协议需要在客户端和服务器之间进行大量的乒乓操作,这绝对会降低远程应用程序的性能。
尝试类似“x2go”(在默认设置下也可以通过 ssh)之类的东西,您会发现相比之下,firefox“飞得很快”!
一些发行版提供了开箱即用的 x2go 软件包,例如 Debian 测试或 Stable-Backports。但如果没有,请参阅http://wiki.x2go.org/doku.php/download:start,他们为许多发行版提供预构建的二进制包/存储库。您应该安装x2goclient(在您想要与firefox交互的计算机上)和x2goserver(在应该运行firefox的计算机上),然后您可以为单个X应用程序或完整桌面视图等配置会话。连接本身会发生通过 ssh。这真是一个很棒的工具:)
要使用它,您运行“x2goclient”,它会启动一个 GUI,您可以在其中创建新会话:您提供服务器的 dns 名称、端口、ssh 数据等,然后选择“会话类型”,即,如果例如,您想要一个完整的远程 KDE 或 GNOME 桌面,或者只是一个“单个应用程序”,然后输入“firefox”。
答案2
默认的 ssh 设置会导致连接速度相当慢。请尝试以下方法:
ssh -YC4c arcfour,blowfish-cbc user@hostname firefox -no-remote
使用的选项是:
-Y Enables trusted X11 forwarding. Trusted X11 forwardings are not
subjected to the X11 SECURITY extension controls.
-C Requests compression of all data (including stdin, stdout,
stderr, and data for forwarded X11 and TCP connections). The
compression algorithm is the same used by gzip(1), and the
“level” can be controlled by the CompressionLevel option for pro‐
tocol version 1. Compression is desirable on modem lines and
other slow connections, but will only slow down things on fast
networks. The default value can be set on a host-by-host basis
in the configuration files; see the Compression option.
-4 Forces ssh to use IPv4 addresses only.
-c cipher_spec
Selects the cipher specification for encrypting the session.
For protocol version 2, cipher_spec is a comma-separated list of
ciphers listed in order of preference. See the Ciphers keyword
in ssh_config(5) for more information.
这里的要点是使用不同的加密密码(在本例中为 arcfour,它比默认值更快),并压缩正在传输的数据。
注意:我距离这方面的专家还很远。上面的命令是我在某处博客文章中找到它后使用的,我注意到速度有了巨大的提高。我确信下面的各种评论者知道他们在谈论什么,并且这些加密密码可能不是最好的。这个答案中唯一真正相关的很可能是使用交换机-C
来压缩正在传输的数据。
答案3
ssh
我在使用隧道通过另一台机器路由流量方面有更好的经验。设置起来非常简单,因为无论如何您都可以访问 ssh。在计算机上的终端中,输入
ssh -vv -ND 8080 user@yourserver
保持此窗口打开并观察它传递一些有关流经隧道的数据的详细消息。
在 中firefox
,转到首选项 -> 高级 -> 网络 -> 连接:设置。
选择手动代理配置并添加SOCKS v5
代理:
SOCKS Host: localhost Port 8080
通过导航到例如检查您的新IPhttp://whatismyipaddress.com/。
您可以使用 Firefox 插件,例如狡猾的代理动态切换代理。
答案4
X11 是一个过时的协议。例如,如果软件将字母“A”一遍又一遍地写入同一位置,它将一遍又一遍地重新传输。许多现代 GUI 倾向于重绘未更改的内容,而 X11 会很乐意重新传输每个原子屏幕输出。换句话说,它传输的不是像素而是命令。这与 VNC 和 Teamviewer 的工作方式相反,它们基本上是传输像素。这还会导致部分同步操作,其中一个命令必须等待另一命令完成。
SSH 使用大量的 CPU 能力并且不支持多线程。例如,我的服务器在单核上以 100% 的速度运行 SSH,但这仅相当于 X11 的未压缩数据约 20MByte/s,压缩数据约 5MByte/s。
Firefox 对 X11 非常不友好。它很少使用命令(X11 可以有效处理这些命令),但大多是小且难以压缩的位图,并将其打包到 X11 位平面操作中。将无论如何都不应该接近的两件事结合在一起。最坏的情况:任何小动画。即使是 64x64 像素的动画 GIF 也可能会冻结您的 Firefox 连接。
也就是说,让我们更深入地探讨一下。
在高速线路(例如 100Mbit 或更高)上,压缩通常比骨头更成为负担。您的里程可能会有所不同。尝试使用“-C”进行 ssh。使用 SSH2,不再需要手动选择压缩级别,您只能使用类似于“gzip -3”的东西,或者必须进行一些欺骗性的隧道。使用相当快的“lzop -1”可以获得更快的压缩,或者使用“xz -9e”获得更好的压缩。大约十年前,我尝试过“lzop -1”,但结果并不令人印象深刻。
加密货币的速度很大程度上取决于您的 CPU。看https://possiblelossof precision.net/?p=2255一种简单的方法来检查哪种密码在您的系统上运行最快。预计最快和最慢之间的速度是两倍。尽管在过去 20 年里我从未见过慢速密码作为标准,但密码通常默认为接近最快的密码。
现在这是您最好的选择:在 Firefox 中禁用硬件加速。这很少需要,因为 Firefox 无论如何都会通过网络禁用它,但在某些情况下它无法这样做,这就是 Firefox 变得非常非常慢的地方。
这就是关于 Firefox、SSH 和 X11 的全部内容。如果这不起作用,请尝试其他方法:
通过在 X11-Server 上执行类似操作,无需 SSH 即可运行 X11
startx -- -listen tcp &
sleep 5
export DISPLAY=:0
xhost +yourx11client +yourx11client.local
在 X11 客户端上:
export DISPLAY=yourx11server:0
提示,X11 服务器和客户端的命名是“颠倒的”。服务器是显示器,客户端是运行应用程序。
这将轻松使 Firefox 加速十倍。但有些页面仍然会变得非常缓慢且反应迟钝,例如视频。
更激进的一步:放弃 X11 作为网络协议,使用 VNC。通过使用远程屏幕或完全虚拟化的 VNC 会话:
vncserver :1 -name VNC1 -geometry 1024x768 -depth 15
在 $HOME/.vnc/xstartup 中类似:
#!/bin/sh
# Uncomment the following two lines for normal desktop:
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
xterm -geometry 80x30
我强烈建议使用 xsetroot 命令,因为默认的 X11 背景看起来很糟糕并且很难压缩。
连接您喜欢的任何 VNC 客户端。
我已经能够通过这种 VNC 连接看电视和玩游戏。您甚至可以同时为多个用户运行多个 vncserver。
这是迄今为止响应速度最快的远程系统。