No se puede cambiar permanentemente la configuración regional en el servidor 16.04

9

He configurado un nuevo servidor Ubuntu 16.04, pero cuando intento cambiar permanentemente la configuración regional, falla y vuelve a la configuración regional POSIX.

Al escribir se localeobtiene lo siguiente:

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=

Que yo sepa, esto significa que no se ha establecido ninguna configuración regional, ya que la documentación indica que POSIX es la " codificación ASCII alternativa, igual que C ".

Para asegurar que las configuraciones regionales de_AT.utf8y en_US.utf8estuvieran presentes en mi sistema, ejecuté locale -a, lo que produjo:

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

Tenga en cuenta las inconsistencias con C.UTF-8, pero de_AT.utf8! Lo que más me preocupa es que POSIX es la tercera entrada, mientras que en un sistema de trabajo diferente, es el último de la lista.

Para cambiar mi idioma en_US.utf8, escribí sudo update-locale LANG=en_US.utf8. El localecomando aún mostraba la localización POSIX. Después de un cierre de sesión y un nuevo inicio de sesión, localetodavía se muestra el entorno local POSIX. Después de un reinicio, localetodavía se muestra el entorno local POSIX.

Sin embargo, cuando escribo export LANG=en_US.utf8, funciona temporalmente, pero solo hasta que finalice la sesión. Como tal, estoy bastante seguro de que las configuraciones regionales se generaron correctamente.

Se me acabaron las ideas. Intenté regenerar todas las configuraciones regionales, pero parece que /etc/default/localesimplemente se está ignorando.

En aras de la finalización, /etc/default/localesolo contiene la líneaLANG=en_US.utf8

ACTUALIZACIÓN: // Intenté ejecutar sudo localectl set-locale LANG=en_US.UTF-8, y localectltambién me mostró que establece la configuración regional, pero incluso después de un reinicio, localetodavía muestra POSIX y los caracteres no ASCII todavía no se representan correctamente.

MechMK1
fuente
1
/etc/default/localees leída por PAM. ¿Posiblemente desactivaste PAM?
Gunnar Hjalmarsson
¿Intentaste la systemdforma localectl set-locale LANG=C.UTF-8:?
EdiD
@GunnarHjalmarsson No es que yo supiera. ¿Cómo puedo verificar?
MechMK1
@EdiD Lo intenté, reinicié, pero no
cambié
No estoy seguro. PAM debe habilitarse en una instalación nueva, y si no ha cambiado nada /etc/pam.d, debería funcionar. Pero como truco por ahora, es posible que desee crear /etc/profile.d/mylocalesetting.shy agregar la línea export LANG=en_US.UTF-8.
Gunnar Hjalmarsson

Respuestas:

10

Lo que eventualmente hice es una combinación de las técnicas anteriores

Primero he hecho

dpkg-reconfigure locales

y elegí inglés, utf8, luego:

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

También edité / etc / default / locale para que se vea así:

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

Y después de reiniciar, cuando escribo locale ahora se ve así:

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

Y no más advertencias ...

Aleksandar Pavić
fuente
8

La respuesta estaba relacionada con PAM, como Gunnar Hjalmarsson mencionó en un comentario. PAM fue deshabilitado a través de sshd_config, aunque honestamente no recuerdo haberlo hecho.

Para resumir: si /etc/default/localeparece que se ignora, verifique si PAM está habilitado.

MechMK1
fuente
6

Ejecute los siguientes comandos:

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
fuente
No funcionó localetodavía muestra POSIX para todo
MechMK1
¿Asumo que has sido root para ejecutar esos comandos? No estoy tratando de ofender, solo quiero estar seguro.
Videonauth
Sí, por supuesto. No hubo mensajes de error ni nada similar.
MechMK1
1
te refieres a locales?
realtebo
Estoy haciendo esto y parece ser "dpkg-reconfigure locales", entonces todo funcionará.
Hugo
0

Al implementar algunas nuevas máquinas virtuales 16.04.5, me encontré con este problema exacto, pero en xrdplugar de SSH. Resolví esto agregando lo siguiente a /etc/pam.d/common-session:

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

Si es sensible a idiomas y culturas adicionales a través de los métodos de inicio de sesión, puede colocar esto /etc/pam.d/xrdp-sesman(u otro archivo de configuración de PAM) en su lugar. Esto puede ser por qué no está allí por defecto? Esto está en las siguientes configuraciones de PAM por defecto en nuestras nuevas instalaciones de VM:

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

Espero que esto ayude a alguien con este problema dados los métodos de inicio de sesión que no sean SSH.

¿Alguien conoce las mejores prácticas para la configuración / modificación PAM de common- *? Si hay una mejor manera de hacer que esto funcione, sería bueno hacerlo.

jhyry-gcpud
fuente