простой но удобный скрипт для снятия скриншотов


elide - Posted on 18 Январь 2006

на форумах часто спрашивают, чем можно снять скриншот. обычно советуют import из пакета ImageMagick, как наиболее вероятно установленный в системе по-умолчанию.
но напрямую пользоваться import - не совсем удобно, поэтому я наваял вот такой скриптик.

#!/bin/bash
prefix="$HOME/screenshot"
date="$(date -I)"
type='png'
quality='90'
wnd='-window root'
 
function help(){
    cat << EOF
        Usage: `basename $0` [options] [filename]
        Options:
        -f fullscreen shot (default)
        -r region shot
        -w single window shot
EOF
        exit 1
}
 
while getopts fwr opt; do
case "$opt" in
    f) wnd='-window root' ;;
    w) wnd="-window $(xwininfo | awk '/Window\ id:/{print $4}')" ;;
    r) wnd='' ;;
    ?) help ;;
esac
done
 
shift  $((OPTIND-1))
 
if [ "x$1" == "x" ]
then
    i=0
    name=${prefix}_$date.$type
    while [ -f "$name" ]; do
        i=$(($i+1))
        name=${prefix}_${date}_$i.$type
    done
else
    name=$1
fi
 
import $wnd -quality $quality $name

при запуске без опций снимает весь экран, с опцией -r - предлагает выделить регион, с опцией -w - выделить окно.
если файл указан явно, то сохраняет в него. если нет, то использует имя ${prefix}_$date.$type
удобно прибиндить все три варианта на кнопки 'PrintScreen', 'Scroll Lock' & 'Pause' и наслаждаться.

0
Ваша оценка: Ничего

небольшое замечание, если уж скрипт написан на bash, то не стоит писать в начале #!/bin/sh потому что с запуском его на голом sh:
screnshot.sh: 7: Syntax error: "(" unexpected
Ведь не везде же /bin/sh это ссылка на /bin/bash

man bash на предмет того как работает bash когда запущен как /bin/sh

А как снять скриншот консоли (без Х-ов) ?

Если консоль использует фреймбуффер, то можно воспользоваться программой fbgrab. Если же консоль обыкновенная текстовая, то достаточно просто прочитать содержимое экрана из соответствующего устройства. Например, чтобы сделать скриншот первой консоли, достаточно написать cat /dev/vcs1 > screen.txt. Если вместо /dev/vcs1 указать /dev/vcsa1, то кроме чистого текста в файл запишутся и цвета символов (буква 'a' в имени устройства связана с 'атрибутом символа'). Часто для успешного выполнения этой команды надо иметь права root. Еще один способ - использовать программу screen (которую весьма рекомендую не только по этой причине) и воспользоваться заложенными в нее возможностями.

в Debian man vcs даже на русский переведен Ж;-)
пасиб бум знать
--
Signature invent in progress 19% #.........

у меня такое вот в моих полезных бесполезностях в fluxbox Ж:-)
cat .fluxbox/keys
...
Control Mod4 Mod1 p :ExecCommand import -window root -quality 100 ~/`date +shot-%Y-%m-%d-%H%M%S.jpg`
Control Mod4 Mod1 w :ExecCommand import -quality 100 ~/`date +window-%Y-%m-%d-%H%M%S.jpg`
...

тоесть жмем ctrl-alt-win-p - скприншот работчего стола
жмем ctrl-alt-win-w и мышкой указываем какое окно хотим - скриншот окна
скприншоты складываются в домашний каталог с именами shot*.jpg и window-*jpg соответственно и текущей датой и времени в имени файла
--
Signature invent in progress 19% #.........

рулез! =)

а я предпочитаю просто GIMP. File -> Acquire -> Screen shot. Там выбрать задержку, целый экран или только окно и щелкнуть по Grab

А зачем для этого целый гимп? ksnapshot не хватит?

потом все равно открывать гимп и размывать sensitive info перед отсылкой скриншота на ЛОР, прально? ;)

Ну, это кому как :)