Назад | Перейти на главную страницу

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=

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

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

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

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

Добавить

 LC_CTYPE="en_US.UTF-8"

к /etc/sysconfig/i18n.

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

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

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

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

Для меня сработало добавление символической ссылки на сервер 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. На моем исходном хосте эти настройки были установлены следующим образом:

    ИСТОЧНИК # 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

Но, как вы можете видеть, для параметра 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

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

В локальной системе 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. Не знаю, было ли это необходимо.

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

Выполните следующее: locale-gen

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

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

generate locale

locale-gen

С участием 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" 

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

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

Сохраните и выйдите, выйдите из системы и снова войдите.