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 locale
menghasilkan 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.utf8
dan en_US.utf8
hadir 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 locale
perintah masih menunjukkan lokal POSIX. Setelah keluar dan masuk baru, locale
masih menunjukkan lokal POSIX. Setelah reboot, locale
masih 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/locale
hanya diabaikan.
Demi penyelesaian, /etc/default/locale
hanya berisi garisLANG=en_US.utf8
UPDATE: // Saya mencoba menjalankan sudo localectl set-locale LANG=en_US.UTF-8
, dan localectl
juga menunjukkan kepada saya bahwa itu mengatur lokal, tetapi bahkan setelah reboot, locale
masih menunjukkan POSIX dan karakter non-ASCII masih belum diterjemahkan dengan benar.
/etc/default/locale
dibaca oleh PAM. Apakah Anda mungkin menonaktifkan PAM?systemd
caralocalectl set-locale LANG=C.UTF-8
:?/etc/pam.d
dalamnya, itu akan berfungsi. Tetapi sebagai peretasan untuk saat ini, Anda mungkin ingin membuat/etc/profile.d/mylocalesetting.sh
dan menambahkan barisexport LANG=en_US.UTF-8
.Jawaban:
Apa yang akhirnya saya lakukan adalah kombinasi teknik di atas
Saya pertama kali selesai
dan memilih bahasa Inggris, utf8, lalu:
Juga diedit / etc / default / locale agar terlihat seperti:
Dan setelah reboot, ketika saya mengetik lokal sekarang terlihat seperti ini:
Dan tidak ada lagi peringatan ...
sumber
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/locale
tampaknya diabaikan, periksa apakah PAM diaktifkan.sumber
Jalankan perintah berikut:
sumber
locale
masih menunjukkan POSIX untuk semuanyaDalam menyebarkan beberapa 16,04 VM baru, saya mengalami masalah yang tepat ini, tetapi dengan
xrdp
bukannya SSH. Saya memecahkan masalah ini dengan menambahkan yang berikut ke/etc/pam.d/common-session
: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.
sumber