Я установил новый сервер Ubuntu 16.04, но когда я пытаюсь навсегда изменить настройки локали, он не работает и возвращается к локали POSIX.
Ввод locale
дает следующее:
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
Насколько мне известно, это означает, что ни одна локаль не была установлена вообще, так как в документации говорится, что POSIX является « резервной, ASCII-кодировкой, такой же, как C ».
Чтобы убедиться, что локали de_AT.utf8
и en_US.utf8
присутствуют в моей системе, я побежал locale -a
, что привело к:
C
C.UTF-8
POSIX
de_AT.utf8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
Обратите внимание на несоответствия C.UTF-8
, но de_AT.utf8
! Что меня еще больше беспокоит, так это то, что POSIX - третья запись, а в другой работающей системе - последняя в списке.
Чтобы изменить свой язык на en_US.utf8
, я набрал sudo update-locale LANG=en_US.utf8
. Команда locale
все еще показала локаль POSIX. После выхода из системы и нового входа в систему по- locale
прежнему отображается языковой стандарт POSIX. После перезагрузки locale
все равно показал локаль POSIX.
Однако, когда я печатаю export LANG=en_US.utf8
, он работает временно, но только до выхода из системы. Таким образом, я почти уверен, что локали были созданы правильно.
У меня нет идей. Я попытался восстановить все локали, но похоже, что /etc/default/locale
это просто игнорируют.
Для завершения, /etc/default/locale
содержит только строкуLANG=en_US.utf8
ОБНОВЛЕНИЕ: // Я попытался запустить sudo localectl set-locale LANG=en_US.UTF-8
и localectl
также показал мне, что он установил языковой стандарт, но даже после перезагрузки locale
все еще показывает, что символы POSIX и не-ASCII по-прежнему отображаются неправильно.
/etc/default/locale
читается PAM. Возможно, вы отключили PAM?systemd
способlocalectl set-locale LANG=C.UTF-8
:?/etc/pam.d
, он должен работать. Но в качестве хака на данный момент вы можете создать/etc/profile.d/mylocalesetting.sh
и добавить строкуexport LANG=en_US.UTF-8
.Ответы:
То, что я в конечном итоге сделал, это сочетание вышеперечисленных методов
Я сначала сделал
и выбрал английский, utf8, затем:
Также отредактировал / etc / default / locale, чтобы он выглядел так:
И после перезагрузки, когда я набираю locale, теперь это выглядит так:
И больше никаких предупреждений ...
источник
Ответ действительно был связан с PAM, как отметил Гуннар Хьялмарссон в комментарии. PAM был отключен через систему
sshd_config
, хотя я, честно говоря, не помню, чтобы делал это сам.Подводя итог: если
/etc/default/locale
кажется, что игнорируется, проверьте, включен ли PAM.источник
Запустите следующие команды:
источник
locale
до сих пор показывает POSIX для всегоПри развертывании некоторых новых виртуальных машин 16.04.5 я столкнулся с этой проблемой, но
xrdp
вместо SSH. Я решил это, добавив следующее/etc/pam.d/common-session
:Если вы чувствительны к дополнительным языкам и культурам в разных методах входа, вы можете
/etc/pam.d/xrdp-sesman
вместо этого указать это (или другой файл конфигурации PAM). Это может быть, почему он не существует по умолчанию? Это в следующих конфигурациях PAM по умолчанию на наших новых установках виртуальных машин:cron, lightdm *, login, polkit-1, sshd, su и sudo.
Надеюсь, что это поможет кому-то с этой проблемой, учитывая методы входа в систему, кроме SSH.
Кто-нибудь знает лучшие практики для конфигурации PAM / модификации common- *? Если есть лучший способ добиться этого, было бы хорошо, если бы это было сделано.
источник