当我 ssh 连接到 vagrant centos 6 时收到警告 setlocale LC_CTYPE

问题描述 投票:0回答:9

我是一个流浪者的初学者。我尝试使用 vagrant 在我的计算机上创建一个虚拟机(cent os 6)。当我运行 vagrant ssh 时,它会打印此警告:

-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory

当我运行

locale
时,我得到这个:

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

我搜索了一个小时,但仍然无法解决该问题。

linux centos vagrant centos6
9个回答
77
投票

对于 CentOS 或 Amazon AMI Linux,请将这些行添加到

/etc/environment
(如果不存在,则创建它):

LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8

要通过 SSH 控制台编辑此文件,请尝试

sudo nano /etc/environment

编辑

对于 Debian 相关发行版(Ubuntu 等),您应该检查

/etc/default/locale
是否为空。这就是在 dpkg-reconfigure locales 中选择
None
的结果,如果用户通过 SSH 访问,建议使用该选项(请参阅 Debian Wiki)。

/etc/environment
自 Debian Lenny (5.0)已弃用。


8
投票

您可以将

LC_ALL
设置为
C
,例如

export LC_ALL=C

或连接到虚拟机之前的前缀:

LC_ALL=C ssh vagrant@localhost

注意:您还可以考虑为 SSH 配置 (

SetEnv
) 设置
man ssh_config
,如下所述。


要使其永久化,您可以在您的

~/.ssh/config
中添加以下规则:

Host *
  SetEnv LC_ALL=C

假设您的服务器在

/etc/ssh/sshd_config
中收到以下行:

AcceptEnv LANG LC_*

另请检查:

man ssh_config
man sshd_config


7
投票

在 bashrc 的 root 下添加以下内容:

vi /root/.bashrc

export LC_ALL=en_US.UTF-8

export LANG=en_US.UTF-8

然后重新启动系统。


5
投票

这可能是由您的终端设置引起的。

对于 iTerm2,取消选中此设置:

Profiles -> Terminal -> "Set locale variables automatically"
.

上下文:如果您在无法修改区域设置的共享节点上工作,则该警告可能是由您的终端尝试(但失败)更改区域设置引起的。


3
投票

就我而言,在 Slackware64 14.1 上我收到错误:

-bash: warning: setlocale: LC_ALL: cannot change locale (en_DK.UTF-8)

原来是缺少glibc包。

安装软件包:

glibc-2.17-x86_64-11_slack14.1
glibc-i18n-2.17-x86_64-11_slack14.1

问题解决了。

我的/etc/profile.d/lang.sh包含:

export LANG=en_DK.UTF-8
export LANGUAGE=en_DK.UTF-8
export LC_ALL=en_DK.UTF-8

export LC_COLLATE=C

享受吧。


3
投票

我使用的是 macOS。我将以下内容放入我的

~/.ssh/config

Host *
    SetEnv LC_CTYPE=

在我看来,这是改变 ssh 配置的侵入性最小的方法。


1
投票

请尝试下一步:

localedef -i en_US -f UTF-8 en_US.UTF-8

0
投票

对于那些在 MacOS 中遇到此错误的用户: 打开 /etc/ssh/ssh_config 文件(在您喜欢的任何编辑器中,我在示例中使用了 vi 编辑器)

sudo vi /etc/ssh/ssh_config
(enter sudo password)

在此文件中,注释掉以下行:

SendEnv LANG LC_*

(评论时使用#:

#SendEnv LANG LC_*

关闭文件。关闭并重新打开终端并再次尝试 ssh 命令。

要详细了解该问题,您可以查看此技术博客: https://www.cyberciti.biz/faq/os-x-terminal-bash-warning-setlocale-lc_ctype-cannot-change-locale/


0
投票

已解决:我在 Amazon ECS Linux 2 上遇到此错误:

warning: setlocale: LC_CTYPE: cannot change locale (en_US.UTF-8): No such file or directory
warning: setlocale: LC_COLLATE: cannot change locale (en_US.UTF-8): No such file or directory
warning: setlocale: LC_MESSAGES: cannot change locale (en_US.UTF-8): No such file or directory
warning: setlocale: LC_NUMERIC: cannot change locale (en_US.UTF-8): No such file or directory
warning: setlocale: LC_TIME: cannot change locale (en_US.UTF-8): No such file or directory
manpath: can't set the locale; make sure $LC_* and $LANG are correct

在阅读了一堆 Stack Overflow 帖子和文章后,我了解到该问题与缺少区域设置/语言包有关,并按如下所述修复了它。

原因: 我在尝试节省 Cloud9/T3 实例上的空间时一直在删除包。 (看来我删太多了!哎呀。)

解决方案

安装以下软件包:

  • glibc-语言环境-源
  • glibc-langpack-en

然后更新您的本地定义,如下所示:

  1. sudo yum -y install glibc-locale-source glibc-langpack-en
  2. sudo localedef -i en_US -f UTF-8 en_US.UTF-8

感谢https://stackoverflow.com/questions/58304278/how-to-fix-character-map-file-utf-8-not-found

为我工作!希望这对您有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.