помогите с локализацией (читаемый вывод koi8-r)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

v4567
Сообщения: 162
ОС: Devuan

помогите с локализацией

Сообщение v4567 »

Есть linux - lfs который работает без графики - консоль 80x25 Изначально в нём консоль была настроена на utf8
С этого компьютера захожу на другой комп по ssh (на котором консоль настроена на koi8-r) и запускаю там некоторую консольную программу которая выводит в koi8-r Соответственно вижу каракули.
Насколько я понял прописывание LANG=KOI8-R ... LC_ALL=KOI8-R
не должно помочь (и на самом деле не помогает) так как это настройки которые говорят программа в какой кодировке выводить - у меня и так выводится в KOI8-R
На сколько я понял мне надо консольному драйверу задать перекодеровку вывода программы KOI8-R в вывод на мою консоль в UTF8
Вопрос как это сделать?
В setfont по опции -m указывал таблицу перекодировки из koi8-r в utf8 - не помогло.
Не понятно как вообще посмотреть какие шрифты используются, какая таблица перекодировки используется?
За помощь заранее благодарен.
Спасибо сказали:
Kopilov
Сообщения: 958
ОС: [K]Ubuntu, Debian

Re: помогите с локализацией

Сообщение Kopilov »

v4567 писал(а):
29.12.2015 18:22
запускаю там некоторую консольную программу которая выводит в koi8-r

Попробуйте к её вызову дописать | iconv -f KOI8-R -t UTF-8
Спасибо сказали:
v4567
Сообщения: 162
ОС: Devuan

Re: помогите с локализацией

Сообщение v4567 »

Думаю, это не поможет, ведь iconv это для перекодирования файла.
Ещё вот, что забыл написать.
Для установки шрифтов используется пакет kbd.
И ещё можно входить через ssh вот так:
luit -encoding KOI8-R ssh .....
или запустить screen и в его командной строке выполнить команду :encoding koi8-r
тогда с кодировкой не будет проблем, но так не хотелось бы делать, не потому что это не совсем правильно, а потому что можно ведь сделать и без этого.
Хотелось бы узнать как это сделать без этих ухищрений.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21479
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: помогите с локализацией

Сообщение Bizdelnick »

Сгенерируйте на сервере ту же локаль, что у Вас используется на клиенте.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
v4567
Сообщения: 162
ОС: Devuan

Re: помогите с локализацией

Сообщение v4567 »

там где запускается программа локаль koi8-r
на компьютере с которого захожу по ssh локаль utf8, сделать на нём локаль koi8-r не получается
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21479
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: помогите с локализацией

Сообщение Bizdelnick »

v4567 писал(а):
29.12.2015 23:49
там где запускается программа локаль koi8-r

Вот там же сгенерируйте юникодную локаль, в точности совпадающую с локалью на клиенте.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
v4567
Сообщения: 162
ОС: Devuan

Re: помогите с локализацией

Сообщение v4567 »

точно так же я могу сгенерировать и на клиенте локаль koi8-r только вот я не знаю как это сделать
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21479
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: помогите с локализацией

Сообщение Bizdelnick »

v4567 писал(а):
30.12.2015 00:23
точно так же я могу сгенерировать и на клиенте локаль koi8-r

Можете, только от этого ничего не изменится.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
v4567
Сообщения: 162
ОС: Devuan

Re: помогите с локализацией

Сообщение v4567 »

почему? Объясните пожалуйста.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21479
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: помогите с локализацией

Сообщение Bizdelnick »

Когда Вы заходите по ssh на сервер, переменные окружения, отвечающие за выбор локали, сохраняются. Соответственно, если бы на сервере была сгенерирована нужная локаль, всё сразу заработало бы независимо от того, какая локаль установлена на сервере по умолчанию.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

Re: помогите с локализацией

Сообщение bormant »

Посмотрите на luit, в man luit есть пример и для ssh.
Спасибо сказали:
v4567
Сообщения: 162
ОС: Devuan

Re: помогите с локализацией

Сообщение v4567 »

