Для запуска 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 приводит к той же ошибке, при подключении с использованием других дистрибутивов.

ОБНОВЛЕНИЕ2: я исправил это, добавив

LANG="en_US.UTF-8"
export LANG

в ~/.bashrc

Petr
источник
Для тех, кто использует Ubuntu или любой Debian, такой как дистрибутив, здесь может быть решение.
Пабло А

Ответы:

6

Простое решение

user@machine:~$ LC_ALL="en_US.UTF-8" mosh-server
Антонио Фейтоса
источник
В случае, если неясно, это может быть использовано на клиенте:LC_ALL="en_US.UTF-8" mosh root@server
Тим Визи
3

moshиспользует языковую среду, поддерживаемую ssh. Хотя, по- moshвидимому, нет подробных или отладочных параметров, вы можете указать, какую 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может игнорировать некоторые из вашей среды в зависимости от настроек AcceptEnvв конфигурации для sshd- или SendEnvнастроек вашего пользователя (в вашей sshконфигурации).

Не все серверы принимают ваши языковые переменные через ssh.

Даже при разрешительной настройке конфигурации все еще возможно (особенно если вы подключаетесь к пользователю root ), что кто-то решил, что языковой стандарт для этого пользователя должен быть POSIX. Для root это имеет некоторый смысл, потому что вы могли бы столкнуться с меньшими трудностями при копировании с помощью select / paste.

Например, некоторые системы используют /etc/profile.d/lang.shдля установки локаль для интерактивного использования. Этот сценарий отличается от одной системы к другой и занимает второе место (после конфигураций ssh ​​/ sshd), которое следует учитывать при поиске объяснения, почему информация о локали не передается в удаленную систему. В 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).

Томас Дики
источник