Impossible de modifier définitivement les paramètres régionaux sur le serveur 16.04

9

J'ai installé un nouveau serveur Ubuntu 16.04, mais lorsque j'essaie de modifier définitivement les paramètres régionaux, il échoue et revient aux paramètres régionaux POSIX.

La frappe localedonne les résultats suivants:

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=

À ma connaissance, cela signifie qu'aucun paramètre régional n'a été défini, car la documentation indique que POSIX est le " codage de secours ASCII, identique à C ".

Pour garantir les paramètres régionaux de_AT.utf8et en_US.utf8être présents sur mon système, j'ai couru locale -a, ce qui a donné:

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

Veuillez noter les incohérences avec C.UTF-8, mais de_AT.utf8! Ce qui m'inquiète davantage, c'est que POSIX est la troisième entrée, alors que sur un système différent et fonctionnel, c'est la dernière de la liste.

Afin de changer ma langue en_US.utf8, j'ai tapé sudo update-locale LANG=en_US.utf8. La localecommande montrait toujours les paramètres régionaux POSIX. Après une déconnexion et une nouvelle connexion, localetoujours affiché les paramètres régionaux POSIX. Après un redémarrage, localetoujours affiché les paramètres régionaux POSIX.

Cependant, lorsque je tape export LANG=en_US.utf8, cela fonctionne temporairement, mais uniquement jusqu'à la déconnexion. En tant que tel, je suis pratiquement certain que les paramètres régionaux ont été générés correctement.

Je n'ai plus d'idées. J'ai essayé de régénérer tous les paramètres régionaux, mais il semble que ce /etc/default/localesoit simplement ignoré.

Par souci d’achèvement, /etc/default/localene contient que la ligneLANG=en_US.utf8

MISE À JOUR: // J'ai essayé de courir sudo localectl set-locale LANG=en_US.UTF-8et localectlm'a également montré qu'il définissait les paramètres régionaux, mais même après un redémarrage, les caractères localePOSIX et non ASCII ne sont toujours pas rendus correctement.

MechMK1
la source
1
/etc/default/localeest lu par PAM. Avez-vous éventuellement désactivé PAM?
Gunnar Hjalmarsson
Avez-vous essayé de systemdfaçon localectl set-locale LANG=C.UTF-8:?
EdiD
@GunnarHjalmarsson Pas que je sache. Comment puis-je vérifier?
MechMK1
@EdiD J'ai essayé, redémarré, mais aucun changement
MechMK1
Pas certain. PAM doit être activé lors d'une nouvelle installation, et si vous n'avez rien changé /etc/pam.d, cela devrait fonctionner. Mais pour le moment, vous voudrez peut-être créer /etc/profile.d/mylocalesetting.shet ajouter la ligne export LANG=en_US.UTF-8.
Gunnar Hjalmarsson

Réponses:

10

Ce que j'ai finalement fait, c'est une combinaison des techniques ci-dessus

J'ai d'abord fait

dpkg-reconfigure locales

et choisi l'anglais, utf8, puis:

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

Également édité / etc / default / locale pour ressembler à:

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

Et après le redémarrage, lorsque je tape locale, cela ressemble maintenant à ceci:

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

Et plus d'avertissements ...

Aleksandar Pavić
la source
8

La réponse était en effet liée au PAM, comme Gunnar Hjalmarsson l'a mentionné dans un commentaire. PAM a été désactivé via sshd_config, même si je ne me souviens vraiment pas l'avoir fait moi-même.

Pour résumer: Si /etc/default/localesemble ignoré, vérifiez si PAM est activé.

MechMK1
la source
6

Exécutez les commandes suivantes:

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
la source
Ça n'a pas marché. localeaffiche toujours POSIX pour tout
MechMK1
Je suppose que vous avez été root pour exécuter ces commandes? Je n'essaie pas d'offenser, je veux juste être sûr.
Videonauth
Ouais, bien sûr. Il n'y avait aucun message d'erreur ou quelque chose de similaire.
MechMK1
1
vouliez-vous dire les lieux?
realtebo
Je fais cela et il semble que ce soit "dpkg-reconfigure locales" alors tout fonctionnera.
Hugo
0

En déployant de nouvelles machines virtuelles 16.04.5, j'ai rencontré ce problème exact, mais avec xrdpau lieu de SSH. J'ai résolu ce problème en ajoutant ce qui suit à /etc/pam.d/common-session:

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

Si vous êtes sensible aux langues et cultures supplémentaires à travers les méthodes de connexion, vous pouvez le mettre à la place /etc/pam.d/xrdp-sesman(ou dans un autre fichier de configuration PAM). C'est peut-être pourquoi il n'est pas là par défaut? C'est dans les configurations PAM suivantes par défaut sur nos nouvelles installations de VM:

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

J'espère que cela aide quelqu'un avec ce problème compte tenu des méthodes de connexion autres que SSH.

Quelqu'un connaît-il les meilleures pratiques pour la configuration / modification PAM de common- *? S'il y a une meilleure façon de faire avancer les choses, il serait bon de les descendre.

jhyry-gcpud
la source