ไม่สามารถเปลี่ยนภาษาบนเซิร์ฟเวอร์ 16.04 อย่างถาวร


9

ฉันได้ติดตั้งเซิร์ฟเวอร์ Ubuntu 16.04 ใหม่แล้ว แต่เมื่อฉันพยายามเปลี่ยนการตั้งค่าภาษาอย่างถาวรมันจะล้มเหลวและเปลี่ยนกลับไปเป็นภาษา POSIX

การพิมพ์localeให้ผลดังนี้:

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=

ตามความรู้ของฉันนี่หมายความว่าไม่มีการตั้งค่าภาษาใด ๆ เลยเนื่องจากสถานะเอกสาร POSIX คือ " การย้อนกลับการเข้ารหัส ASCII เหมือนกับ C "

เพื่อให้มั่นใจว่าสถานที่de_AT.utf8และen_US.utf8มีอยู่ในระบบของฉันฉันวิ่งไปหาlocale -aที่ให้:

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

โปรดทราบความไม่สอดคล้องด้วยC.UTF-8แต่de_AT.utf8! สิ่งที่ฉันกังวลอีกต่อไปคือ POSIX เป็นรายการที่สามในขณะที่ระบบการทำงานที่แตกต่างออกไปนั้นเป็นรายการสุดท้าย

เพื่อที่จะเปลี่ยนภาษาของฉันไปที่ผมพิมพ์en_US.utf8 คำสั่งยังคงมีสถานที่ POSIX หลังจากออกจากระบบและเข้าสู่ระบบใหม่ยังคงแสดงให้เห็นถึงสถานที่เกิดเหตุ POSIX หลังจากรีบูตยังคงแสดงให้เห็นถึงสถานที่เกิดเหตุ POSIXsudo update-locale LANG=en_US.utf8localelocalelocale

อย่างไรก็ตามเมื่อฉันพิมพ์export LANG=en_US.utf8มันจะทำงานได้ชั่วคราว แต่เพียงจนกว่าจะออกจากระบบ ดังนั้นฉันค่อนข้างมั่นใจว่าสถานที่นั้นถูกสร้างขึ้นอย่างถูกต้อง

ฉันไม่มีความคิด ฉันลองสร้างที่ตั้งใหม่ทั้งหมด แต่ดูเหมือนว่า/etc/default/localeจะถูกเพิกเฉย

เพื่อประโยชน์ในการสำเร็จ/etc/default/localeมีเพียงบรรทัดLANG=en_US.utf8

UPDATE: //ฉันพยายามเรียกใช้sudo localectl set-locale LANG=en_US.UTF-8และlocalectlยังแสดงให้ฉันเห็นว่ามันตั้งค่าภาษาไว้ แต่แม้หลังจากรีบูตเครื่องlocaleก็ยังคงแสดงว่า POSIX และตัวอักษรที่ไม่ใช่ ASCII ยังแสดงผลไม่ถูกต้อง


1
/etc/default/localeถูกอ่านโดย PAM คุณอาจปิดใช้งาน PAM หรือไม่
Gunnar Hjalmarsson

คุณลองsystemdวิธีที่: localectl set-locale LANG=C.UTF-8?
EdiD

@GunnarHjalmarsson ไม่ใช่ว่าฉันจะต้องระวัง ฉันจะตรวจสอบได้อย่างไร
MechMK1

@EdiD ฉันลองรีบูตเครื่อง แต่ไม่มีการเปลี่ยนแปลง
MechMK1

ไม่แน่ใจ. ควรเปิดใช้งาน PAM ในการติดตั้งใหม่และหากคุณไม่ได้เปลี่ยนแปลงอะไรเลย/etc/pam.dควรดำเนินการ แต่เป็นสับสำหรับในตอนนี้คุณอาจต้องการที่จะสร้างและเพิ่มบรรทัด/etc/profile.d/mylocalesetting.sh export LANG=en_US.UTF-8
Gunnar Hjalmarsson

คำตอบ:


10

สิ่งที่ฉันทำในที่สุดก็คือการรวมกันของเทคนิคข้างต้น

ฉันทำเสร็จแล้ว

dpkg-reconfigure locales

และเลือกภาษาอังกฤษ utf8 จากนั้น:

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

แก้ไขด้วย / etc / default / locale เพื่อให้มีลักษณะดังนี้:

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

และหลังจากรีบูตเมื่อฉันพิมพ์สถานที่ตอนนี้ดูเหมือนว่า:

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

และไม่มีคำเตือนอีกแล้ว ...


8

คำตอบนั้นเกี่ยวข้องกับ PAM อย่างที่ Gunnar Hjalmarsson พูดถึงในความคิดเห็น PAM ถูกปิดการใช้งานผ่านsshd_configแม้ว่าฉันจะจำไม่ได้ว่าทำอย่างนั้นจริง ๆ

ในการสรุป: หาก/etc/default/localeดูเหมือนว่าถูกเพิกเฉยให้ตรวจสอบว่าเปิดใช้งาน PAM หรือไม่


6

รันคำสั่งต่อไปนี้:

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

ใช้งานไม่ได้ localeยังคงแสดง POSIX สำหรับทุกสิ่ง
MechMK1

ฉันคิดว่าคุณรูทเพื่อรันคำสั่งเหรอ? ฉันไม่ได้พยายามที่จะรุกรานเพียงต้องการให้แน่ใจ
Videonauth

ใช่แน่นอน. ไม่มีข้อความผิดพลาดหรืออะไรที่คล้ายกัน
MechMK1

1
หมายถึงโลแคลใช่ไหม
realtebo

ฉันกำลังทำสิ่งนี้และดูเหมือนจะเป็น "dpkg-reconfigure locales" จากนั้นทุกอย่างจะทำงานได้
Hugo

0

ในการปรับใช้ VMs 16.04.5 ใหม่ฉันพบปัญหานี้ แต่xrdpใช้ SSH แทน ฉันแก้ไขได้โดยเพิ่มสิ่งต่อไปนี้ใน/etc/pam.d/common-session:

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

หากคุณมีความไวต่อภาษาและวัฒนธรรมเพิ่มเติมในวิธีการลงชื่อเข้าใช้คุณสามารถใส่สิ่งนี้ใน/etc/pam.d/xrdp-sesman(หรือไฟล์การกำหนดค่า PAM อื่น) แทน นี่อาจเป็นสาเหตุที่ไม่มีค่าเริ่มต้น นี่คือการกำหนดค่า PAM ต่อไปนี้ตามค่าเริ่มต้นในการติดตั้ง VM ใหม่ของเรา:

cron, lightdm *, เข้าสู่ระบบ, polkit-1, sshd, su และ sudo

หวังว่านี่จะช่วยให้คนที่มีปัญหานี้ได้รับวิธีการเข้าสู่ระบบอื่นที่ไม่ใช่ SSH

ไม่มีใครรู้วิธีปฏิบัติที่ดีที่สุดสำหรับการกำหนดค่า PAM / การแก้ไข Common- *? หากมีวิธีที่ดีกว่าในการทำสิ่งนี้ให้สำเร็จ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.