windows 10 ssh 客户端使用感受

最近越来越忍不了 xshell 的延迟感,于是开始调研 win10 下的 ssh 解决方案。根据我的使用场景,必须符合以下条件: 1.输入流畅 2.支持 X11 转发 3.使用中文输入法不会出现奇怪的问题 4.字符能正常显示 5.能避免和 emacs 快捷键冲突

可以看出我的要求真的不高,但相继调研了多款现有的终端后,尴尬的发现,没有一款达到这些要求。

MobaXterm

很花哨,但致命的问题有两个: 1.X11 转发时灵时不灵 2.输入中文时,输入法候选词显示会跑到屏幕最左上方,似乎是因为光标没有被输入法识别

Xshell

想要使用 x11 必须先手动启动一个 x11 server,这可以接受。但 ssh 后打开 spacemacs 后,只要有很多中文,输入就明显感觉不流畅,光标的移动也会卡。在 emacs 里做一次跳转要等待数秒,日常输入文字时至少有半秒钟的延迟,就像顶着巨大延迟玩游戏一样难受。PC 和 Linux server 之间的网络是千兆局域网,并不存在带宽不够或丢包。有可能是 x11 server 的问题,但 win 10 下能用的 x11 也就那几个。

win 10 集成的 ubuntu bash

自带了 ssh,显示效果很糟,延迟依然存在。

win 10 集成的 ubuntu bash 安装的 xfce4-terminal/tilda/konsole/qterminal

ubuntu bash 里执行 DISPLAY=:0.0 + 启动命令,就能以图形化的方式启动 ubuntu 环境的应用。可惜这样启动的程序,完全不能输入中文。而且 kde/qt 相关的 terminal 执行会出错,可能是环境不完整吧。

putty

中文输入存在问题。

cmder

功能很多,设置项也多,可惜 ssh 之后显示乱成一团。对于 x11 转发的支持情况不明。

win 10 的 spacemacs+tramp

既然那些 ssh 客户端都不靠谱,那么直接安装 gui 的 emacs,再通过 tramp 连接远程又如何呢?理论上 tramp 操作繁琐了一点,却胜在本地 GUI 的 emacs 界面。可惜 tramp 连接时是不支持 ssh private key 认证的,无法用 ssh -i 这种模式,只能在本地建一个类似 ssh-agent 的服务。windows 默认不带这种服务,所以 tramp 还是算了吧。

emacsclinet 的 X11 转发

我习惯使用 emacs daemon+emacsclient 工作,因为单用 spacemacs,很容易忽然挂掉,以前在 OSX 上已经经历过太多次。基于这种思路,我想在服务器上启动 emacs daemon,然后开图形化的 emacsclient,并通过 X11 转到 PC 上,这样能兼顾图形化和 server 端工作。但是从 server 端启动 emacsclient,无法像其他应用一样开启本地的 X11 窗口,而是显示 waiting for emacs 或者直接打开一个字符界面的 emacs,具体原因还不清楚。

zoc

界面简陋,功能极弱,开发者水平比较差或者不怎么上心。

conEmu

默认的配色和界面比其他的好,可惜会出现显示错乱的问题。

powershell

windows 自带的强大工具,虽然能通过 choco 工具安装 ssh,可惜无法支持 x11。

WinSshTerm

忘了是什么问题了,反正肯定不好用。

babun

据说集成了 zsh 等功能,字体配色都还可以,可是选项太少。输入速度很慢,没办法 X11 转发。

总结

综上所述 win10 下的各种 ssh terminal 竟没有一个使用体验过得去的。相比之下,Linux 的各种 terminal 随便挑一个都堪称完美,Mac 上的 iterm 和系统自带的 term 也都比 xshell 流畅太多。甚至 iOS 上的 ssh 工具都比 win10 上的好用很多。也许是因为我的工作模式太小众,对如果不需要中文输入,那么 putty 就完全符合需求。对于用中文输入的国内用户,又有多少人需要从 windows 下 ssh 到 Linux server 并使用 screen + spacemacs + x11 呢?也许大多数人会选择 Visual studio/eclips/sumbline text + 文件同步模块等工作模式。剩下需要 ssh 到 Linux 上的开发者中又有不少是*nix 爱好者,他们会选择 macOS 或 Linux 作为 PC 系统,还有一些人用 vim 开发并且不需要 x11 转发。因此我所经历的这些 bug 是大多数用户碰不到的,更不会引起 ssh 终端的开发者注意。 想要解决这些问题,我想可以 windows 里虚拟一个 Linux,然后直接使用虚拟 Linux 的 terminal。于是尝试用 windows 的 hyper-v 安装最新的 ubuntu,可惜装好以后仍然有明显的延迟感。至于 docker,似乎比如通过 vnc 或 x11 的方式展现图像,等于是多绕了一道。看来只能试一下 vnc 了。