помогите с локализацией (читаемый вывод koi8-r)
Модераторы: SLEDopit, Модераторы разделов
-
v4567
- Сообщения: 162
- ОС: Devuan
помогите с локализацией
Есть 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 - не помогло.
Не понятно как вообще посмотреть какие шрифты используются, какая таблица перекодировки используется?
За помощь заранее благодарен.
С этого компьютера захожу на другой комп по 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
-
v4567
- Сообщения: 162
- ОС: Devuan
Re: помогите с локализацией
Думаю, это не поможет, ведь iconv это для перекодирования файла.
Ещё вот, что забыл написать.
Для установки шрифтов используется пакет kbd.
И ещё можно входить через ssh вот так:
luit -encoding KOI8-R ssh .....
или запустить screen и в его командной строке выполнить команду :encoding koi8-r
тогда с кодировкой не будет проблем, но так не хотелось бы делать, не потому что это не совсем правильно, а потому что можно ведь сделать и без этого.
Хотелось бы узнать как это сделать без этих ухищрений.
Ещё вот, что забыл написать.
Для установки шрифтов используется пакет kbd.
И ещё можно входить через ssh вот так:
luit -encoding KOI8-R ssh .....
или запустить screen и в его командной строке выполнить команду :encoding koi8-r
тогда с кодировкой не будет проблем, но так не хотелось бы делать, не потому что это не совсем правильно, а потому что можно ведь сделать и без этого.
Хотелось бы узнать как это сделать без этих ухищрений.
-
Bizdelnick
- Модератор
- Сообщения: 21479
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: помогите с локализацией
Сгенерируйте на сервере ту же локаль, что у Вас используется на клиенте.
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
v4567
- Сообщения: 162
- ОС: Devuan
Re: помогите с локализацией
там где запускается программа локаль koi8-r
на компьютере с которого захожу по ssh локаль utf8, сделать на нём локаль koi8-r не получается
на компьютере с которого захожу по ssh локаль utf8, сделать на нём локаль koi8-r не получается
-
Bizdelnick
- Модератор
- Сообщения: 21479
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: помогите с локализацией
Вот там же сгенерируйте юникодную локаль, в точности совпадающую с локалью на клиенте.
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
v4567
- Сообщения: 162
- ОС: Devuan
Re: помогите с локализацией
точно так же я могу сгенерировать и на клиенте локаль koi8-r только вот я не знаю как это сделать
-
Bizdelnick
- Модератор
- Сообщения: 21479
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: помогите с локализацией
Можете, только от этого ничего не изменится.
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
v4567
- Сообщения: 162
- ОС: Devuan
Re: помогите с локализацией
почему? Объясните пожалуйста.
-
Bizdelnick
- Модератор
- Сообщения: 21479
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: помогите с локализацией
Когда Вы заходите по ssh на сервер, переменные окружения, отвечающие за выбор локали, сохраняются. Соответственно, если бы на сервере была сгенерирована нужная локаль, всё сразу заработало бы независимо от того, какая локаль установлена на сервере по умолчанию.
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
bormant
- Сообщения: 1354
Re: помогите с локализацией
Посмотрите на luit, в man luit есть пример и для ssh.
-
v4567
- Сообщения: 162
- ОС: Devuan
Re: помогите с локализацией
Bizdelnick не совсем Вас понял. Если зайти на сервер непосредственно через терминал и запустить эту программу в консоле 80x25 - (на сервере локаль KOI8-R)
то всё нормально.
На сколько я понял ssh передаёт на клиент в кодировке KOI8-R, а на клиенте UTF8
вот и получаем каракули, причём если установить на клиенте LANG и LC_ALL в KOI8-R это не поможет так как ssh и так передаёт в KOI8-R а вот консольный драйвер выводит в UTF8
Ранее я писал что с luit всё работает нормально, но хотелось бы без него, а главное хотелось бы разобраться как менять кодировку в самом драйвере консоли.
то всё нормально.
На сколько я понял ssh передаёт на клиент в кодировке KOI8-R, а на клиенте UTF8
вот и получаем каракули, причём если установить на клиенте LANG и LC_ALL в KOI8-R это не поможет так как ssh и так передаёт в KOI8-R а вот консольный драйвер выводит в UTF8
Ранее я писал что с luit всё работает нормально, но хотелось бы без него, а главное хотелось бы разобраться как менять кодировку в самом драйвере консоли.
-
Bizdelnick
- Модератор
- Сообщения: 21479
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: помогите с локализацией
ssh передаёт то, что выводят программы, без каких бы то ни было изменений. А программы должны выводить то, что прописано в локали. Выбор локали определяется переменными окружения, которые наследуются из клиентской сессии. И они таки выводили бы UTF-8, но, похоже, соответствующей локали на сервере просто нет. Вот я и советую её сгенерировать. Для верности зайдите по ssh на сервер и посмотрите, что покажет env | grep ^LC_ — не исключено, что эти переменные всё-таки где-то переопределяются.
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
eddy
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: помогите с локализацией
Пишем:
и все будет кошерно, несмотря на хрюникод. Естественно, как уже говорили, предварительно надо нормальную локаль сгенерировать.
А еще лучше в ~/.bashrc прописать эти две строчки, чтобы, несмотря на хрюникодные общие настройки, локаль была нормальной!
Делюсь своим, может пригодится:
Код: Выделить всё
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-rRTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка
-
Bizdelnick
- Модератор
- Сообщения: 21479
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: помогите с локализацией
Отмечу, что представления о нормальности у eddy весьма своеобразные, и необдуманно следовать его советам не нужно.
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
v4567
- Сообщения: 162
- ОС: Devuan
Re: помогите с локализацией
До сих пор бьюсь над проблемой но пока не получается.
1. На сколько я знал программа сама определяет какая кодировка в системе и выводит в этой кодировке - KOI8-R или UTF-8 или 866.
Попытался это проверить следующим образом, сбросил эту программу, её базу данных на клиентский компьютер где локаль UTF-8 Запустил её и всё нормально, то есть наверное действительно определяет какая кодировка в системе и в этой кодировке выводит.
Получается что действительно если по ssh передаётся локаль клиента utf-8 и на сервере установить локаль utf-8 то всё должно заработать.
2. Смотрю на сервере.
Запускаю и ничего не получаю, возвращается командная строка и всё.
Запускаю и получаю:
Получается что действительно нет кодировки ru_RU.UTF-8, есть ru_UA.UTF-8
Смотрю в файл: /etc/locale.gen и ru_RU.UTF-8 закоментированна, раскоментирую, запускаю потом получаю
появилась ru_RU.UTF-8
но почему то UTF-8 маленькими написано - может так надо.
Далее выполняю снова пустота.
Перезагружаю сервер.
Захожу с клиента и не работает - каракули.
3. Перед входом по ssh выполнял:
то же не помогло.
Не знаю что и делать.....
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: помогите с локализацией
У меня в конфиге /etc/ssh/ssh_config есть вот такое:У Вас такое имеется? Если нет, то добавьте.
Что касается указания кодировки как UTF-8 или utf8 — по идее они должны обрабатываться как синонимы, но, помнится, это не всегда так происходит (подробностей не помню). Если не сработает, будем разбираться.
Код: Выделить всё
Host *
# тут много закомментированных параметров
SendEnv LANG LC_*
# и тут ещё несколько параметровЧто касается указания кодировки как UTF-8 или utf8 — по идее они должны обрабатываться как синонимы, но, помнится, это не всегда так происходит (подробностей не помню). Если не сработает, будем разбираться.
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
v4567
- Сообщения: 162
- ОС: Devuan
Re: помогите с локализацией
такого нету у меня
написал
всё равно не работает.
если бы как то проверить передаётся ли локаль с клиента по ssh?
получается если бы передавалась локаль с клиента что она utf8 то и программа выдала бы в utf8
написал
всё равно не работает.
если бы как то проверить передаётся ли локаль с клиента по ssh?
получается если бы передавалась локаль с клиента что она utf8 то и программа выдала бы в utf8
-
Bizdelnick
- Модератор
- Сообщения: 21479
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: помогите с локализацией
А что Вы делали парой сообщений выше, если не это?
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
v4567
- Сообщения: 162
- ОС: Devuan
Re: помогите с локализацией
В общем можно сказать поборол локализацию.
Войдя на сервер под определённым пользователем ему выдавался не шел, а запускалась программа и пользователь видел уже окно программы и скорее всего на сервере в окружении этого пользователя стояла локализация koi8-r
Программа выводит информацию в цифро-буквенном режиме 80x25, запускалась она скриптами, в самих скриптах не нашёл явного задания локализации, поставил перед самым запуском программы следующее:
и всё стало нормально, сама программа (как я уже писал ранее) смотрит на переменные окружения, а там локализация ru_RU.UTF-8 и выводит в этой кодировке.
Получается что при ssh соединении, ssh берёт локализацию из переменных окружения для пользователя заведённого на сервере, а не пользователя от которого я захожу с клиентского компьютера.
И ещё один момент, с таким же успехом на клиентском компьютере я мог бы поставить локализацию ru_RU.KOI8-R при этом на сервере ничего не делать и то же было бы всё нормально. Это я кстати и пытался сделать изначально, но как я не прописывал:
ничего не получалось. Вопрос почему?
Кстати я пробовал на клиенте запускать screen, в screen менять локализацию на KOI8-R по моему командой encoding KOI8-R и из screen уже заходио по ssh (при этом на сервере была KOI8-R) и всё было нормально, а вот прописывания в ~/.bashrc и в других настроечных файлах bash локализацию KOI8-R (при этом выполнял перелогинивание пользователе) и не помогало. На понятно почему?
Войдя на сервер под определённым пользователем ему выдавался не шел, а запускалась программа и пользователь видел уже окно программы и скорее всего на сервере в окружении этого пользователя стояла локализация 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: помогите с локализацией
ssh ничего ниоткуда не берёт. Он запускается в локальном окружении, другого у него нет. При соединении с сервером он передаёт локальные переменные окружения, указанные в SendEnv, причём применение этих переменных окружения должно быть разрешено в конфигурации сервера (AcceptEnv). Уже на сервере запускается программа (обычно логин-шелл), которая может (и в случае логин-шелла так и делает) инициализировать окружение так, как ей вздумается, то есть сохранив или переопределив переданные переменные.
Если у Вас это не работало, то либо потому, что на сервере не был прописан AcceptEnv, либо потому, что в каком-то из Ваших скриптов локаль переопределялась.
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |