Неможливо остаточно змінити локаль на сервері 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, все ще не відображаються правильно.


1
/etc/default/localeчитається PAM. Ви, можливо, відключили PAM?
Gunnar Hjalmarsson

Ви спробували systemdспосіб localectl set-locale LANG=C.UTF-8:?
ЕдіД

@GunnarHjalmarsson Не те, про що я б знав. Як я можу перевірити?
MechMK1

@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 було відключено через sshd_config, хоча я, чесно кажучи, не пам’ятаю, як робив це сам.

Підводячи підсумок: Якщо /etc/default/localeздається, що вона ігнорується, перевірте, чи ввімкнено PAM.


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

Не працювало. localeвсе ще показує POSIX для всього
MechMK1

Я припускаю, що ви запустили ці команди? Я не намагаюся образити, просто хочу бути впевненим.
Videonauth

Так, звичайно. Не було повідомлень про помилки чи нічого подібного.
MechMK1

1
ти мав на увазі локалі?
realtebo

Я роблю це, і, здається, "dpkg-переконфігуруйте локалі", тоді все буде працювати.
Гюго

0

Розгортаючи нові 16.04.5 VM, я зіткнувся з цією точною проблемою, але 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:

cron, lightdm *, логін, polkit-1, sshd, su та sudo.

Сподіваюся, це допомагає комусь із цією проблемою, використовуючи інші методи входу, ніж SSH.

Хтось знає кращі практики конфігурації / модифікації PAM для загальних *? Якщо є кращий спосіб досягти цього, було б добре знизити це.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.