Nie można trwale zmienić ustawień regionalnych na serwerze 16.04


9

Zainstalowałem nowy serwer Ubuntu 16.04, ale kiedy próbuję trwale zmienić ustawienia regionalne, nie udaje się i powraca do ustawień narodowych POSIX.

Wpisanie localedaje następujące wyniki:

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=

Według mojej wiedzy oznacza to, że nie ustawiono żadnych ustawień narodowych, ponieważ w dokumentacji stwierdzono, że POSIX to „ rezerwowe kodowanie ASCII, tak jak C ”.

Aby zapewnić ustawienia regionalne de_AT.utf8i en_US.utf8były obecne w moim systemie, uruchomiłem locale -a, co dało:

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

Zwróć uwagę na niespójności C.UTF-8, ale de_AT.utf8! Martwi mnie ponadto to, że POSIX jest trzecim wpisem, podczas gdy w innym działającym systemie jest ostatnim z listy.

Aby zmienić język na en_US.utf8, wpisałem sudo update-locale LANG=en_US.utf8. localeKomenda nadal pokazał POSIX locale. Po wylogowaniu i nowym logowaniu localenadal wyświetlał ustawienia regionalne POSIX. Po ponownym uruchomieniu localenadal wyświetlał ustawienia narodowe POSIX.

Jednak kiedy piszę export LANG=en_US.utf8, działa tymczasowo, ale tylko do momentu wylogowania. Jako taki jestem pewien, że ustawienia narodowe zostały poprawnie wygenerowane.

Nie mam pomysłów. Próbowałem zregenerować wszystkie ustawienia narodowe, ale wygląda na /etc/default/localeto, że po prostu są ignorowane.

Ze względu na zakończenie /etc/default/localezawiera tylko wierszLANG=en_US.utf8

AKTUALIZACJA: // Próbowałem uruchomić sudo localectl set-locale LANG=en_US.UTF-8, a localectltakże pokazałem, że ustawił ustawienia regionalne, ale nawet po ponownym uruchomieniu localenadal wyświetla znaki POSIX i znaki spoza ASCII nadal nie są poprawnie renderowane.


1
/etc/default/localejest czytany przez PAM. Czy prawdopodobnie wyłączyłeś PAM?
— Gunnar Hjalmarsson

Próbowałeś systemdsposobu localectl set-locale LANG=C.UTF-8:?
— EdiD,

@GunnarHjalmarsson Nie, żebym był tego świadomy. Jak mogę to sprawdzić?
— MechMK1

@EdiD Próbowałem, uruchomiłem ponownie, ale bez zmian
— MechMK1

Niepewny. PAM powinien być włączony przy nowej instalacji, a jeśli niczego nie zmieniłeś /etc/pam.d, powinien działać. Ale jako hack na razie możesz utworzyć /etc/profile.d/mylocalesetting.shi dodać linię export LANG=en_US.UTF-8.
— Gunnar Hjalmarsson

Odpowiedzi:


10

Ostatecznie zrobiłem połączenie powyższych technik

Po raz pierwszy zrobiłem

dpkg-reconfigure locales

i wybrałem angielski, utf8, a następnie:

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

Edytowano także / etc / default / locale, aby wyglądać następująco:

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

A po ponownym uruchomieniu po wpisaniu ustawień regionalnych wygląda to tak:

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

I więcej ostrzeżeń ...


8

Odpowiedź rzeczywiście była związana z PAM, jak wspomniał Gunnar Hjalmarsson w komentarzu. PAM został wyłączony przez sshd_config, chociaż szczerze mówiąc nie pamiętam, aby sam to robiłem.

Podsumowując: Jeśli /etc/default/localewydaje się być ignorowany, sprawdź, czy PAM jest włączony.


6

Uruchom następujące polecenia:

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

Nie działało localewciąż pokazuje POSIX dla wszystkiego
— MechMK1

Zakładam, że jesteś rootem do uruchamiania tych poleceń? Nie próbuję obrażać, chcę tylko mieć pewność.
— Videonauth,

Tak, oczywiście. Nie było żadnych komunikatów o błędach ani nic podobnego.
— MechMK1

1
Miałeś na myśli locale?
— realtebo

Robię to i wydaje się, że są to „dpkg-rekonfiguruj ustawienia regionalne”, wtedy wszystko będzie działać.
— Hugo,

0

Podczas wdrażania niektórych nowych maszyn wirtualnych 16.04.5 napotkałem dokładnie ten problem, ale xrdpzamiast SSH. Rozwiązałem ten problem, dodając następujące elementy /etc/pam.d/common-session:

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

Jeśli jesteś wrażliwy na dodatkowe języki i kultury różnych metod logowania, możesz /etc/pam.d/xrdp-sesmanzamiast tego umieścić to (lub inny plik konfiguracyjny PAM). Może dlatego nie ma go domyślnie? Jest to domyślnie w następujących konfiguracjach PAM w naszych nowych instalacjach maszyn wirtualnych:

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

Mam nadzieję, że pomoże to komuś z tym problemem, biorąc pod uwagę metody logowania inne niż SSH.

Czy ktoś zna najlepsze praktyki dotyczące konfiguracji / modyfikacji PAM common- *? Jeśli istnieje lepszy sposób, aby to osiągnąć, dobrze byłoby zejść na dół.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.