Ubuntu

Summary: Author: 张亚飞 | 阅读时间: 1 minute read | Published: 2016-07-17
Filed under Categories: MarkDownTags: 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 客户端登录正常.


Comments

  • 牧马人 says: 2019-09-10 20:05:13

    江山代有才人出,各领风骚数百年.

Cor-Ethan, the beverage → www.iirii.com