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>
- Для комментирования войдите или зарегистрируйтесь
