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側にあるようです。debianサーバーに接続すると同じエラーが発生し、他のディストリビューションを使用して接続します。

UPDATE2:追加して修正しました

LANG="en_US.UTF-8"
export LANG

~/.bashrc


UbuntuまたはDebianのようなディストリビューションを使用している人のために、ここに解決策があります。
Pablo A

回答:


6

シンプルなソリューション

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

それがクリアされていない場合には、これは、クライアント上で使用することができます:LC_ALL="en_US.UTF-8" mosh root@server
ティムVisee

3

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経由でロケール変数を受け入れるわけではありません。

(特にrootユーザーに接続しているため)構成設定が許容的に設定されている場合でも、そのユーザーのロケールをPOSIXにする必要があると誰かが決定した可能性があります。以下のためにルートあなたがコピー/ペーストを選択することにより少ないトラブルになるだろうので、それはいくつかの意味があります。

たとえば、一部のシステムは/etc/profile.d/lang.sh、インタラクティブな使用のためにロケールを設定するために使用します。このスクリプトはシステムごとに異なり、ロケール情報がリモートシステムに渡されない理由を探すときに(ssh / sshd構成の後)2番目に考慮する場所です。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 wikiのロケールを参照)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.