Bizdelnick не совсем Вас понял. Если зайти на сервер непосредственно через терминал и запустить эту программу в консоле 80x25 - (на сервере локаль KOI8-R)
то всё нормально.
На сколько я понял ssh передаёт на клиент в кодировке KOI8-R, а на клиенте UTF8
вот и получаем каракули, причём если установить на клиенте LANG и LC_ALL в KOI8-R это не поможет так как ssh и так передаёт в KOI8-R а вот консольный драйвер выводит в UTF8

Ранее я писал что с luit всё работает нормально, но хотелось бы без него, а главное хотелось бы разобраться как менять кодировку в самом драйвере консоли.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21479
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: помогите с локализацией

Сообщение Bizdelnick »

v4567 писал(а):
30.12.2015 12:57
На сколько я понял ssh передаёт на клиент в кодировке KOI8-R, а на клиенте UTF8

ssh передаёт то, что выводят программы, без каких бы то ни было изменений. А программы должны выводить то, что прописано в локали. Выбор локали определяется переменными окружения, которые наследуются из клиентской сессии. И они таки выводили бы UTF-8, но, похоже, соответствующей локали на сервере просто нет. Вот я и советую её сгенерировать. Для верности зайдите по ssh на сервер и посмотрите, что покажет env | grep ^LC_ — не исключено, что эти переменные всё-таки где-то переопределяются.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: помогите с локализацией

Сообщение eddy »

Пишем:

Код: Выделить всё

export LC_ALL=ru_RU.koi8-r
export LC_NUMERIC=C
ssh user@host

и все будет кошерно, несмотря на хрюникод. Естественно, как уже говорили, предварительно надо нормальную локаль сгенерировать.
А еще лучше в ~/.bashrc прописать эти две строчки, чтобы, несмотря на хрюникодные общие настройки, локаль была нормальной!
Делюсь своим, может пригодится:

Код: Выделить всё

# .bashrc

# User specific aliases and functions

# Source global definitions

if [ -f /etc/profile ]; then
    . /etc/profile
fi
if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

export LD_LIBRARY_PATH="/usr/local/lib"
export PS1="\[\033[1;33;41m\h>\]\[\033[1;32;40m \D{%d.%m, %H:%M}\] \[\033[1;33;40m\w\]\[\033[1;32;40m\]\[\033[0;37;40m\n"
export EDITOR="/usr/bin/mcedit"
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig"
export HISTCONTROL="ignoreboth:erasedups"
export KEYBOARD_KEY_TIMEOUT_US=1000
export GNUTERM=wxt   # для вывода графиков в octave

function round(){ [ "$2" = "" ] && NUM=3 || NUM=$2; echo $1 | sed "s/\([[:digit:]]*\.[[:digit:]]\{,$NUM\}\).*/\1/"; }
function sin(){ echo "scale=10; s($1*a(1)/45);" | bc -l; }
function cos(){ echo "scale=10; c($1*a(1)/45);" | bc -l; }
function tan(){ echo "scale=10; arg=$1*a(1)/45; s(arg)/c(arg);" | bc -l; }
function logn(){ echo "scale=10; l($1);" | bc -l; }
function log(){ echo "scale=10; l($1)/l(10);" | bc -l; }
function pow(){ echo "scale=10; ($1)^($2);" | bc -l; }
function sqrt(){ echo "scale=10; sqrt($1);" | bc -l; }
function exp(){ echo "scale=10; e($1);" | bc -l; }
function bin2hex(){ echo "obase=16;ibase=2;$1" | bc; }
function bin2dec(){ echo "obase=10;ibase=2;$1" | bc; }
function dec2hex(){ echo "obase=16;ibase=10;$1" | bc; }
function lower(){ echo $1 | tr [:upper:] [:lower:]; }
function upper(){ echo $1 | tr [:lower:] [:upper:]; }
function hex2binary(){ echo "obase=2;ibase=16; $(upper $1)" | bc; }
function hex2dec(){ echo "obase=10;ibase=16; $(upper $1)" | bc; }
alias pi="echo 'scale=10; a(1)*4;' | bc -l"
export PI=$(pi)

