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

16

Я только что установил 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=

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

Cem
источник
Ваше решение закомментировать аргумент SendEnv LANG LC_ * работал для меня на Mac OS X 10.7.5

Ответы:

10

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

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

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

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

Якорь,
источник
11
Кстати, я заметил, что это происходит из-за моих настроек Mac OS X Lion ssh. Я отредактировал файл / etc / ssh_config и прокомментировал SendEnv LANG LC_ *. Это решило мою проблему.
Cem
@Cem Спасибо за совет, это действительно исправляет это на Mac OS X Lion.
Жолт Тёрёк
17

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

введите описание изображения здесь

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

Nils
источник
1
Это сработало для меня. В частности, Terminal.app устанавливал «LC_CTYPE = UTF-8», что затем вызывало ошибки, о которых сообщает OP. В качестве альтернативы unset LC_CTYPEили export LC_CTYPE=en_US.UTF-8исправить проблему после входа в систему.
Позднее
Это решило это для меня, thx
pjvds
11

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

добавлять

 LC_CTYPE="en_US.UTF-8"

к /etc/sysconfig/i18n.

gpupo
источник
Это работает для меня, после стольких попыток.
Томми
2

Для меня работало добавление символической ссылки на сервер 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"
gnrfan
источник
Спасибо за вклад! это сработало действительно здорово. Наконец-то удалось удалить этот раздражающий комментарий ...
cristobal
2

У меня есть это конкретное сообщение при входе с 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 для моего пользователя)

Kaalahaan
источник
1

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

BobM
источник
1

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

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

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

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

generate locale

locale-gen
Томас Винсент
источник
1

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

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

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

введите описание изображения здесь

crsuarezf
источник
0

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

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

LANG="en_GB.UTF-8"
SYSFONT="latarcyrheb-sun16"
LC_ALL="en_US.UTF-8" 
mayod
источник
-3

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

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

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

NateDJ
источник