LINUX.ORG.RU

Снимок _виртуального_ рабочего стола


0

0

Здравствуйте!
А можно ли сделать снимок всего виртуального рабочего стола разом?
Вместо того чтобы пользать по нему, сделать 9 скриншотов экрана (у меня размер виртуального стола -- 3x3 экрана) и склеить их?

★★★★★

Ответ на: комментарий от Quasar

Если бы.. Снимает только видимую область экрана.
Хотя в отличие от других испробованных утилит интересен тем, что при снимке окна (развёрного на несколько экранов) создаёт изображение размером на всё окно (а не только видимой область окна) -- но не видимые части остаются чёрными.

Хотя может у меня версия старая.. KDE: 3.3.1

unDEFER ★★★★★
() автор топика

Накропал следующий скрипт

$ cat bin/capture_desk.sh
#!/bin/bash

Desktop=$1
PagesX=$2
PagesY=$3
Size=$4
To=$5

[[ $Desktop && $PagesX && $PagesY && $Size && $To ]] ||
{
        echo "usage: capture_desk <Desktop> <PagesX> <PagesY> <Size> <File>"
        exit 1
}

FvwmCommand "GotoDesk 0 $Desktop"

Shot()
{
for ((j=0; $j<$PagesY; j++)); do
        for ((i=0; $i<$PagesX; i++)); do
                FvwmCommand "GotoPage $i $j"
                import -window root "/tmp/screen${i}x${j}.pnm"
                echo -n "/tmp/screen${i}x${j}.pnm "
        done
done
}

montage -geometry "$Size" -size ${PagesX}x${PagesY} `Shot` "$To"

Пришлось обновить ImageMagick..
Используется примерно так:
$ capture_desk.sh 1 3 3 1024x768 SCREEN.png

unDEFER ★★★★★
() автор топика
Ответ на: комментарий от sdio

> Вместо FvwmCommand (если ее нет)
Точнее если вообще WM не FVWM.

> лучше использовать wmctrl
Как ни странно у меня как раз wmctrl нету.

unDEFER ★★★★★
() автор топика
Ответ на: комментарий от unDEFER

Спасибо за идею. Tы бы хоть в вопросе написал, что пишешь об fvwm. :)

Кстати, после FvwmCommand надо ждать перед снимком для синхронизации,
echo -n "$filename " можно заменить на просто echo $filename, а также
автоматически подсчитывать Size, вычищать /tmp, и выдавать сообщение
об ошибке, если FvwmCommandS не запущен.

Конечный вариант скрипта fvwm-desk-capture со всеми этими улучшениями:

#!/bin/bash

Desk=$1
PagesX=$2
PagesY=$3
File=$4
Size=`xwininfo -root | grep geometry | cut -d+ -f1 | cut -d" " -f4`

[[ $Desk && $PagesX && $PagesY && $File && $Size ]] || {
        echo "Usage: fvwm-desk-capture <Desk> <PagesX> <PagesY> shot.png"
        exit 1
}

[[ `pidof FvwmCommandS` ]] || {
        echo "Please start FvwmCommandS module first"
        exit 1
}

FvwmCommand "GotoDesk 0 $Desk"

tmp_prefix=/tmp/$$-shot-

Shot() {
        for ((j = 0; $j < $PagesY; j++)); do
                for ((i=0; $i < $PagesX; i++)); do
                        FvwmCommand "GotoPage $i $j"
                        sleep 3
                        import -window root $tmp_prefix${i}x$j.pnm
                        echo $tmp_prefix${i}x$j.pnm
                done
        done
}

montage -geometry "$Size" -size ${PagesX}x${PagesY} `Shot` "$File"

FvwmCommand "GotoDeskAndPage $Desk 0 0"
rm -f $tmp_prefix*
echo "Compositive screenshot of desk $Desk is stored in $File"

mihalych ★★★
()
Ответ на: комментарий от mihalych

Да, так лучше.. Только, вот у меня, например, pidof находится в /sbin и в таком виде от пользователя скрипт не запускается. Надо либо PATH в начале скрипта подправить или.. использовать
ps | grep -q "FvwmCommandS" ||

unDEFER ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.