mosh-server potrzebuje natywnych ustawień narodowych UTF-8 do uruchomienia

9

Próbuję połączyć się z mojego Gentoo do serwera RHEL. Oba zostały moshzainstalowane, ale pojawia się ten błąd:

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.

Na RHEL mam następujące lokalizacje:

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

Jak mogę to naprawić?

AKTUALIZACJA: Problem wydaje się być po stronie Gentoo, połączenie z serwerem debian powoduje ten sam błąd, połączenie przy użyciu innych dystrybucji działa.

UPDATE2: Naprawiłem to, dodając

LANG="en_US.UTF-8"
export LANG

w ~/.bashrc

Petr
źródło
Dla tych, Ubuntu lub Debiana jak żadnego distro, tutaj może być rozwiązaniem.
Pablo A

Odpowiedzi:

6

Proste rozwiązanie

user@machine:~$ LC_ALL="en_US.UTF-8" mosh-server
Antonio Feitosa
źródło
Jeśli nie jest to jasne, można tego użyć na kliencie:LC_ALL="en_US.UTF-8" mosh root@server
Tim Visee,
3

moshużywa środowiska ustawień regionalnych obsługiwanego przez ssh. Chociaż moshnajwyraźniej nie ma pełnych opcji ani opcji debugowania, możesz powiedzieć, jakiej sshkomendy użyć podczas łączenia, a dodając -vvvopcję może sshpokazać, które zmienne ustawień regionalnych wysyła .

Na przykład, zaczynając od

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

możesz zobaczyć

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

dla POSIX i

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

które pokazują, że serwer potwierdza używane zmienne. Pilot sshdmoże ignorować niektóre środowiska w zależności od ustawienia AcceptEnvw konfiguracji dla sshd- lub ustawień użytkownika SendEnv(w sshkonfiguracji).

Nie wszystkie serwery akceptują zmienne regionalne przez ssh.

Nawet jeśli konfiguracja konfiguracji jest dozwolona, ​​nadal jest możliwe (zwłaszcza, że ​​łączysz się z użytkownikiem root ), że ktoś zdecydował, że ustawieniami narodowymi tego użytkownika powinien być POSIX. W przypadku rootowania ma to sens, ponieważ wpadłbyś w mniej kłopotów, wybierając / wklejając kopiowanie.

Na przykład niektóre systemy używają /etc/profile.d/lang.shustawień regionalnych do użytku interaktywnego. Ten skrypt różni się w zależności od systemu i jest drugim miejscem (po konfiguracjach ssh / sshd), które należy wziąć pod uwagę, szukając wyjaśnienia, dlaczego informacje o ustawieniach regionalnych nie są przekazywane do zdalnego systemu. W Red Hat (CentOS) skrypt próbuje uzyskać informacje z konfiguracji systemowej i domowej, np.

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 jest inny, przyjmując założenia dotyczące ssh i gdm przed odczytaniem zasadniczo tych samych plików:

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

Dla poszczególnych serwerów (wersja nieokreślona) skrypt może się różnić w zależności od wersji. Moje serwery Debian nie mają tego pliku - i ustawiają interaktywne ustawienia regionalne za pomocą domyślnych ustawień regionalnych systemu i gdm (które mogą się różnić). Twoje połączenie ssh może mieć inną wartość w ustawieniach regionalnych systemu niż sesja interaktywna z użyciem X (przez gdm). W takim przypadku ustawienia regionalne systemu są miejscem do naprawy (zobacz Ustawienia regionalne w wiki Debiana).

Thomas Dickey
źródło