qiuxiang / qiuxiang

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

chromeos terminal 中文输入、显示问题的另一种解决方案:ttyd

qiuxiang opened this issue · comments

commented

我之前有一篇文章介绍过使用 kitty + fcitx 解决 chromeos terminal 中文输入、显示问题:chromeos 使用 linux terminal 代替默认的 terminal 并解决中文输入问题

最近发现一个可能更优的解决方案:ttyd。

chromeos terminal 的根本问题在于其核心 hterm 对非 ascii 字符处理不上心,且看不到改进的意愿。而其竞品 xtermjs 不仅没有这些糟心的问题,因为支持 webgl 渲染性能也更好,作为 vscode terminal 的实现,xtermjs 的可用性更好。

那么如何用 xtermjs 作为 chromeos 的 terminal 呢?一个简单易用的解决方案是 linux 里起一个 http server 提供 terminal 页面,通信用 websocket。xtermjs 因其繁荣的生态,类似现成的解决方案非常多,这里主要介绍 ttyd。

ttyd 可以直接用 apt 安装,但需要添加 backports 源,比如:

deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free

然后就可以 apt install ttyd 安装。安装完后 ttyd 会以 servcie 运行,可以用 service ttyd start/restart/stop 管理。ttyd 默认运行在 :7681,在浏览器里用 http://127.0.0.1:7681/ 访问即可。

Screenshot 2023-02-24 10 33 33

因为是运行在浏览器,可以直接用 chromeos 的输入法。而体验上,和 kitty 没有什么区别。相比默认 terminal,xtermjs 有更多可定制参数,具体可以参考 https://github.com/tsl0922/ttyd/wiki/Client-Options

需要注意的是,直接运行在浏览器里 ctrl-w 会触发页面关闭,如果要在 ttyd 里用 vim,就很烦,解决方法很简单,只要以 popup window 打开 ctrl-w 就可以被忽略。我这里用的是 Open-as-Popup - Chrome Web Store

ttyd 还有一个好处是可以任意设备任意网络访问,也就顺便提供了远程登录功能,而且不需要额外的客户端。