Não é possível alterar permanentemente o código de idioma no servidor 16.04

9

Eu configurei um servidor Ubuntu 16.04 novo, mas quando tento alterar permanentemente as configurações do código do idioma, ele falha e volta ao código do POSIX.

A digitação localeproduz o seguinte:

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 eu saiba, isso significa que nenhum código de idioma foi definido, pois a documentação indica POSIX é a " codificação ASCII de fallback, igual a C ".

Para garantir as localidades de_AT.utf8e en_US.utf8estar presente no meu sistema, executei locale -a, o que resultou em:

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

Observe as inconsistências com C.UTF-8, mas de_AT.utf8! O que mais me preocupa é que o POSIX é a terceira entrada, enquanto em um sistema de trabalho diferente, é o último da lista.

Para mudar meu idioma en_US.utf8, digitei sudo update-locale LANG=en_US.utf8. O localecomando ainda mostrava o código do idioma POSIX. Após um logout e novo login, localeainda mostrava o código do idioma POSIX. Após uma reinicialização, localeainda mostrava o código do idioma POSIX.

No entanto, quando eu digito export LANG=en_US.utf8, ele funciona temporariamente, mas apenas até o logout. Como tal, tenho certeza de que os códigos de idioma foram gerados corretamente.

Estou sem idéias. Tentei regenerar todos os locais, mas parece que isso /etc/default/localeestá simplesmente sendo ignorado.

Para fins de conclusão, /etc/default/localecontém apenas a linhaLANG=en_US.utf8

UPDATE: // Tentei executar sudo localectl set-locale LANG=en_US.UTF-8e localectltambém me mostrou que ele definia o código do idioma, mas mesmo após uma reinicialização, localeainda mostra caracteres POSIX e não ASCII ainda não são renderizados corretamente.

MechMK1
fonte
1
/etc/default/localeé lido pelo PAM. Você possivelmente desativou o PAM?
Gunnar Hjalmarsson
Você tentou o systemdcaminho localectl set-locale LANG=C.UTF-8:?
EdiD
@GunnarHjalmarsson Não que eu esteja ciente. Como posso verificar?
MechMK1
@EdiD eu tentei, reiniciado, mas nenhuma mudança
MechMK1
Não tenho certeza. O PAM deve ser ativado em uma nova instalação e, se você não tiver alterado nada /etc/pam.d, deve funcionar. Mas como um hack por enquanto, você pode criar /etc/profile.d/mylocalesetting.she adicionar a linha export LANG=en_US.UTF-8.
Gunnar Hjalmarsson

Respostas:

10

O que finalmente fiz foi uma combinação das técnicas acima

Eu fiz primeiro

dpkg-reconfigure locales

e optou por inglês, utf8, então:

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

Também editou / etc / default / locale para se parecer com:

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

E depois da reinicialização, quando digito locale, ele fica assim:

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

E não há mais avisos ...

Aleksandar Pavić
fonte
8

A resposta foi de fato relacionada ao PAM, como Gunnar Hjalmarsson mencionou em um comentário. O PAM foi desativado via sshd_config, embora eu honestamente não me lembre de fazê-lo.

Para resumir: Se /etc/default/localeparece estar sendo ignorado, verifique se o PAM está ativado.

MechMK1
fonte
6

Execute os seguintes 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
fonte
Não funcionou. localeainda mostra POSIX para tudo
MechMK1
Presumo que você tenha sido root por executar esses comandos? Não estou tentando ofender, só quero ter certeza.
Videonauth
Sim claro. Não houve mensagens de erro ou algo semelhante.
MechMK1
1
você quis dizer localidades?
Realtebo
Estou fazendo isso e parece ser "dpkg-reconfigure locales", então tudo funcionará.
307 Hugo
0

Ao implantar algumas novas VMs 16.04.5, deparei-me com esse problema exato, mas com o xrdpSSH. Resolvi isso adicionando o seguinte a /etc/pam.d/common-session:

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

Se você é sensível a idiomas e culturas adicionais nos métodos de login, pode colocar isso /etc/pam.d/xrdp-sesman(ou outro arquivo de configuração do PAM). Pode ser por isso que não existe por padrão? Está nas seguintes configurações do PAM, por padrão, em nossas novas instalações de VM:

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

Espero que isso ajude alguém com esse problema, usando métodos de login diferentes do SSH.

Alguém conhece as práticas recomendadas para configuração / modificação do PAM do common- *? Se existe uma maneira melhor de fazer isso, seria bom fazer isso.

jhyry-gcpud
fonte