screen +CP866
Тем, кто пытается работать с серверами семейства windows по ssh протоколу посвящается...
Благодаря природной лени не могу похвастать авторством, проблему решили до меня здесь http://osdir.com/ml/gnu.screen/2003-09/msg00080.html
Основная проблема в том, что в отличие от luit, исходники screen не содержат кодировочных таблиц CP866. Для генерации таблицы нам любехно предоставили следующий скрипт:
#!/usr/bin/tclsh # # We need tcl >= 8.3 # package require Tcl 8.3 # # usage makeenc encoding-name screen-font-no # screen-font-id must be valid C-style integer i.e. start hexadecimal # value with 0x and octal with 0 # for example makeenc KOI8-R 0xa1. # set encoding_name [lindex $argv 0] set font_no [expr [lindex $argv 1]+0] regsub "cp-" [string tolower $encoding_name] "cp" tclenc if {[string length $encoding_name]%2 ==0} { append encoding_name "\0" } set filename [format %02x $font_no] set f [open $filename w] fconfigure $f -encoding binary puts -nonewline $f "ScreenI2UTF8\0[format %c $font_no]\0\200$encoding_name\0" for {set i 0x80} {$i<0x100} {incr i} { set ucode [scan [encoding convertfrom $tclenc [format %c $i]] %c] puts -nonewline $f [binary format "SS" $i $ucode] } puts -nonewline $f "\n"
Судя по коментам его необходимо записать в файлик makeenc, далее chmod a+x makeenc
Выполнять сей скрипт можно без рутовых прав:
wi@mylin$./makeenc CP866 0xbd
Собсно первый параметр указывает на кодировку, второй - идентификатор таблицы в терминах исходников screen. в каталоге появится файлик bd с необходимой таблицей.
Далее нам потребуется распаковать сурс
# ebuild /usr/portage/app-misc/screen/screen-4.0.3.ebuild unpack
Далее следует скопировать bg в каталог /var/tmp/portage/app-misc/screen-4.0.3/work/screen-4.0.3/utf8encodings
Для подключения таблицы CP866 необходимо подредактировать файл
/var/tmp/portage/app-misc/screen-4.0.3/work/screen-4.0.3/encoding.c
Ищем в файле struct encoding encodings[] = ... и добавляем в конец нашу таблицу кодировки через запятую следующим образом:
struct encoding encodings[] = { { "C", 0, 0, 0, 0, 0 }, { "eucJP", "B\002I\00401", 0, 1, 0, "\002\004I" }, { "SJIS", "BIBB01", 0, 1, 1, "\002I" }, { "eucKR", "B\003BB01", 0, 1, 0, "\003" }, { "eucCN", "B\001BB01", 0, 1, 0, "\001" }, { "Big5", "B\030BB01", 0, 1, 0, "\030" }, { "KOI8-R", 0, 0x80|'!', 0, 1, 0 }, { "CP1251", 0, 0x80|'?', 0, 1, 0 }, { "UTF-8", 0, -1, 0, 0, 0 }, { "ISO8859-2", 0, 0x80|'B', 0, 0, 0 }, { "ISO8859-3", 0, 0x80|'C', 0, 0, 0 }, { "ISO8859-4", 0, 0x80|'D', 0, 0, 0 }, { "ISO8859-5", 0, 0x80|'L', 0, 0, 0 }, { "ISO8859-6", 0, 0x80|'G', 0, 0, 0 }, { "ISO8859-7", 0, 0x80|'F', 0, 0, 0 }, { "ISO8859-8", 0, 0x80|'H', 0, 0, 0 }, { "ISO8859-9", 0, 0x80|'M', 0, 0, 0 }, { "ISO8859-10", 0, 0x80|'V', 0, 0, 0 }, { "ISO8859-15", 0, 0x80|'b', 0, 0, 0 }, { "jis", 0, 0, 0, 0, "\002\004I" }, { "GBK", "B\031BB01", 0x80|'b', 1, 1, "\031" }, { "CP866", 0, 0x80|'=', 0, 1, 0}
После этого продолжим сборку и установку screen
# ebuild /usr/portage/app-misc/screen/screen-4.0.3.ebuild compile test install qmerge
wi@mylin$ screen
ctrl+a+:
В появившемся приглашении пишем
encoding CP866 utf-8
Нажимаем enter
wi@mylin$ ssh winbox
wi@winbox's password:
Microsoft Windows [Версия 5.2.3790]
(С) Корпорация Майкрософт, 1985-2003.
C:\WINDOWS\system32>
- Для комментирования войдите или зарегистрируйтесь