alias oo2pdf="libreoffice --convert-to pdf --headless"
alias soffice="OOO_FORCE_DESKTOP=gnome /usr/bin/soffice"
alias mc='ln -fs ~/.mc/normal-panels.ini ~/.config/mc/panels.ini && ln -fs ~/.mc/normal-ini ~/.config/mc/ini && . /usr/lib/mc/mc-wrapper.sh'
alias mcg='ln -fs ~/.mc/geany-panels.ini ~/.config/mc/panels.ini && ln -fs ~/.mc/geany-ini ~/.config/mc/ini && . /usr/lib/mc/mc-wrapper.sh'
alias bc='bc -l'
alias du='du -h'
alias df='df -h'
alias free='free -m'
alias iconv='iconv -c'
alias d='dropbox puburl '
alias g='grep -Rin --exclude=".*"'
alias poweroff='sudo /sbin/poweroff'

# видеозапись рабочего стола
alias recdesktop="ffmpeg -f x11grab -s 1680x1050 -r 8 -i :0.0 -qscale 0 "
alias recwebcam='ffmpeg -r 8 -f video4linux2 -s 640x480 -i /dev/video0 -f alsa -i hw:0,0 -vcodec libx264 '

# видео с домашнего компьютера
alias homeplay="ssh 192.168.43.119 mplayer tv:// -vo gl2"

export PATH=$PATH:$HOME/bin:/sbin:/usr/sbin
if [ "$DISPLAY" != "" ]; then
    pgrep xscreensaver 2>&1 > /dev/null || (xscreensaver -nosplash &)
else
#    setfont -v Cyr_a8x16
#    mapscrn koi2alt
    printf "\033(K"
    mapscrn koi2alt
    #loadkeys ruwin_alt-KOI8-R
    setfont Cyr_a8x16
fi

#export LC_ALL="ru_RU.koi8-r"
export LC_NUMERIC="C"

# для тупых GTK'шных приложений, ломающих кодировку
export G_BROKEN_FILENAMES=1
export G_FILENAME_ENCODING=koi8-r
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21479
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: помогите с локализацией

Сообщение Bizdelnick »

Отмечу, что представления о нормальности у eddy весьма своеобразные, и необдуманно следовать его советам не нужно.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
v4567
Сообщения: 162
ОС: Devuan

Re: помогите с локализацией

Сообщение v4567 »

До сих пор бьюсь над проблемой но пока не получается.

1. На сколько я знал программа сама определяет какая кодировка в системе и выводит в этой кодировке - KOI8-R или UTF-8 или 866.
Попытался это проверить следующим образом, сбросил эту программу, её базу данных на клиентский компьютер где локаль UTF-8 Запустил её и всё нормально, то есть наверное действительно определяет какая кодировка в системе и в этой кодировке выводит.
Получается что действительно если по ssh передаётся локаль клиента utf-8 и на сервере установить локаль utf-8 то всё должно заработать.
2. Смотрю на сервере.
Запускаю

Код: Выделить всё

env | grep ^LC_
и ничего не получаю, возвращается командная строка и всё.
Запускаю

Код: Выделить всё

locale -a
и получаю:

Код: Выделить всё

C
C.UTF-8
POSIX
ru_RU.koi8r
russian
ru_UA.utf8


Получается что действительно нет кодировки ru_RU.UTF-8, есть ru_UA.UTF-8

Смотрю в файл: /etc/locale.gen и ru_RU.UTF-8 закоментированна, раскоментирую, запускаю

Код: Выделить всё

locale-gen
потом

Код: Выделить всё

locale -a
получаю

Код: Выделить всё

C
C.UTF-8
POSIX
ru_RU.koi8r
ru_RU.utf8
russian
ru_UA.utf8


появилась ru_RU.UTF-8

но почему то UTF-8 маленькими написано - может так надо.

Далее выполняю

Код: Выделить всё

