Windows 环境下 ssh Linux server 的 emacs 环境解决方案

这标题看起来有点绕,但只有这样才能描述我所遇到的问题。 简而言之,我每天需要 ssh 到 Linux 的工作站上 and 我的 PC 是 windows 10 系统 and 我需要用 emacs 编辑 Linux 工作站上的文件。 满足以上三点有数种解决方案,列举一下:

  • 在 linux 上配置 emacs,不开图形界面,用终端的字符模式
  • 在 window 上配置 emacs,用 tramp 连接 linux
  • 在 linux 上配置 vnc,在 windows 下连接,使用图形化 emacs
  • 在 linux 上配置 emacs,用 ssh 转发 X11 的方式使用图形 emacs

以上 4 种方案里,第一种是我之前一直在用的,然而 windows 下没有好用的 ssh terminal,我比较了十几种 terminal,唯一能用的是 xshell,但有一个严重的问题,就是在 xshell 中使用 emacs 有明显卡顿感,就像 60Hz 的显示器降到了 30Hz 一样,虽说也能用,但始终是饭里的一粒砂,日积月累之下对工作效率产生的消极影响不可忽视。我非常怀念以前在 Mac 上配置的图形化 spacemacs,体验非常流畅,除了时不时会崩溃,秒杀终端文字版的 emacs。所以我想到第二个办法,在 windows 上重新搞一个图形化 emacs,然后用 tramp 远程编辑,尽管麻烦了一点,相信熟悉之后还是可以适应的。然而我试了多次,用 tramp 始终无法连接。如果是最基本的密码连接 ssh,且保持默认端口不变,相信 tramp 是可以连接上的。但我的工作站已经改了端口,并且用 key 加密,普通的方法自然不奏效。我找到了一种在 emacs 中调用 putty 的 key 工具的连接方法,仍然没有成功。所以在 windows 下折腾 emacs 的计划泡汤了。接下来,我把焦点继续放在 linux 工作站上,我还是希望用工作站上的 emacs。X11,vnc 是两种常见的图形化访问方法。以前试过 X11,倒是能把图形界面转发过来,不过 X11 的古怪窗口/字体/键位统统不对了。要想正常的用,恐怕又要来一大通配置。所以我在 linux 上配置了 vnc 服务,这里小有波折,因为单纯 vnc 不够,需要一套图形环境。可我的工作站一直都没有图形环境,所以需要先折腾一番。我安装/调试/配置好了 awesome,解决了 awesome 的启动问题,解决了 awesome 里调用 xfce-terminal 报 hardware error 的问题,解决了网上的 awesome 配置文件里面各种不兼容的问题,之后总算能在 vnc 里看到图形桌面了。我启动一个 terminal,在 terminal 里开启了图形 emacs,反应速度比 xshell 强了不少。这里要赞扬一下 vnc 的设置,新开启的 emacs 默认建立一个新的窗口,而不是集成在桌面环境窗口之中。可问题还没完,首先,我无法用 windows 的输入法输入中文;其次 emacs 显示的字体非常糟糕,中文都是方块;还有就是这样启动的 emacs,无法利用工作站里的 screen 保存会话,一旦忘了保存,有丢失数据的可能。而要解决这些问题,我还是要通过 X11 转发。我先重新调整了 emacs 的设置和编译选项,解决了显示字体的问题。然后在 linux 工作站上安装了 scim 输入法,使得 emacs 能输入中文。经过一番折腾,X11 转发图形化 emacs 终于可以用了,流畅度让人十分满意,虽不及本地图形程序,但比 vnc 更流畅。最重要的 benefit 是我可以直接在 ssh 之后从 screen 里开 emacsclient,并通过 X11 转发过来,这样相当于用了远程的 emacs 服务,本地跑一个 emacs 图形界面,有效的发挥了 screen 的优势。 经过以上设置,我的办公环境向前迈进了一大步。在我这种特定的工作场景下,我已经想不出更好的模式了,说是最佳实践也不为过。