最近遇到了 webshell 不显示中文的问题。排查了很久,最终解决了,这里记录下。

我的这个场景比较特别,是 webshell 连接的群晖,然后里面开了 tmux,默认 shell 是 bash,我是手动切到了 fish 里操作的。套了很多层,以后这种问题应该一层层检查,而不是盲目尝试。

SSH 的 client 和 server

最简单的模式是 client 直接 ssh 连上 server。这里要配置的就是 LC_ALL 和 LANG 两个环境变量。

首先 locale -a 查看支持的本地语言,一般会出现类似 zh_CN.utf8 这样的内容。带 utf8 的都是可以支持中文的,前面的 zh_CN 表示系统使用的本地化语言。

如果是要支持中文的话配置

export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8

这几个环境变量的优先级是 LC_ALL > LC_* > LANG。

如果 locale 后看到没有对自己语言的支持,可以用

sudo locale-gen zh_CN.UTF-8
sudo update-locale LANG=zh_CN.UTF-8

安装语言。

环境变量改好后重新开一个 shell 试试。

tmux

我这次的问题在于 tmux,改好环境变量后,直接使用可以显示中文了,但是进入到 tmux 里又不可以了。

最后找到一篇文章试了下用 tmux -u new -s <session-name> 创建新的 session 就可以了。

理论上 tmux 特别老的版本才需要这个参数,不知道这里的原因。

另外在开启 tmux session 前配置要环境变量才能使 session 里面的所有会话有效。