env | grep ^LC_
снова пустота.

Перезагружаю сервер.

Захожу с клиента и не работает - каракули.

3. Перед входом по ssh выполнял:

Код: Выделить всё

export LC_ALL=ru_RU.koi8-r
export LC_NUMERIC=C


то же не помогло.

Не знаю что и делать.....
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21479
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: помогите с локализацией

Сообщение Bizdelnick »

У меня в конфиге /etc/ssh/ssh_config есть вот такое:

Код: Выделить всё

Host *
    # тут много закомментированных параметров
    SendEnv LANG LC_*
    # и тут ещё несколько параметров
У Вас такое имеется? Если нет, то добавьте.
Что касается указания кодировки как UTF-8 или utf8 — по идее они должны обрабатываться как синонимы, но, помнится, это не всегда так происходит (подробностей не помню). Если не сработает, будем разбираться.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
v4567
Сообщения: 162
ОС: Devuan

Re: помогите с локализацией

Сообщение v4567 »

такого нету у меня
написал
всё равно не работает.


если бы как то проверить передаётся ли локаль с клиента по ssh?
получается если бы передавалась локаль с клиента что она utf8 то и программа выдала бы в utf8
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21479
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: помогите с локализацией

Сообщение Bizdelnick »

v4567 писал(а):
30.12.2015 18:03
если бы как то проверить передаётся ли локаль с клиента по ssh?

А что Вы делали парой сообщений выше, если не это?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
v4567
Сообщения: 162
ОС: Devuan

Re: помогите с локализацией

Сообщение v4567 »

В общем можно сказать поборол локализацию.
Войдя на сервер под определённым пользователем ему выдавался не шел, а запускалась программа и пользователь видел уже окно программы и скорее всего на сервере в окружении этого пользователя стояла локализация koi8-r
Программа выводит информацию в цифро-буквенном режиме 80x25, запускалась она скриптами, в самих скриптах не нашёл явного задания локализации, поставил перед самым запуском программы следующее:

Код: Выделить всё

export LANG=ru_RU.UTF-8
export LC_ALL="ru_RU.UTF-8"


и всё стало нормально, сама программа (как я уже писал ранее) смотрит на переменные окружения, а там локализация ru_RU.UTF-8 и выводит в этой кодировке.

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

И ещё один момент, с таким же успехом на клиентском компьютере я мог бы поставить локализацию ru_RU.KOI8-R при этом на сервере ничего не делать и то же было бы всё нормально. Это я кстати и пытался сделать изначально, но как я не прописывал:

Код: Выделить всё

export LANG=ru_RU.KOI8-R
export LC_ALL="ru_RU.KOI8-R"


ничего не получалось. Вопрос почему?

Кстати я пробовал на клиенте запускать screen, в screen менять локализацию на KOI8-R по моему командой encoding KOI8-R и из screen уже заходио по ssh (при этом на сервере была KOI8-R) и всё было нормально, а вот прописывания в ~/.bashrc и в других настроечных файлах bash локализацию KOI8-R (при этом выполнял перелогинивание пользователе) и не помогало. На понятно почему?

Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21479
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: помогите с локализацией

Сообщение Bizdelnick »

v4567 писал(а):
15.01.2016 14:22
Получается что при ssh соединении, ssh берёт локализацию из переменных окружения для пользователя заведённого на сервере, а не пользователя от которого я захожу с клиентского компьютера.

ssh ничего ниоткуда не берёт. Он запускается в локальном окружении, другого у него нет. При соединении с сервером он передаёт локальные переменные окружения, указанные в SendEnv, причём применение этих переменных окружения должно быть разрешено в конфигурации сервера (AcceptEnv). Уже на сервере запускается программа (обычно логин-шелл), которая может (и в случае логин-шелла так и делает) инициализировать окружение так, как ей вздумается, то есть сохранив или переопределив переданные переменные.
Если у Вас это не работало, то либо потому, что на сервере не был прописан AcceptEnv, либо потому, что в каком-то из Ваших скриптов локаль переопределялась.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: