mosh-server cần một ngôn ngữ gốc UTF-8 để chạy


9

Tôi đang cố gắng kết nối từ máy chủ Gentoo của tôi đến máy chủ RHEL. Cả hai đã moshcài đặt, tuy nhiên tôi gặp lỗi này:

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.

Trên RHEL tôi có các ngôn ngữ sau:

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

Làm thế nào tôi có thể sửa lỗi này?

CẬP NHẬT: Vấn đề dường như nằm ở phía Gentoo, kết nối với máy chủ debian tạo ra cùng một lỗi, kết nối bằng các bản phân phối khác hoạt động.

CẬP NHẬT2: Tôi đã sửa nó bằng cách thêm

LANG="en_US.UTF-8"
export LANG

vào ~/.bashrc


Đối với những người sử dụng Ubuntu hoặc bất kỳ Debian nào như distro, đây có thể là một giải pháp.
Pablo A

Câu trả lời:


6

Giải pháp đơn giản

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

Trong trường hợp không rõ ràng, điều này có thể được sử dụng trên máy khách:LC_ALL="en_US.UTF-8" mosh root@server
Tim Visee

3

moshsử dụng môi trường miền địa phương được hỗ trợ bởi ssh. Mặc dù moshrõ ràng không có tùy chọn dài dòng hoặc gỡ lỗi, bạn có thể cho nó biết sshnên sử dụng lệnh nào khi kết nối và bằng cách thêm một -vvvtùy chọn có thể sshhiển thị các biến cục bộ mà nó gửi .

Ví dụ: bắt đầu bằng

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

bạn có thể thấy

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

cho POSIX và

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

cho thấy máy chủ xác nhận các biến được sử dụng. Điều khiển từ xa sshdcó thể bỏ qua một số môi trường của bạn tùy thuộc vào cài đặt AcceptEnvtrong cấu hình cho sshd- hoặc SendEnvcài đặt của người dùng (trong sshcấu hình của bạn ).

Không phải tất cả các máy chủ chấp nhận các biến địa phương của bạn thông qua ssh.

Ngay cả khi thiết lập cấu hình cho phép, vẫn có thể (đặc biệt là khi bạn đang kết nối với người dùng root ) mà ai đó đã quyết định rằng miền địa phương cho người dùng đó phải là POSIX. Đối với root , điều đó có ý nghĩa bởi vì bạn sẽ gặp ít rắc rối hơn bằng cách chọn / dán sao chép.

Ví dụ: một số hệ thống sử dụng /etc/profile.d/lang.shđể đặt ngôn ngữ cho việc sử dụng tương tác. Kịch bản đó khác với hệ thống này và hệ thống khác và là vị trí thứ hai (sau cấu hình ssh / sshd) để xem xét khi tìm lời giải thích tại sao thông tin ngôn ngữ không được truyền đến hệ thống từ xa. Với Red Hat (CentOS), tập lệnh cố gắng lấy thông tin từ cấu hình hệ thống và nhà, ví dụ:

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 thì khác, đưa ra các giả định về ssh và gdm trước khi đọc về cơ bản các tệp giống nhau:

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

Đối với các máy chủ cụ thể của bạn (phiên bản không được chỉ định), tập lệnh có thể khác nhau từ bản phát hành này đến bản phát hành khác. Các máy chủ Debian của tôi không có tệp đó - và dựa vào ngôn ngữ hệ thống mặc định và gdm (có thể khác nhau) để đặt ngôn ngữ tương tác. Kết nối ssh của bạn có thể sử dụng một giá trị khác với ngôn ngữ hệ thống so với phiên tương tác sử dụng X (thông qua gdm). Trong trường hợp đó, hệ thống locale là nơi để sửa chữa (xem Locale trong wiki Debian).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.