vnc, vncserver, ssh的locale问题

来源:互联网 发布:真空上街 知乎 编辑:程序博客网 时间:2024/05/18 19:21

今天被服务器端的locale搞死了。


故事是这样的。本来,用Windwos上的git bash,对就是git bash来登录远程ubuntu服务器,配置的VNC server,启动一个gnome的桌面,外加一个gnome-termial。一切都是那么美好啊。然后我用一个Linux系统,ssh到同一台服务器,做了一些工作,然后要reboot。reboot了以后,重新开VNC server发现gnome-terminal起不来。


用gnome自带的xterm试着启动gnome-terminal发现报status 9错误。同时在启动VNC server时perl报了locale错误。于是认为是服务器的locale有问题导致的。于是设定了服务器的LANG和LANGUAGE都为en_US.UTF-8。而且还是尝试了诸如locale-gen,localectl set-locale之类的方法,都不能解决gnome-ternimal启动失败的问题,但是报错信息变成了status 8。

又查了一下,status 8就是代表locale设置有问题,最后列出服务器上的locale,发现locale设定与本机是相同的,于是看到网友说,ssh登录时会默认发送本地的LANG和LC_*到远程计算机。

https://stackoverflow.com/questions/2499794/how-to-fix-a-locale-setting-warning-from-perl

(还是stackoverflow saves my ass......)


于是注释掉了本地/etc/ssh/ssh_config中的SendEnv LANG LC_*


又修改了服务器端的默认locale设置,修改方法比较粗暴,就是改了以下文件

/etc/default/locale

/etc/environment

~/.profile

~/.bashrc


但是之后服务器上的locale变成了

LANG=en_US.UTF-8LANGUAGE=en_US.UTF-8LC_CTYPE="C"LC_NUMERIC="C"LC_TIME="C"LC_COLLATE="C"LC_MONETARY="C"LC_MESSAGES="C"LC_PAPER="C"LC_NAME="C"LC_ADDRESS="C"LC_TELEPHONE="C"LC_MEASUREMENT="C"LC_IDENTIFICATION="C"LC_ALL=C

非常不解,花了好久时间琢磨为什么LC_CTYPE之类的都是"C"。试了好多方法都不行,最后发现是LC_ALL设定为C造成的。将LC_ALL设定为en_US.UTF-8之后,locale变正常了。再启动gnome-terminal就不再报错了。


大半夜了,不写那么细了,因为我真的困了。