mosh-server membutuhkan lokal asli UTF-8 untuk dijalankan

9

Saya mencoba terhubung dari server Gentoo ke RHEL saya. Keduanya telah moshdiinstal, namun saya mendapatkan kesalahan ini:

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.

Di RHEL saya memiliki lokal berikut:

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

Bagaimana saya bisa memperbaikinya?

UPDATE: Masalahnya tampaknya di sisi Gentoo, menyambung ke server debian menghasilkan kesalahan yang sama, menghubungkan menggunakan karya distro lain.

UPDATE2: Saya memperbaikinya dengan menambahkan

LANG="en_US.UTF-8"
export LANG

ke ~/.bashrc

Petr
sumber
Bagi mereka yang menggunakan Ubuntu atau distro seperti Debian, di sini mungkin ada solusinya.
Pablo A

Jawaban:

6

Solusi Sederhana

user@machine:~$ LC_ALL="en_US.UTF-8" mosh-server
Antonio Feitosa
sumber
Jika tidak jelas, ini dapat digunakan pada klien:LC_ALL="en_US.UTF-8" mosh root@server
Tim Visee
3

moshmenggunakan lingkungan lokal yang didukung oleh ssh. Meskipun moshtampaknya tidak memiliki opsi verbose atau debug, Anda dapat menentukan sshperintah apa yang digunakan saat menghubungkan dan dengan menambahkan -vvvopsi dapat sshmenunjukkan variabel lokal apa yang dikirim .

Misalnya, dimulai dengan

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

Anda mungkin melihat

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

untuk POSIX, dan

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

yang menunjukkan bahwa server mengkonfirmasi variabel yang digunakan. Remote sshdmungkin mengabaikan beberapa lingkungan Anda tergantung pada pengaturan AcceptEnvdalam konfigurasi untuk sshd- atau SendEnvpengaturan pengguna Anda (dalam sshkonfigurasi Anda ).

Tidak semua server menerima variabel lokal Anda melalui ssh.

Bahkan dengan pengaturan konfigurasi permisif, masih mungkin (terutama karena Anda terhubung ke pengguna root ) bahwa seseorang telah memutuskan bahwa lokal untuk pengguna itu harus POSIX. Untuk root , itu masuk akal karena Anda akan mendapat masalah lebih sedikit dengan memilih / menempelkan penyalinan.

Sebagai contoh, beberapa sistem digunakan /etc/profile.d/lang.shuntuk mengatur lokal untuk penggunaan interaktif. Skrip itu berbeda dari satu sistem ke sistem lainnya, dan merupakan tempat kedua (setelah konfigurasi ssh / sshd) untuk dipertimbangkan ketika mencari penjelasan mengapa informasi lokal tidak diteruskan ke sistem jarak jauh. Dengan Red Hat (CentOS) skrip mencoba untuk mendapatkan informasi dari konfigurasi sistem dan rumah, misalnya,

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 berbeda, membuat asumsi tentang ssh dan gdm sebelum membaca file yang sama:

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

Untuk server khusus Anda (versi tidak ditentukan), skrip mungkin berbeda dari satu rilis ke rilis lainnya. Server Debian saya tidak memiliki file itu - dan mengandalkan lokal sistem default dan gdm (yang dapat berbeda) untuk mengatur lokal interaktif. Koneksi ssh Anda dapat menggunakan nilai yang berbeda dengan sistem lokal daripada sesi interaktif menggunakan X (via gdm). Dalam hal itu, sistem lokal adalah tempat untuk memperbaiki (lihat Lokal di wiki Debian).

Thomas Dickey
sumber