MyTetra Share
Делитесь знаниями!
О, смотри-ка какое хорошее место. Дайте два!
Как сделать периодические скриншоты экрана пользователя с помощью TightVNC
15.08.2017
09:42
Автор: Xintrea
Текстовые метки: Linux, Windows, TightVNC, VNC, скриншот, периодический
Раздел: Компьютер - Linux - Видео - Захват видео с экрана

Задача


Есть сеть предприятия, в которой находятся рабочие станции с операционными системами 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.44
Яндекс индекс цитирования