The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

[Linux] Скрипт для создания скриншота консоли. (perl console linux)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: perl, console, linux,  (найти похожие документы)
Date: Mon, 17 Jun 2002 05:23:01 +0000 (UTC) From: Max Ischenko <max@malva.com.ua> Newsgroups: fido7.ru.linux Subject: [Linux] Скрипт для создания скриншота консоли. VM> Да! Помню как-то читал статью про скриншот консоли, но там про фрю было. VM> Я посмотрел под линукс - штатными утилитами что-то не получается. Даже VM> снимок консоли не понял откуда взять, из vcs он без цветов :( VM> Кто-нибудь знает как это делать? Причем интересно стандартными VM> средствами, т.е. руками вытащить изображение и какой-нибудь txt2pic на VM> него натравить. И чтобы цвета остались, без них что-нибудь ncurses'ное VM> не смотрится. #!/usr/bin/perl #From: "Andrew B. Sapozhnikov" <sapa@hq.icb.chel.su> #Subject: Re: Как сграбить с консоли? my $ttynum=shift or die "Usage: grab <vttynum>"; die "$ttynum: Incorrect virtual console number" unless $ttynum=~/^\d+$/; $ttydev="/dev/tty" . $ttynum; $vcsadev="/dev/vcsa" . $ttynum; open(VCSA,$vcsadev) or die "Cannot open $vcsadev: $!"; $len=read(VCSA,$buf,16384); close(VCSA); my($height,$width,$curx,$cury)=unpack('C4',$buf); open(T,$ttydev) or die "Cannot open $ttydev: $!"; my $fnt=pack('L4096',0); my $fntx=pack('SSP',256,32,$fnt); ioctl(T,0x4B6B,$fntx) or die "Cannot grab console font: $!"; close(T); my($nchars,$fheight)=unpack('SS',$fntx); if($fheight>=14) { $thickness=2; } else { $thickness=1; } foreach my $c (0..255) { my @tmp; my @ch=split(//,substr($fnt,$c*32,$fheight)); push @tmp, [ split(//,unpack('B8',shift @ch)) ] while @ch; push @font,[ @tmp ]; } print 'BM'.pack('L29', $width*$height*$fheight*4+118,0,118,40,$width*8,$height*$fheight,0x40001, 0,$width*$height*$fheight*4,0x120b,0x120b,16,16, 0x000000,0x000080,0x008000,0x008080,0x800000,0x800080,0x808000,0xC0C0C0, 0x808080,0x0000FF,0x00FF00,0x00FFFF,0xFF0000,0xFF00FF,0xFFFF00,0xFFFFFF); for($line=$height-1;$line>=0;--$line) { my @img; push @img,[] while (1..$fheight); foreach my $col (0..$width-1) { my ($fgattr,$bgattr)= split(//,unpack('h2',substr($buf,5+2*($line*$width+$col),1))); my $ch=unpack('C',substr($buf,4+2*($line*$width+$col),1)); if($line==$cury && $col==$curx) { foreach (1..$fheight-$thickness) { push(@{$img[$fheight-$_]}, map {$_?$fgattr:$bgattr} @{$font[$ch][$_-1]}); } foreach (0..$thickness-1) { push @{$img[$_]},($fgattr)x8; } } else { foreach (1..$fheight) { push(@{$img[$fheight-$_]}, map {$_?$fgattr:$bgattr} @{$font[$ch][$_-1]}); } } } foreach(@img) { print pack('H'.(8*$width),join('',@$_)); } }

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру