mosh-server ha bisogno di una localizzazione nativa UTF-8 per funzionare


9

Sto cercando di connettermi dal mio server Gentoo al server RHEL. Entrambi hanno moshinstallato, tuttavia ottengo questo errore:

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.

Su RHEL ho le seguenti localizzazioni:

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

Come posso risolvere questo problema?

AGGIORNAMENTO: Il problema sembra essere sul lato Gentoo, la connessione al server debian produce lo stesso errore, la connessione utilizzando altre opere distro.

UPDATE2: l'ho risolto aggiungendo

LANG="en_US.UTF-8"
export LANG

in ~/.bashrc


Per coloro che usano Ubuntu o qualsiasi Debian come la distro, qui potrebbe esserci una soluzione.
Pablo A

Risposte:


6

Soluzione semplice

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

Nel caso in cui non sia chiaro, questo può essere utilizzato sul client:LC_ALL="en_US.UTF-8" mosh root@server
Tim Visee,

3

moshutilizza l'ambiente locale supportato da ssh. Sebbene moshapparentemente non abbia opzioni verbose o di debug, puoi dirgli quale sshcomando usare durante la connessione e aggiungendo -vvvun'opzione può sshmostrare quali variabili locali invia .

Ad esempio, a partire da

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

potresti vedere

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

per POSIX e

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

che mostrano che il server conferma le variabili utilizzate. Il telecomando sshdpotrebbe ignorare parte dell'ambiente in base all'impostazione di AcceptEnvnella configurazione per sshd- o alle SendEnvimpostazioni dell'utente (nella sshconfigurazione).

Non tutti i server accettano le variabili locali tramite ssh.

Anche con l'impostazione della configurazione permissivamente, è ancora possibile (soprattutto dal momento che ci si sta connettendo all'utente root ) che qualcuno abbia deciso che la locale per quell'utente dovrebbe essere POSIX. Per root , questo ha un senso perché potresti avere meno problemi selezionando / incolla la copia.

Ad esempio, alcuni sistemi utilizzano /etc/profile.d/lang.shper impostare le impostazioni internazionali per l'uso interattivo. Quello script differisce da un sistema all'altro ed è il secondo posto (dopo le configurazioni ssh / sshd) da considerare quando si cerca una spiegazione del perché le informazioni sulla locale non vengono passate a un sistema remoto. Con Red Hat (CentOS) lo script tenta di ottenere informazioni dalla configurazione del sistema e della home, ad es.

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 è diverso, facendo ipotesi su ssh e gdm prima di leggere essenzialmente gli stessi file:

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

Per i tuoi server particolari (versione non specificata), lo script può differire da una versione all'altra. I miei server Debian non hanno quel file e si basano sulla locale di sistema predefinita e su gdm (che può differire) per impostare la locale interattiva. La tua connessione ssh potrebbe usare un valore diverso con le impostazioni locali del sistema rispetto a una sessione interattiva usando X (via gdm). In tal caso, le impostazioni locali del sistema sono il luogo da correggere (vedere Impostazioni locali nel wiki Debian).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.