最近将 macOS 的语言切换到英文后,再远程登录到开发机发现远程机器的中文显示变成了乱码,记录一下如何解决这种问题。
- 记得我的 ssh 配置是允许发送一些环境变量的,这样可以让远程环境的一些操作跟本地机器一致,赶紧查看一下
/etc/ssh/ssh_config
文件中的配置,果不其然,其中有SendEnv LANG LC_*
这就意味着,我本机的语言配置会同步给到远端机器。 - 随即执行
env |grep LC_
可以看到,LC_CTYPE=UTF-8
,但是我们查询一下,在标准 Linux 发行版中,是没有 UTF-8 的。 - 怎么办呢?这个
LC_CTYPE
是由谁注入进来的呢?Google 一下我们找到了答案,原来是 iTerm2 和 自带的 Terminal 都勾选了自动设置语言的配置,同时因为我的远程机器都是 Linux 系统。而且好巧不巧,远程开发机设置的语言是中文,这样我本地机器和远端机器环境语言其实是不一致的,这时候我们再同步这个配置,就不那么合理了。
所以我们有两个办法来解决这个问题。
1. 注释掉 ssh 配置
修改 /etc/ssh/ssh_config
或者 ~/.ssh/config
文件,然后重新连接即可:
Host *
#SendEnv LANG LC_*