[unix] mosh-server를 실행하려면 UTF-8 기본 로케일이 필요합니다

젠투에서 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=

이 문제를 어떻게 해결할 수 있습니까?

업데이트 : 문제는 젠투 측에있는 것으로 보입니다. 데비안 서버에 연결하면 다른 배포판 작업을 사용하여 연결하면 동일한 오류가 발생합니다.

UPDATE2 : 추가하여 수정했습니다.

LANG="en_US.UTF-8"
export LANG

으로 ~/.bashrc



답변

간단한 솔루션

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


답변

mosh에서 지원하는 로캘 환경을 사용합니다 ssh. 하지만 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따라 리모콘 이 일부 환경을 무시할 수 있습니다 .AcceptEnvsshdSendEnvssh

모든 서버가 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

특정 서버 (버전이 지정되지 않음)의 경우 스크립트가 릴리스마다 다를 수 있습니다. 내 데비안 서버에는 해당 파일이 없으며 기본 시스템 로케일과 gdm (상이 할 수 있음)을 사용하여 대화식 로케일을 설정하십시오. ssh 연결은 시스템 로케일에서 X를 사용하는 대화식 세션 (gdm을 통해)과 다른 값을 사용할 수 있습니다. 이 경우, 시스템 로케일을 수정해야합니다 ( Debian 위키의 로케일 참조 ).


답변