CentOS 6 и ошибка локали

Я только что установил CentOS 6 и всякий раз, когда я удаленно захожу в систему через SSH, я получаю следующую ошибку:

-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8)

Когда я набираю "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=

В чем может быть проблема? Как я могу решить эту проблему?

10 ответов

Решение

На сервере, с которого вы используете ssh, у вас есть языковой стандарт, установленный через переменную окружения? Если посмотреть на мою установку CentOS 6, единственная локаль, которую я могу найти поддерживаемой, определяется как en_US.utf8 (обнаружено с помощью locale -a команда). Может ли это быть проблемой?

В моем тестировании, когда я установил LC_ALL переменная окружения en_US.UTF-8, ssh'd на сервер, вывод моей команды локали был установлен в POSIX в моем случае. Это так же, как когда я НЕ установил (т.е. не установил) LC_ALL переменная до ssh'ing.

Когда я установил свой LC_ALL переменная к en_US.utf8 или же en_US.utf-8, ssh'd для моего блока CentOS 6, вывод локали был таким же, как был установлен на поле источника.

Обратите внимание, что я не использовал заглавные буквы для UTF также.

Решил эту проблему, отключив "Задать переменные среды локали при запуске" в "Настройки терминала"> "Дополнительно" согласно этому снимку экрана.

введите описание здесь

ПРИМЕЧАНИЕ. Если вы используете iTerm2, вы можете отключить опцию "Автоматически устанавливать переменные локали" в "Предпочтения"> "Профили"> "Терминал".

Простой способ:

добавлять

 LC_CTYPE="en_US.UTF-8"

в /etc/sysconfig/i18n,

Для меня работало добавление символической ссылки на сервер CentOS, например:

ln -s /usr/lib/locale/en_US.utf8 /usr/lib/locale/UTF-8

Как только вы сделаете это, команды, подобные этой:

export LC_CTYPE=UTF-8

Если вы этого не сделаете, эта последняя команда завершится с ошибкой:

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

Теперь, еще более простым решением является просто добавление этой строки в /etc/bashrc на сервере:

export LC_CTYPE="en_US.utf8"

У меня есть это конкретное сообщение при входе с Solaris X на хост Centos.

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

Проблема исходит из 2 настроек:

  1. В моей системе по умолчанию ssh_config я прошу систему передать эти переменные.

Отправка связанных с локалью переменных среды SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES

  1. На моем исходном хосте эти настройки были установлены следующим образом:

    SOURCE # LANG = LC_CTYPE = fr_FR.UTF-8 LC_NUMERIC = fr_FR.UTF-8 LC_TIME = fr_FR.UTF-8 LC_COLLATE = fr_FR.UTF-8 LC_MONETARY = fr_FR.UTF-8 LC_MESSAGES = fr.UTF-8

Но, как вы можете видеть, LC_MESSAGES имеет значение fr.UTF-8, что не является опцией на моем хосте назначения.

 DEST#locale -a | grep fr_FR
 fr_FR
 fr_FR@euro
 fr_FR.iso88591
 fr_FR.iso885915@euro
 fr_FR.utf8

Проблема была решена принудительно на моем исходном хосте, на.bash_profile: # export LC_ALL=fr_FR.UTF-8 export LANG=fr_FR.UTF-8

Я мог бы решить эту проблему, попросив мой хост dest не брать эту переменную из любого соединения ssh (как правило, или создав файл локали ssh_config для моего пользователя)

Это было мое исправление в прошлом для ошибок локали.

Запустите следующее: locale-gen

Затем отредактируйте /etc/locale.gen. Убедитесь, что следующее не прокомментировано:

en_US.UTF-8 UTF-8  
en_US ISO-8859-1  

generate locale

locale-gen

В локальной системе Centos 6.2: Это не помогло:

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

Это сработало:

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

Я тоже удалил locale-archive в /usr/lib/locale, Я не знаю, было ли это необходимо.

С Iterm2 все по-другому.
Идти к Iterm2 -> Preferences Затем перейдите к Profiles и выберите Terminal вкладка снизу.
Идти к Environment категория и снять отметку;

Установите переменные локали автоматически

Наконец, закройте и начните новый сеанс.

И убедитесь, LC_ALL="en_US.UTF-8" находится или добавлен в /etc/sysconifg/i18n

пример содержания

LANG="en_GB.UTF-8"
SYSFONT="latarcyrheb-sun16"
LC_ALL="en_US.UTF-8" 

На моем CentOS 8 (минимальная установка сервера) я успешно установил такие переменные локали.

Или

echo 'LANG="en_US.UTF-8"' > /etc/locale.conf

ИЛИ ЖЕ

echo 'LC_ALL="en_US.utf8"' > /etc/locale.conf

Relogon и позвонить locale для проверки результата.

Редактировать /etc/sysconfig/i18n

+ Изменить LANG="us" в LANG="en_US"

Сохранить и выйти, выйти и снова войти.

Другие вопросы по тегам