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.


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


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.


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

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.