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 настроек:
- В моей системе по умолчанию ssh_config я прошу систему передать эти переменные.
Отправка связанных с локалью переменных среды SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
На моем исходном хосте эти настройки были установлены следующим образом:
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"
Сохранить и выйти, выйти и снова войти.