Tidak dapat mengubah lokal secara permanen di server 16.04

9

Saya telah menyiapkan server Ubuntu 16.04 baru, tetapi ketika saya mencoba mengubah pengaturan lokal secara permanen, ia gagal dan kembali ke lokal POSIX.

Mengetik localemenghasilkan sebagai berikut:

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=

Sepengetahuan saya, ini berarti bahwa tidak ada lokal telah ditetapkan sama sekali, karena dokumentasi menyatakan POSIX adalah " mundur, pengkodean ASCII, sama dengan C ".

Untuk memastikan lokasi de_AT.utf8dan en_US.utf8hadir di sistem saya, saya berlari locale -a, yang menghasilkan:

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

Harap perhatikan inkonsistensi dengan C.UTF-8, tetapi de_AT.utf8! Yang lebih mengkhawatirkan saya adalah bahwa POSIX adalah entri ketiga, sedangkan pada sistem kerja yang berbeda, ini adalah yang terakhir dari daftar.

Untuk mengubah bahasa saya ke en_US.utf8, saya mengetik sudo update-locale LANG=en_US.utf8. The localeperintah masih menunjukkan lokal POSIX. Setelah keluar dan masuk baru, localemasih menunjukkan lokal POSIX. Setelah reboot, localemasih menunjukkan lokal POSIX.

Namun, ketika saya mengetik export LANG=en_US.utf8, itu berfungsi sementara, tetapi hanya sampai keluar. Karena itu, saya cukup yakin bahwa lokal dihasilkan dengan benar.

Saya kehabisan ide. Saya mencoba meregenerasi semua lokal, tetapi sepertinya /etc/default/localehanya diabaikan.

Demi penyelesaian, /etc/default/localehanya berisi garisLANG=en_US.utf8

UPDATE: // Saya mencoba menjalankan sudo localectl set-locale LANG=en_US.UTF-8, dan localectljuga menunjukkan kepada saya bahwa itu mengatur lokal, tetapi bahkan setelah reboot, localemasih menunjukkan POSIX dan karakter non-ASCII masih belum diterjemahkan dengan benar.

MechMK1
sumber
1
/etc/default/localedibaca oleh PAM. Apakah Anda mungkin menonaktifkan PAM?
Gunnar Hjalmarsson
Apakah Anda mencoba systemdcara localectl set-locale LANG=C.UTF-8:?
EdiD
@ GunnarHjalmarsson Bukannya aku akan sadar. Bagaimana saya bisa memeriksanya?
MechMK1
@ End Saya mencoba, reboot, tetapi tidak ada perubahan
MechMK1
Tidak yakin. PAM harus diaktifkan pada pemasangan baru, dan jika Anda belum mengubah apa pun di /etc/pam.ddalamnya, itu akan berfungsi. Tetapi sebagai peretasan untuk saat ini, Anda mungkin ingin membuat /etc/profile.d/mylocalesetting.shdan menambahkan baris export LANG=en_US.UTF-8.
Gunnar Hjalmarsson

Jawaban:

10

Apa yang akhirnya saya lakukan adalah kombinasi teknik di atas

Saya pertama kali selesai

dpkg-reconfigure locales

dan memilih bahasa Inggris, utf8, lalu:

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

Juga diedit / etc / default / locale agar terlihat seperti:

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

Dan setelah reboot, ketika saya mengetik lokal sekarang terlihat seperti ini:

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

Dan tidak ada lagi peringatan ...

Aleksandar Pavić
sumber
8

Jawabannya memang terkait PAM, seperti yang disebutkan oleh Gunnar Hjalmarsson dalam komentar. PAM dinonaktifkan melalui sshd_config, meskipun saya jujur ​​tidak ingat melakukannya sendiri.

Untuk meringkas: Jika /etc/default/localetampaknya diabaikan, periksa apakah PAM diaktifkan.

MechMK1
sumber
6

Jalankan perintah berikut:

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
sumber
Tidak bekerja localemasih menunjukkan POSIX untuk semuanya
MechMK1
Saya berasumsi Anda telah melakukan root untuk menjalankan perintah-perintah itu? Saya tidak berusaha menyinggung, hanya ingin memastikan.
Videonauth
Ya tentu saja. Tidak ada pesan kesalahan atau yang serupa.
MechMK1
1
maksudmu locales
realtebo
Saya melakukan ini dan sepertinya "dpkg-reconfigure locales" maka semuanya akan berfungsi.
Hugo
0

Dalam menyebarkan beberapa 16,04 VM baru, saya mengalami masalah yang tepat ini, tetapi dengan xrdpbukannya SSH. Saya memecahkan masalah ini dengan menambahkan yang berikut ke /etc/pam.d/common-session:

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

Jika Anda peka terhadap bahasa dan budaya tambahan di seluruh metode login, Anda bisa memasukkan ini /etc/pam.d/xrdp-sesman(atau file konfigurasi PAM lainnya) sebagai gantinya. Ini mungkin mengapa tidak ada di sana secara default? Ini adalah dalam konfigurasi PAM berikut secara default pada instalasi VM baru kami:

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

Semoga ini bisa membantu seseorang dengan masalah ini mengingat metode masuk selain SSH.

Adakah yang tahu praktik terbaik untuk konfigurasi PAM / modifikasi common- *? Jika ada cara yang lebih baik untuk melakukan ini, akan lebih baik untuk melakukannya.

jhyry-gcpud
sumber