MyTetra Share
Делитесь знаниями!
Как сделать периодические скриншоты экрана пользователя с помощью TightVNC
Время создания: 15.08.2017 09:42
Автор: Xintrea
Текстовые метки: Linux, Windows, TightVNC, VNC, скриншот, периодический
Раздел: Компьютер - Linux - Видео в Linux - Захват видео с экрана
Запись: xintrea/mytetra_syncro/master/base/1502779328nya7mpo189/text.html на raw.github.com

Задача


Есть сеть предприятия, в которой находятся рабочие станции с операционными системами Windows и Linux. Для удобства администрирования на каждую станцию установлен демон TightVNC-сервера.


На предприятии появился нехороший человек, который на рабочем месте занимается совсем не работой. Надо собрать пачку скриншотов для дальнейшего анализа деятельности сотрудника.



Решение


Собирать пачку скриншотов, сделанных с опроеделенной периодичностью, можно с помощью Linux. На Linux должно быть запущено какое-нибудь десктоп-окружение - LXDE, GNOME, KDE - без разницы какое. Для решения задачи потребуется скромный набор программ:


  • vncviewer - для соединения с компьютером пользователя по протоколу VNC
  • imagemagick - для сохранения скриншотов (утилита import)
  • xwininfo - получение информации об окнах X11
  • fdupes - для "прореживания" повторяющихся картинок скриншотов (в случае статических скринсейверов)


Сам Linux может быть запущен как на отдельном компьютере, так и в локальной виртуалке или на виртуальной ферме. Можно запускать на терминальном сервере (если таковой имеется), например через X2go. Или вообще в отдельном сеансе X11, при наличии определенной сноровки.


Скрипт для снятия периодических скриншотов выглядит так:



#!/bin/bash


# Имя рабочей станции, с которой надо снять скриншоты

hostName=workstation123


# Задержка между снимками в секундах

delay=180



again="true"


while [ "$again" = "true" ]

do


# Удаление дубликатов

fdupes -f . | xargs rm -f

sleep 3


# Подключение к рабочей стации

echo пароль_для_VNC_подключения | vncviewer -viewonly -bgr233 -autopass $hostName &

sleep 5 # Задержка чтобы успело появиться целевое окно


# Выясняется идентификатор окна с TightVNC

windowId=`xwininfo -tree -root | grep -v "has no name" | grep -v child | grep TightVNC | sed 's/^[ \t]*//' | cut -d' ' -f1`

echo "Find window with ID: $windowId"


# Конструирование имени файла

suffix=`date +"%Y-%m-%d-%H-%M-%S"`

filename="scr-"$hostName"-"$suffix".jpg"

echo $filename


# Создание скриншота

# import -window root $filename

import -window $windowId $filename


killall vncviewer


sleep $delay

done


echo "Bye-Bye"



В скрипте есть несколько принудительных задержек (sleep) без которых создание снимка экрана не будет нормально срабатывать.


Соединение VncViewer для каждого очередного снимка устанавливается заново, а после создания снимка закрывается. Это необходимо для того, чтобы на Windows-машинах постоянно не мигал курсор мышки в период, когда к машине осуществлено подключение по VNC (есть такая проблема). Говорят, что в TightVNC это побороть невозможно, а вот в UltraVNC такой проблемы нет (зато есть другие причуды).


Данный скрипт будет периодически открывать окно VNC, делать с него скриншот, и сохранять его в текущий каталог. Запускаем, оставляем на пару суток, после чего можно разглядывать пачку веселых картинок.



 
MyTetra Share v.0.59
Яндекс индекс цитирования