linux @ 11 Сентябрь 2008
Сегодня ночью задался вопросом, можно ли делать скриншоты и при этом их одновременно загружать в сеть, на свой сервер.
Обыскал сеть, наткунлся на скрипт у Gluek и на его основе и скрипта генерации паролей для того чтобы каждой картинке выдавать уникальное имя.

Вот собственно два скрипта, однако чтобы с ними работать нужно будет поставить два пакета:
sudo aptitude install xclip scrot


pwdgen
#!/usr/bin/perl
chomp($length=8);
$length=~s/\D*//g;
$length||='8';
srand();
@letters=('a'..'z','A'..'Z',0..9,'#','*','_','-','+','=');
for (1..$length){($pass.=$letters[rand(@letters)])};
print "\033[1;31m$pass\033[0;39m\n";


ftpshot
#!/bin/bash
name=`pwdgen | md5sum | awk '{print $1}'`
file=$name.png
scrot $file -e 'mv $f /home/lib/shots/'
url="http://img.librarian.spb.ru/$file"
echo "$url" | xclip -i -l 1
scp /home/lib/shots/$file user@host:/path/to/public_html

В принципе можно поступать как в скрипте Gluek - копировать в tmp, но я предпочитаю данные сохранять.
Комментарии по тексту скриптов:
chomp($length=8);
Тут можно задать длину случайно сгенерированной строки.
name=`pwdgen | md5sum | awk '{print $1}'`
Собственно формируем имя для скрипта, точнее md5 хэш для случайного имени.
scrot $file -e 'mv $f /home/lib/shots/'
Делаем скриншот и сохраняем его в директорию.
url="http://img.librarian.spb.ru/$file"
Так у меня выглядит адрес, куда закачиваются картинки.
echo "$url" | xclip -i -l 1
Собствено копируем в буфер обмена ссылку, которую можно будет вставить нажатием средней клавиши мышки, причём только один раз(опционально).
scp /home/lib/shots/$file user@host:/path/to/public_html
Копируем файл из директории где лежит скриншот на удалённый хост. Внимание, для того, чтобы можно было использовать скрипт в Fluxbox необходимо настроить на удалённом хосте авторизацию по ключу. Почитать про это можно на opennet

Также необходимо скопировать скрипты в /usr/bin тогда не будет необходимости писать путь к ним.

Итак, приступим к главному - добавлению строки в ~/.fluxbox/keys:
None Print :Exec /usr/bin/ftpshot
Перезапускаем Fluxbox - жмём PrintScreen, получаем:
http://img.librarian.spb.ru/c0294556bbae2c0f100e9771891c696d.png

P.S. Можно дописать пару строчек и тогда можно будет сделать скрипт, который бы выдавал данные для вставки на форуме, например. В том числе и с preview, но тут нужно применять ImageMagick.

6 Response to “Скриншоты в сеть. Настраиваем PrintScreen в Fluxbox.”

  1. Fd Says:

    #!/usr/bin/perl

    my @chars = ("A" .. "Z", "a" .. "z", 0 .. 9, '#', '*', '_', '-', '+', '=');

    print join "", @chars[ map { rand @chars } (1 .. 10) ];

    может это будет лучше для pwdgen?

  2. ilynxy Says:

    А ещё проще и наглядней использовать текущую дату и время с миллисекундами. Скажем так

    date +screenshot-%F-%H:%M:%S.%N.png

    В случае правильности хода часов уникальней некуда.

  3. ilynxy Says:

    А ещё было бы интересно делать скриншот не всего десктопа, а только активного окна (Alt + PrintScreen в Windows). В своё время не нашлось ничего подходящего, пришлось изобретать велосипед, вдруг пригодится:

    Mod1 Print :Exec wid=`xprop -root | awk '/_NET_ACTIVE_WINDOW.+?#/{print $5}'`;fname=~/screenshots/`xprop -id $wid WM_CLASS | cut -d \" -f2 | tr / _`_`date +%F_%X`.png;import -window $wid "$fname"

  4. librarian Says:

    Fd: может и лучше конечно, но я просто брал исходный скрипт, если что, его можно и по назначению использовать, да и функционала там больше.

    ilynxy: Спасибо за подсказу про активное окно, я то с гимпом мучался.

    А с секундами не так интересно :) В конце концов можно ведь модифицировать так так нужно именно тебе.

  5. Fd Says:

    Возможностей там поровну :)

    #!/usr/bin/perl

    my $length = 8;

    my @letters=('a'..'z','A'..'Z',0..9,'#','*','_','-','+','=');

    $pass.=$letters[rand(@letters)] for 1..$length;

    print $pass;

    я лишь убрал из pwgen лишний бессмысленный код и раскраску символов для терминала.

    сравните все три варианта :)

  6. librarian Says:

    Ну да, с утра как то код читать не было времени :) В универ бежал я :)

Leave a Reply

Не регистрировать/аноним

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email.
(При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.)


(обязательно)