Слетает кодировка кириллицы на удалённой машине при ssh соединении

Добрый день!

Эта проблема появилась у меня на openSUSE 42.3, которую я поставила себе несколько дней назад; на предыдущих версиях oS такого не было.
На моей машине все буквы отображаются нормально (не считая консоли tty, но там это мне не мешает). Но на машине, на которую я захожу через ssh, это выглядит так:


$ ls task/SU2DATA/
?????????????????? ??????????

а при попытке править строку текстового файла, содержащую кириллицу, через mcedit или vi, оно плодит куски этой строки:
исходная строка (между “SU2DATA/” и “/TBCDGT_PHI=0.08m” стоит фраза “Магнитная масса”):
OUTPUTPATH = …/SU2DATA/�~\агни�~Bна�~O ма�~A�~Aа/TBCDGT_PHI=0.08m/4x14x14x14/b3.02/tw/TeslaK40s-02/

Удаляю последнюю четвёрку в подстроке “4x14x14x14”, получаю:
OUTPUTPATH = …/SU2DATA/�~\агни�~Bна�~O ма�~A�~Aа/TBCDGT_PHI=0.08m/4x14x14x1x14x14x14/b3.02/tw/TeslaK40s-02/

Пока последнюю проблему решаю тем, что захожу туда через fish, открываю нужный файл в Kate и правлю его оттуда. Но это очень неудобно.

Я пробовала заходить через ssh на разные машины, но везде такая же проблема. При этом, при заходе на те удалённые машины с других компьютеров всё с кодировками нормально.

Помогите, пожалуйста, настроить это как положено.
Заранее спасибо.

Пробовала добавлять строки
Host **
SendEnv LC_

в ~/.ssh/config и
SendEnv LANG LC_*
в /etc/ssh/ssh_config, но ничего не помогло.

Добрый вечер!

Одна машина написала, что ей не нравится в моём подключении:


> ssh natasha@next
Password: 
Last login: Wed Sep  6 18:33:47 2017 from 192.168.0.179
Have a lot of fun...
/usr/bin/manpath: can't set the locale; make sure $LC_* and $LANG are correct
natasha@next:~>

Но как это исправить?

Вывод locale на моей машине:


> locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME=ce_RU.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=

на удалённой (с ошибкой…):


natasha@next:~> locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME=ce_RU.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=

приветствую

с любого терминального клиента такая ерунда, xterm, konsole, текстовая коноль? и пробовали ли под другим пользователем?
подозреваю, какие-то переменные “попортились”

Здравствуйте!

Из konsole и xterm одинаково – с ошибкой при логине, ломаной кодировкой и размножением подстрок. Логин из-под другого пользователя не помогает.

Из tty – без сообщения об ошибке и без размножения подстрок. Только с прямоугольничками вместо русских букв, наверное оттого, что они у меня там и без ssh не отображаются.

Только заметила – если идти на удалённую машину из mc через Shell link, то с русскими буквами всё в порядке (mc установлен вручную из GitHub). А при обычном входе через ssh всё плохо.

хм
glibc-locale установлен?

это по-моему лишнее:

Пробовала добавлять строки
Host **
SendEnv LC_

в ~/.ssh/config и
SendEnv LANG LC_*
в /etc/ssh/ssh_config, но ничего не помогло.

glibc-locale установлен?

Да,


**#** zypper se glibc-locale
Loading repository data...
Reading installed packages...

S | Name               | Summary                            | Type    
--+--------------------+------------------------------------+--------
i | glibc-locale       | Locale Data for Localized Programs | package
i | glibc-locale-32bit | Locale Data for Localized Programs | package

Добрый вечер!

Повозившись некоторое время с другом, удалось найти решение – на удалённую машину не стоит передавать параметр LC_TIME:


> cat /etc/ssh/ssh_config | grep '.'| grep -v '# '
#       $OpenBSD: ssh_config,v 1.30 2016/02/20 23:06:23 sobrado Exp $
#KexDHMin 1024
Host *
    ForwardX11Trusted yes
    SendEnv LANG LC_CTYPE LC_NUMERIC LC_COLLATE LC_MONETARY LC_MESSAGES
    SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION
**#SendEnv LC_TIME**
    SendEnv LC_ALL
#

Теперь всё работает как надо:


> ssh natasha@prime 
Password: 
Last login: Fri Sep  8 20:49:59 2017 from 192.168.0.179
Have a lot of fun...
natasha@prime:~> 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=
natasha@prime:~> ls task/SU2DATA/
beta_c  CC  PL  TBC  Магнитная масса  Разное

Хотя странно, почему временной параметр так влияет на кодировку…

Спасибо, что попытались помочь!

похоже ему не нравится LC_TIME=ce_RU.UTF-8