vnc, vncserver, ssh的locale问题

今天被服务器端的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-8
LANGUAGE=en_US.UTF-8
LC_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就不再报错了。


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








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值