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

Я установил новый сервер 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, он работает временно, но только до выхода из системы. Таким образом, я почти уверен, что локали были сгенерированы правильно.

1129 У меня нет идей. Я попытался восстановить все локали, но похоже, что /etc/default/locale просто игнорируется.

Ради завершения, /etc/default/locale содержит только строку LANG=en_US.utf8

ОБНОВЛЕНИЕ: // Я попытался запустить sudo localectl set-locale LANG=en_US.UTF-8, и localectl также показал мне, что он устанавливает локаль, но даже после перезагрузки locale по-прежнему показывает POSIX, а символы, не входящие в ASCII, по-прежнему отображаются неправильно.

9
задан 10 May 2016 в 20:08

4 ответа

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

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
0
ответ дан 11 May 2016 в 06:08
  • 1
    Это может быть то, потому что Вы используете Уэйленд. Я не использую Уэйленд, я использую x11, и я получаю подсказку для пароля независимо от того, как я выполняю gdebi с ответом, который я предоставил. – eyes0nfleek 21 November 2017 в 16:37

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

Для суммирования: Если /etc/default/locale кажется быть проигнорированным, проверьте, включен ли PAM.

0
ответ дан 11 May 2016 в 06:08
  • 1
    Корректный... это делает при выполнении Gdebi на it' s собственный, но не, когда Вы нажимаете на файл Deb отдельно для автоматической загрузки Gdebi. Тогда это doesn' t запрашивают пароль, и поэтому doesn' t загружаются со связанным файлом. Для этого Вам нужна вторая команда, правильно? По крайней мере, that' s путь это работает на меня. – coolhandlewk 6 November 2017 в 02:30

То, что я в конечном счете сделал, является комбинацией вышеупомянутых методов

, я сначала сделал

dpkg-reconfigure locales

и chosed английский язык, 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

И после перезагрузки, когда я локаль типа это теперь похоже на это:

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

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

0
ответ дан 11 May 2016 в 06:08

В развертывании некоторых новых 16.04.5 VMs я столкнулся с этой точной проблемой, но с 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 по умолчанию на наших новых установках VM:

крон, lightdm*, вход в систему, polkit-1, sshd, su, и sudo.

Hope это помогает кому-то с этой проблемой, данной методы входа в систему кроме SSH.

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

0
ответ дан 17 April 2019 в 03:55

Другие вопросы по тегам:

Похожие вопросы: