Ubuntu
Summary: Author: 张亚飞 | Read Time: 1 minute read | Published: 2016-07-17
Filed under
—
Categories:
MarkDown
—
Tags:
Tag,
Linux Locale 字符集设置
MacOS: locale
在
Mac OS X
工作桌面上,ssh登陆到 ubuntu 系统中,发现每次都警告:
sh: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
- 理解系统
LC_*
环境变量
在远程服务器上执行下述命令来显示所有
Glibc
所支持的locales
locale -a
然后在本地的Mac主机上执行显示本地环境的命令
printenv
echo "$LC_ALL"
可以看到输出显示是
en_US.UTF-8
以上命令会显示本地系统的国家和语言名字,以及
locale
使用的字符集.本地ssh
客户端将发送LC_*
环境变量给远程的sshd
服务器.也就是说SSH
将尝试在远程服务器上设置和本地OSX
系统一样的LC_*
环境变量. 这就导致了ssh
登陆远程Linux
服务器出现告警:
sh: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
- 查看远程服务器
ubuntu
字符集设置
root@us-gitlab:/opt/data# locale
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:zh
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=zh_CN.UTF-8
- 在远程服务器上安装要求的
locale
可以使用
localedef
命令安装需要的locale
,或者考虑在本地/远程系统中选择另外的locale
localedef -i en_US -f UTF-8 en_US.UTF-8
root@us-gitlab:/opt/data# locale -a
C
C.UTF-8
POSIX
zh_CN.utf8
root@us-gitlab:/opt/data# localedef -i en_US -f UTF-8 en_US.UTF-8
root@us-gitlab:/opt/data# locale -a
C
C.UTF-8
en_US.utf8
POSIX
zh_CN.utf8
可以看到,已成功添加字符集
en_US.utf8
,再次从本机通过ssh
客户端登录正常.
在Mac上使用 iTerm2 登录CentOS服务器,提示
/etc/profile.d/lang.sh: line 19: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
使用系统自带的Terminal登录没有问题
原因
Mac下设置为英文后,locale字符集默认是”C”,Terminal或者iTerm2中有选项会自动设置LC_CTYPE或者LC_LANG为UTF-8
解决办法
打开ssh配置文件,sudo vim /etc/ssh/ssh_config, 注释掉如下几行
Host *
SendEnv LANG LC_*
重新使用 ssh 登录即可
Comments