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.


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 ...


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.


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

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.