Das Gebietsschema auf dem 16.04-Server kann nicht dauerhaft geändert werden

9

Ich habe einen neuen Ubuntu 16.04-Server eingerichtet, aber wenn ich versuche, die Gebietsschemaeinstellungen dauerhaft zu ändern, schlägt dies fehl und kehrt zum POSIX-Gebietsschema zurück.

Die Eingabe localeergibt Folgendes:

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=

Meines Wissens bedeutet dies, dass überhaupt kein Gebietsschema festgelegt wurde, da in der Dokumentation angegeben ist , dass POSIX die " Fallback-ASCII-Codierung wie C " ist.

Um die Gegenden zu gewährleisten de_AT.utf8und en_US.utf8auf meinem System vorhanden waren, lief ich locale -a, was ergab:

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

Bitte beachten Sie die Inkonsistenzen mit C.UTF-8, aber de_AT.utf8! Was mich weiter beunruhigt, ist, dass POSIX der dritte Eintrag ist, während es auf einem anderen funktionierenden System der letzte auf der Liste ist.

Um meine Sprache zu ändern en_US.utf8, habe ich getippt sudo update-locale LANG=en_US.utf8. Der localeBefehl zeigte weiterhin das POSIX-Gebietsschema an. Nach einer Abmeldung und einer neuen Anmeldung wurde localeweiterhin das POSIX-Gebietsschema angezeigt. Nach einem Neustart wurde localeimmer noch das POSIX-Gebietsschema angezeigt.

Wenn ich tippe export LANG=en_US.utf8, funktioniert es jedoch vorübergehend, jedoch nur bis zur Abmeldung. Daher bin ich mir ziemlich sicher, dass die Gebietsschemas korrekt generiert wurden.

Ich habe keine Ideen mehr. Ich habe versucht, alle Gebietsschemas neu zu generieren, aber es sieht so aus, als würde /etc/default/localees einfach ignoriert.

/etc/default/localeEnthält der Vollständigkeit halber nur die ZeileLANG=en_US.utf8

UPDATE: // Ich habe versucht, es auszuführen sudo localectl set-locale LANG=en_US.UTF-8, und localectlmir auch gezeigt, dass es das Gebietsschema festlegt, aber auch nach einem Neustart werden localeimmer noch POSIX- und Nicht-ASCII-Zeichen angezeigt, die immer noch nicht korrekt gerendert werden.

MechMK1
quelle
1
/etc/default/localewird von PAM gelesen. Haben Sie möglicherweise PAM deaktiviert?
Gunnar Hjalmarsson
Hast du es versucht systemd: localectl set-locale LANG=C.UTF-8?
EdiD
@ GunnarHjalmarsson Nicht, dass ich es wüsste. Wie kann ich überprüfen?
MechMK1
@ Eddi Ich habe versucht, neu gestartet, aber keine Änderung
MechMK1
Nicht sicher. PAM sollte bei einer Neuinstallation aktiviert sein. Wenn Sie nichts geändert haben /etc/pam.d, sollte es funktionieren. Aber als Hack für den Moment möchten Sie vielleicht /etc/profile.d/mylocalesetting.shdie Linie erstellen und hinzufügen export LANG=en_US.UTF-8.
Gunnar Hjalmarsson

Antworten:

10

Was ich schließlich getan habe, ist eine Kombination der oben genannten Techniken

Ich habe es zuerst getan

dpkg-reconfigure locales

und wählte Englisch, utf8, dann:

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

Außerdem wurde / etc / default / locale so bearbeitet , dass es so aussieht:

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

Und nach dem Neustart sieht es jetzt so aus , wenn ich das Gebietsschema eingebe :

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

Und keine Warnungen mehr ...

Aleksandar Pavić
quelle
8

Die Antwort war in der Tat PAM-bezogen, wie Gunnar Hjalmarsson in einem Kommentar erwähnte. PAM wurde über deaktiviert sshd_config, obwohl ich mich ehrlich gesagt nicht daran erinnere, dies selbst getan zu haben.

Zusammenfassend: Wenn /etc/default/localedies ignoriert zu werden scheint, überprüfen Sie, ob PAM aktiviert ist.

MechMK1
quelle
6

Führen Sie die folgenden Befehle aus:

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
quelle
Hat nicht funktioniert. localezeigt immer noch POSIX für alles
MechMK1
Ich nehme an, Sie waren root für die Ausführung dieser Befehle? Ich versuche nicht zu beleidigen, ich will nur sicher sein.
Videonauth
Ja natürlich. Es gab keine Fehlermeldungen oder ähnliches.
MechMK1
1
Meinten Sie Gebietsschemas?
Realtebo
Ich mache das und es scheint "dpkg-recfigure locales" zu sein, dann wird alles funktionieren.
Hugo
0

Bei der Bereitstellung einiger neuer 16.04.5-VMs bin ich genau auf dieses Problem gestoßen, jedoch mit xrdpanstelle von SSH. Ich habe dies gelöst, indem ich Folgendes hinzugefügt habe /etc/pam.d/common-session:

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

Wenn Sie für zusätzliche Sprachen und Kulturen in verschiedenen Anmeldemethoden sensibel sind, können Sie diese /etc/pam.d/xrdp-sesmanstattdessen in (oder eine andere PAM-Konfigurationsdatei) einfügen. Dies kann der Grund sein, warum es nicht standardmäßig vorhanden ist? Dies ist in den folgenden PAM-Konfigurationen bei unseren neuen VM-Installationen standardmäßig der Fall:

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

Ich hoffe, dies hilft jemandem mit diesem Problem, wenn andere Anmeldemethoden als SSH verwendet werden.

Kennt jemand Best Practices für die PAM-Konfiguration / Modifikation von Common- *? Wenn es einen besseren Weg gibt, dies in Gang zu bringen, wäre es gut, dies zu beheben.

jhyry-gcpud
quelle