Невозможно навсегда изменить язык на сервере 16.04

9

Я установил новый сервер 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 по-прежнему отображаются неправильно.

MechMK1
источник
1
/etc/default/localeчитается PAM. Возможно, вы отключили PAM?
Гуннар Хьялмарссон
Вы пробовали systemdспособ localectl set-locale LANG=C.UTF-8:?
EdiD
@GunnarHjalmarsson Не то, чтобы я знал. Как я могу проверить?
МечМК1
@EdiD Я пытался, перезагрузился, но без изменений
MechMK1
Точно сказать не могу. PAM должен быть включен при новой установке, и если вы ничего не изменили /etc/pam.d, он должен работать. Но в качестве хака на данный момент вы можете создать /etc/profile.d/mylocalesetting.shи добавить строку export LANG=en_US.UTF-8.
Гуннар Хьялмарссон

Ответы:

10

То, что я в конечном итоге сделал, это сочетание вышеперечисленных методов

Я сначала сделал

dpkg-reconfigure locales

и выбрал английский, utf8, затем:

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

Также отредактировал / etc / default / locale, чтобы он выглядел так:

LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
LANGUAGE=en_US.UTF-8

И после перезагрузки, когда я набираю locale, теперь это выглядит так:

LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.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=en_US.UTF-8

И больше никаких предупреждений ...

Александар Павич
источник
8

Ответ действительно был связан с PAM, как отметил Гуннар Хьялмарссон в комментарии. PAM был отключен через систему sshd_config, хотя я, честно говоря, не помню, чтобы делал это сам.

Подводя итог: если /etc/default/localeкажется, что игнорируется, проверьте, включен ли PAM.

MechMK1
источник
6

Запустите следующие команды:

locale-gen en_US.UTF-8
dpkg-reconfigure locale
dpkg-reconfigure keyboard-configuration
localedef -i en_US -c -f UTF-8 en_US.UTF-8
reboot
locale
Videonauth
источник
Не сработало localeдо сих пор показывает POSIX для всего
MechMK1
Я полагаю, вы были пользователем root для запуска этих команд? Я не пытаюсь обидеть, просто хочу быть уверен.
Видеонавт
Да, конечно. Там не было сообщений об ошибках или чего-то подобного.
МечМК1
1
ты имел ввиду локали?
Realtebo
Я делаю это, и, похоже, "dpkg-переконфигурировать локали", то все будет работать.
Хьюго
0

При развертывании некоторых новых виртуальных машин 16.04.5 я столкнулся с этой проблемой, но xrdpвместо SSH. Я решил это, добавив следующее /etc/pam.d/common-session:

session required        pam_env.so readenv=1 user_readenv=1 envfile=/etc/default/locale

Если вы чувствительны к дополнительным языкам и культурам в разных методах входа, вы можете /etc/pam.d/xrdp-sesmanвместо этого указать это (или другой файл конфигурации PAM). Это может быть, почему он не существует по умолчанию? Это в следующих конфигурациях PAM по умолчанию на наших новых установках виртуальных машин:

cron, lightdm *, login, polkit-1, sshd, su и sudo.

Надеюсь, что это поможет кому-то с этой проблемой, учитывая методы входа в систему, кроме SSH.

Кто-нибудь знает лучшие практики для конфигурации PAM / модификации common- *? Если есть лучший способ добиться этого, было бы хорошо, если бы это было сделано.

jhyry-gcpud
источник