web-dev-qa-db-fra.com

Impossible de modifier de manière permanente les paramètres régionaux sur le serveur 16.04

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.

Taper locale donne 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'aucune locale n'a été définie, car documentation indique que POSIX est le ") repli, ASCII encodage, identique à C ".

Pour vérifier que les paramètres régionaux de_AT.utf8 et en_US.utf8 étaient présents sur mon système, j'ai exécuté locale -a, ce qui a permis d'obtenir:

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 en_US.utf8, j'ai tapé Sudo update-locale LANG=en_US.utf8. La commande locale affiche toujours les paramètres régionaux POSIX. Après une déconnexion et une nouvelle connexion, locale affichait toujours les paramètres régionaux POSIX. Après un redémarrage, locale affichait toujours les paramètres régionaux POSIX.

Cependant, lorsque je tape export LANG=en_US.utf8, cela fonctionne temporairement, mais seulement jusqu'à la déconnexion. En tant que tel, je suis à peu près 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 /etc/default/locale soit simplement ignoré.

Par souci d’achèvement, /etc/default/locale ne contient que la ligne LANG=en_US.utf8

UPDATE: // J'ai essayé d'exécuter Sudo localectl set-locale LANG=en_US.UTF-8 et localectl m'a également montré qu'il définissait les paramètres régionaux, mais même après un redémarrage, locale affiche toujours POSIX et non Les caractères -ASCII ne sont toujours pas restitués correctement.

6
MechMK1

La réponse était en effet liée à PAM, comme le mentionnait Gunnar Hjalmarsson dans un commentaire. PAM a été désactivé via sshd_config, bien que je ne me souvienne vraiment pas de l'avoir fait moi-même.

Pour résumer: Si /etc/default/locale semble être ignoré, vérifiez si PAM est activé.

7
MechMK1

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
6
Videonauth

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

J'ai d'abord fait

dpkg-reconfigure locales

et a choisi l'anglais, utf8, alors:

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

Également modifié / 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, quand 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 ...

6
Aleksandar Pavić

Lors du déploiement de nouvelles machines virtuelles 16.04.5, j'ai rencontré ce problème exact, mais avec xrdp au 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 à d'autres langues et cultures sur l'ensemble des méthodes de connexion, vous pouvez le placer dans /etc/pam.d/xrdp-sesman (ou un autre fichier de configuration PAM). C'est peut-être pourquoi il n'est pas là par défaut? Cela se trouve par défaut dans les configurations PAM suivantes sur nos nouvelles installations VM:

cron, lightdm *, connexion, polkit-1, sshd, su et Sudo.

J'espère que cela aidera quelqu'un avec ce problème étant donné les méthodes de connexion autres que SSH.

Est-ce que quelqu'un connaît les meilleures pratiques pour la configuration/modification PAM de common- *? S'il y a un meilleur moyen de le faire, ce serait bien de le réduire.

0
jhyry-gcpud