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.