mosh-server ต้องการภาษาท้องถิ่น UTF-8 เพื่อให้ทำงานได้


9

ฉันกำลังพยายามเชื่อมต่อจาก Gentoo ของฉันไปยังเซิร์ฟเวอร์ RHEL ทั้งสองมีการmoshติดตั้ง แต่ฉันได้รับข้อผิดพลาดนี้:

petanb@localhost ~/Documents $ mosh root@server 
mosh-server needs a UTF-8 native locale to run.

Unfortunately, the local environment ([no charset variables]) specifies
the character set "US-ASCII",

The client-supplied environment ([no charset variables]) specifies
the character set "US-ASCII".

LANG=
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=
Connection to server closed.
/usr/bin/mosh: Did not find mosh server startup message.

ใน RHEL ฉันมีตำแหน่งที่ตั้งต่อไปนี้:

# locale
LANG=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=

ฉันจะแก้ไขสิ่งนี้ได้อย่างไร

ปรับปรุง: ปัญหาดูเหมือนจะอยู่ในด้าน Gentoo การเชื่อมต่อกับเซิร์ฟเวอร์เดเบียนก่อให้เกิดข้อผิดพลาดเดียวกันการเชื่อมต่อโดยใช้งาน distros อื่น ๆ

UPDATE2: ฉันแก้ไขโดยการเพิ่ม

LANG="en_US.UTF-8"
export LANG

เข้าไป ~/.bashrc


สำหรับผู้ที่ใช้ Ubuntu หรือ Debian เช่น distro นี่อาจเป็นทางออก
Pablo A

คำตอบ:


6

ทางออกที่ง่าย

user@machine:~$ LC_ALL="en_US.UTF-8" mosh-server

ในกรณีที่ไม่ชัดเจนสามารถใช้กับลูกค้าได้:LC_ALL="en_US.UTF-8" mosh root@server
Tim Visee

3

moshsshใช้สภาพแวดล้อมของสถานที่ได้รับการสนับสนุนโดย ในขณะที่moshเห็นได้ชัดว่าไม่เคยมีใคร verbose- หรือแก้ปัญหาตัวเลือกคุณสามารถบอกว่าสิ่งที่sshคำสั่งการใช้งานเมื่อการเชื่อมต่อและโดยการเพิ่ม-vvvตัวเลือกที่สามารถมีsshการแสดงสิ่งที่สถานที่เกิดเหตุตัวแปรมันส่ง

ตัวอย่างเช่นเริ่มต้นด้วย

mosh -ssh='ssh -vvv' root@server

คุณอาจเห็น

debug1: Sending env LC_ALL = C  
debug2: channel 0: request env confirm 0

สำหรับ POSIX และ

debug1: Sending env LC_CTYPE = en_US.UTF-8
debug2: channel 0: request env confirm 0

ซึ่งแสดงให้เห็นว่าเซิร์ฟเวอร์ยืนยันตัวแปรที่ใช้ รีโมทsshdอาจเพิกเฉยต่อสภาพแวดล้อมบางอย่างของคุณขึ้นอยู่กับการตั้งค่าAcceptEnvในการกำหนดค่าสำหรับsshd- หรือการSendEnvตั้งค่าของผู้ใช้(ในsshการกำหนดค่าของคุณ)

ไม่ใช่เซิร์ฟเวอร์ทั้งหมดที่ยอมรับตัวแปรโลแคลของคุณผ่าน ssh

แม้จะมีการตั้งค่าการกำหนดค่าที่อนุญาตก็ยังเป็นไปได้ (โดยเฉพาะอย่างยิ่งเมื่อคุณเชื่อมต่อกับผู้ใช้รูท ) ว่ามีคนตัดสินใจว่าสถานที่สำหรับผู้ใช้นั้นควรเป็น POSIX สำหรับรูทนั้นมีเหตุผลเพราะคุณจะประสบปัญหาน้อยลงโดยเลือก / วางการคัดลอก

ตัวอย่างเช่นบางระบบใช้/etc/profile.d/lang.shเพื่อตั้งค่าโลแคลสำหรับใช้แบบโต้ตอบ สคริปต์นั้นแตกต่างจากระบบหนึ่งไปอีกระบบหนึ่งและเป็นที่ที่สอง (หลังการกำหนดค่า ssh / sshd) เพื่อพิจารณาเมื่อค้นหาคำอธิบายว่าทำไมข้อมูลตำแหน่งที่ตั้งไม่ถูกส่งไปยังระบบรีโมต ด้วย Red Hat (CentOS) สคริปต์จะพยายามรับข้อมูลจากระบบและการกำหนดค่าภายในบ้านเช่น

if [ -n "$LANG" ]; then
    saved_lang="$LANG"
    [ -f "$HOME/.i18n" ] && . "$HOME/.i18n" && sourced=1
    LANG="$saved_lang"
    unset saved_lang
else
    for langfile in /etc/locale.conf "$HOME/.i18n" ; do
        [ -f $langfile ] && . $langfile && sourced=1
    done
fi

SuSE นั้นแตกต่างกันทำให้มีข้อสมมุติเกี่ยวกับ ssh และ gdm ก่อนอ่านไฟล์เดียวกันโดยพื้นฐาน:

#
# lang.sh:      Set interactive language environment
#
# Used configuration files:
#
#     /etc/sysconfig/language
#     $HOME/.i18n
#

#
# Already done by the remote SSH side
#
test -z "$SSH_SENDS_LOCALE" || return

#
# Already done by the GDM
#
test -z "$GDM_LANG" || return

สำหรับเซิร์ฟเวอร์เฉพาะของคุณ (ไม่ได้ระบุรุ่น) สคริปต์อาจแตกต่างจากรุ่นหนึ่งสู่รุ่นอื่น เซิร์ฟเวอร์ Debian ของฉันไม่มีไฟล์นั้น - และพึ่งพาระบบตำแหน่งที่ตั้งเริ่มต้นและ gdm (ซึ่งอาจแตกต่างกัน) เพื่อตั้งค่าภาษาแบบโต้ตอบ การเชื่อมต่อ ssh ของคุณสามารถใช้ค่าที่แตกต่างกับที่ตั้งของระบบมากกว่าเซสชันแบบโต้ตอบโดยใช้ X (ผ่าน gdm) ในกรณีที่ตำแหน่งที่ตั้งของระบบเป็นสถานที่ในการแก้ไขปัญหา (ดูสถานที่เกิดเหตุในวิกิพีเดีย Debian)

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