mosh-server a besoin d'une locale native UTF-8 pour fonctionner

9

J'essaie de me connecter de mon Gentoo au serveur RHEL. Les deux ont moshinstallé, mais je reçois cette erreur:

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.

Sur RHEL, j'ai les paramètres régionaux suivants:

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

Comment puis-je réparer cela?

MISE À JOUR: Le problème semble être du côté de Gentoo, la connexion au serveur Debian produit la même erreur, la connexion à l'aide d'autres distributions.

UPDATE2: je l'ai corrigé en ajoutant

LANG="en_US.UTF-8"
export LANG

dans ~/.bashrc

Petr
la source
Pour ceux qui utilisent Ubuntu ou toute distribution de type Debian, voici une solution.
Pablo A

Réponses:

6

Solution simple

user@machine:~$ LC_ALL="en_US.UTF-8" mosh-server
Antonio Feitosa
la source
Dans le cas où ce n'est pas clair, cela peut être utilisé sur le client:LC_ALL="en_US.UTF-8" mosh root@server
Tim Visee
3

moshutilise l'environnement local pris en charge par ssh. Bien qu'il moshn'y ait apparemment aucune option détaillée ou de débogage, vous pouvez lui indiquer la sshcommande à utiliser lors de la connexion et en ajoutant une -vvvoption, il peut sshmontrer quelles variables locales il envoie .

Par exemple, en commençant par

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

vous pourriez voir

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

pour POSIX, et

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

qui montrent que le serveur confirme les variables utilisées. La télécommande sshdpeut ignorer une partie de votre environnement en fonction du paramètre de AcceptEnvdans la configuration de sshd- ou des SendEnvparamètres de votre utilisateur (dans votre sshconfiguration).

Tous les serveurs n'acceptent pas vos variables locales via ssh.

Même avec la configuration configurée de manière permissive, il est toujours possible (en particulier depuis que vous vous connectez à l' utilisateur root ) que quelqu'un ait décidé que les paramètres régionaux pour cet utilisateur devraient être POSIX. Pour root , cela a du sens car vous auriez moins de problèmes en sélectionnant / collant la copie.

Par exemple, certains systèmes utilisent /etc/profile.d/lang.shpour définir les paramètres régionaux pour une utilisation interactive. Ce script diffère d'un système à l'autre et est le deuxième endroit (après les configurations ssh / sshd) à considérer lors de la recherche d'une explication pour laquelle les informations locales ne sont pas transmises à un système distant. Avec Red Hat (CentOS), le script tente d'obtenir des informations à partir de la configuration système et domestique, par exemple,

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 est différent, faisant des hypothèses sur ssh et gdm avant de lire essentiellement les mêmes fichiers:

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

Pour vos serveurs particuliers (version non spécifiée), le script peut différer d'une version à l'autre. Mes serveurs Debian n'ont pas ce fichier - et s'appuient sur les paramètres régionaux par défaut du système et gdm (qui peuvent différer) pour définir les paramètres régionaux interactifs. Votre connexion ssh peut utiliser une valeur différente avec les paramètres régionaux du système qu'une session interactive utilisant X (via gdm). Dans ce cas, les paramètres régionaux du système sont l'endroit à corriger (voir Paramètres régionaux dans le wiki Debian).

Thomas Dickey
la source