mosh-серверу для запуску потрібна рідна мова 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


Для тих, хто використовує Ubuntu або будь-який дистрибутив, подібний Debian, тут може бути рішення.
Пабло А

Відповіді:


6

Просте рішення

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

Якщо це не зрозуміло, це можна використати для клієнта:LC_ALL="en_US.UTF-8" mosh root@server
Tim Visee

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.

Навіть якщо налаштування конфігурації дозволено, все-таки можливо (тим більше, що ви підключаєтесь до кореневого користувача), щоб хтось вирішив, що локал для цього користувача повинен бути POSIX. Для кореня це має певний сенс, оскільки ви можете потрапити в менше проблем, вибравши / вставити копіювання.

Наприклад, деякі системи використовують /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).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.