Impossibile modificare in modo permanente le impostazioni internazionali sul server 16.04


9

Ho installato un nuovo server Ubuntu 16.04, ma quando provo a modificare in modo permanente le impostazioni locali, fallisce e ritorna alla locale POSIX.

La digitazione localeproduce quanto segue:

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=

Per quanto ne so, ciò significa che non è stata impostata alcuna locale, poiché la documentazione afferma che POSIX è il " fallback, codifica ASCII, uguale a C ".

Per garantire le impostazioni locali de_AT.utf8ed en_US.utf8erano presenti sul mio sistema, ho eseguito locale -a, che ha prodotto:

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

Si prega di notare le incoerenze con C.UTF-8, ma de_AT.utf8! Ciò che mi preoccupa ulteriormente è che POSIX è la terza voce, mentre su un sistema diverso e funzionante è l'ultimo dell'elenco.

Per cambiare la mia lingua in en_US.utf8, ho digitato sudo update-locale LANG=en_US.utf8. Il localecomando mostrava ancora la locale POSIX. Dopo una disconnessione e un nuovo accesso, localemostravano ancora le impostazioni internazionali POSIX. Dopo un riavvio, localemostrava ancora la locale POSIX.

Tuttavia, quando scrivo export LANG=en_US.utf8, funziona temporaneamente, ma solo fino al logout. In quanto tale, sono abbastanza certo che i locali siano stati generati correttamente.

Non ho più idee. Ho provato a rigenerare tutti i locali, ma sembra che /etc/default/localevenga semplicemente ignorato.

Per motivi di completamento, /etc/default/localecontiene solo la rigaLANG=en_US.utf8

AGGIORNAMENTO: // Ho provato a correre sudo localectl set-locale LANG=en_US.UTF-8e localectlmi ha anche mostrato che ha impostato le impostazioni locali, ma anche dopo un riavvio, localemostra ancora che i caratteri POSIX e non ASCII non vengono ancora visualizzati correttamente.


1
/etc/default/localeviene letto da PAM. Forse hai disabilitato PAM?
Gunnar Hjalmarsson,

Hai provato il systemdmodo localectl set-locale LANG=C.UTF-8:?
EdiD,

@GunnarHjalmarsson Non che ne sarei a conoscenza. Come posso controllare?
MechMK1

@EdiD Ho provato, riavviato, ma nessuna modifica
MechMK1

Non sono sicuro. PAM dovrebbe essere abilitato su una nuova installazione e, se non hai cambiato nulla /etc/pam.d, dovrebbe funzionare. Ma come hack per ora potresti voler creare /etc/profile.d/mylocalesetting.she aggiungere la linea export LANG=en_US.UTF-8.
Gunnar Hjalmarsson,

Risposte:


10

Quello che alla fine ho fatto è una combinazione delle tecniche di cui sopra

L'ho fatto per primo

dpkg-reconfigure locales

e scelto inglese, utf8, quindi:

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

Anche modificato / etc / default / locale per assomigliare a:

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

E dopo il riavvio, quando digito locale ora appare così:

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 non più avvisi ...


8

La risposta era effettivamente legata alla PAM, come menzionato da Gunnar Hjalmarsson in un commento. PAM è stato disabilitato tramite sshd_config, anche se sinceramente non ricordo di averlo fatto da solo.

Riassumendo: se /etc/default/localesembra essere ignorato, controlla se PAM è abilitato.


6

Esegui i seguenti comandi:

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

Non ha funzionato localemostra ancora POSIX per tutto
MechMK1

Presumo che tu sia stato root per eseguire quei comandi? Non sto cercando di offendere, voglio solo esserne sicuro.
Videonauth,

Si, certo. Non c'erano messaggi di errore o qualcosa di simile.
MechMK1

1
intendevi locali?
realtebo,

Lo sto facendo e sembra essere "dpkg-riconfigurare le impostazioni locali", quindi tutto funzionerà.
Hugo,

0

Durante la distribuzione di alcune nuove macchine virtuali 16.04.5, ho riscontrato questo esatto problema, ma con xrdpinvece di SSH. Ho risolto questo aggiungendo quanto segue a /etc/pam.d/common-session:

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

Se sei sensibile ad altre lingue e culture attraverso i metodi di accesso, puoi invece inserirlo in /etc/pam.d/xrdp-sesman(o in un altro file di configurazione PAM). Questo potrebbe essere il motivo per cui non è presente per impostazione predefinita? Questo è nelle seguenti configurazioni PAM per impostazione predefinita sulle nostre nuove installazioni di macchine virtuali:

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

Spero che questo aiuti qualcuno con questo problema dati metodi di accesso diversi da SSH.

Qualcuno conosce le migliori pratiche per la configurazione / modifica PAM di common- *? Se c'è un modo migliore per farlo, sarebbe bene abbatterlo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.