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 locale
daje 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.utf8
i en_US.utf8
był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
. locale
Komenda nadal pokazał POSIX locale. Po wylogowaniu i nowym logowaniu locale
nadal wyświetlał ustawienia regionalne POSIX. Po ponownym uruchomieniu locale
nadal 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/locale
to, że po prostu są ignorowane.
Ze względu na zakończenie /etc/default/locale
zawiera tylko wierszLANG=en_US.utf8
AKTUALIZACJA: // Próbowałem uruchomić sudo localectl set-locale LANG=en_US.UTF-8
, a localectl
także pokazałem, że ustawił ustawienia regionalne, ale nawet po ponownym uruchomieniu locale
nadal wyświetla znaki POSIX i znaki spoza ASCII nadal nie są poprawnie renderowane.
/etc/default/locale
jest czytany przez PAM. Czy prawdopodobnie wyłączyłeś PAM?systemd
sposobulocalectl set-locale LANG=C.UTF-8
:?/etc/pam.d
, powinien działać. Ale jako hack na razie możesz utworzyć/etc/profile.d/mylocalesetting.sh
i dodać linięexport LANG=en_US.UTF-8
.Odpowiedzi:
Ostatecznie zrobiłem połączenie powyższych technik
Po raz pierwszy zrobiłem
i wybrałem angielski, utf8, a następnie:
Edytowano także / etc / default / locale, aby wyglądać następująco:
A po ponownym uruchomieniu po wpisaniu ustawień regionalnych wygląda to tak:
I więcej ostrzeżeń ...
źródło
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/locale
wydaje się być ignorowany, sprawdź, czy PAM jest włączony.źródło
Uruchom następujące polecenia:
źródło
locale
wciąż pokazuje POSIX dla wszystkiegoPodczas wdrażania niektórych nowych maszyn wirtualnych 16.04.5 napotkałem dokładnie ten problem, ale
xrdp
zamiast SSH. Rozwiązałem ten problem, dodając następujące elementy/etc/pam.d/common-session
:Jeśli jesteś wrażliwy na dodatkowe języki i kultury różnych metod logowania, możesz
/etc/pam.d/xrdp-sesman
zamiast 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ół.
źródło