Автор статьи, перевод которой мы сегодня публикуем, рассказывает о проекте MouseMover. Это — USB-устройство, которое имитирует присутствие пользователя за компьютером, периодически перемещая курсор мыши на небольшие расстояния, что позволяет избежать блокировки экрана компьютера или перехода компьютера в спящий режим.
MouseMover
Аппаратные и программные компоненты проекта
В этом проекте использована плата SparkFun Pro Micro — 5V/16MHz. Вместо неё можно воспользоваться Arduino Leonardo. Обратите внимание на то, что тут нужна лишь одна из вышеупомянутых плат.
Для работы над программной частью проекта используется Arduino IDE.
Обзор проекта
Я проработал в разных компаниях Америки почти сорок лет. Я видел, как изменился за это время подход к корпоративной компьютерной безопасности. Сначала правил безопасности, можно сказать, вовсе не было. А теперь же эти правила стали прямо-таки безумными. Сегодня во многих компаниях компьютеры настраивают так, чтобы они, если уходят в режим сна, запрашивали бы при пробуждении пароль для входа в систему. Иногда компьютеры «засыпают» после 5 минут бездействия пользователя. А на моей последней работе перешли на двухфакторную схему аутентификации, когда для входа в систему используется и пароль, и аппаратный токен, генерирующий набор цифр. Для того чтобы войти в систему, нужно ввести и обычный пароль, и код с токена. Хотя подобные меры безопасности — это, в современных условиях, очень хорошо, а порой и необходимо, они могут сильно досаждать людям, которые хотят сделать что-то полезное (а не заниматься постоянным вводом паролей). Я и сосчитать не могу — сколько раз мне приходилось вводить пароль и код, когда я отвлекался от работы на разговор с коллегой, а потом возвращался к делам и обнаруживал, что мой компьютер заблокировал экран. Хорошо было бы иметь некое устройство, которое, работая само по себе, периодически немного двигает курсор мыши, не давая компьютеру заблокировать экран или «заснуть».
Поискав подобные устройства в интернете, я узнал, что решить эту задачу уже пытались. Делалось это самыми разными способами — от механических, когда нечто само двигает настоящую мышь, до программных, когда на компьютере, в виде фоновой задачи, работает утилита, воздействующая на указатель мыши. «Механический» подход кажется мне слишком примитивным, а программный сработает далеко не всегда, так как системы безопасности, используемые в компаниях, могут распознать эту дешёвую уловку. Весьма интересно было бы сделать недорогое устройство, неотличимое, с точки зрения компьютера, от настоящей мыши, которая иногда перемещается. В результате и появился проект MouseMover, о котором я хочу рассказать.
Дисклеймер
Описываемая здесь прошивка и основанное на ней устройство могут быть использованы для обхода корпоративных требований, касающихся информационных технологий, а так же — имеющихся в организациях механизмов обеспечения безопасности. Подобное может произойти из-за того, что компьютер, к которому подключено устройство, не сможет, в отсутствие активности пользователя, заблокировать экран. Это может быть запрещено на уровне организации или на государственном уровне и может привести к наказанию виновного в подобном деянии. Тяжесть наказания зависит от ситуации. Если вы не уверены в том, что можете безнаказанно пользоваться подобным устройством — уточните это в IT-отделе своей компании. Пользуйтесь устройством на свой страх и риск.
Подробности о проекте
В рамках этого проекта реализовано устройство MouseMover, которое способно не допустить блокировку экрана компьютера или переход системы в спящий режим. В нём используется недорогой (стоимостью в районе $5-$17) модуль Pro Micro (Sparkfun DEV-12640 или эквивалентный клон) с микроконтроллером ATmega32U4, а так же — USB-кабель. Программное обеспечение проекта написано с использованием Arduino IDE. Это ПО может использоваться и на других платах Arduino, наподобие Arduino Leonardo или Arduino Micro, но плата Pro Micro отличается весьма компактными размерами, питание на неё подаётся по USB, она недорого стоит. Всё это делает её идеальным выбором для решения нашей задачи.
Наш контроллер перемещает курсор мыши на небольшое расстояние, выполняя это через каждую минуту или через другой небольшой временной интервал. Это имитирует работу пользователя с компьютером, не давая компьютеру, к которому подключено устройство, блокировать экран или уходить в режим сна. В отличие от исключительно программных решений, которые могут не сработать во многих IT-инфраструктурах, это решение выглядит, с точки зрения компьютера, как настоящая (вторая) мышь, подключённая к компьютеру. При этом пользователь продолжает работать с обычной мышью.
Обычно перемещения курсора на несколько пикселей, например, каждую минуту, достаточно для того чтобы поддерживать компьютер в рабочем состоянии. Так как расстояние перемещения курсора невелико (как правило, достаточно всего несколько пикселей в любом возможном направлении движения курсора), и так как это делается не слишком часто, это обычно не мешает обычной работе с компьютером. Для того чтобы поддерживать безопасность системы на уровне, близком к тому, который требуется в организации, устройство можно особым образом настроить. А именно — сделать так, чтобы оно работало лишь ограниченное время, после чего прекращало перемещать курсор до тех пор, пока не получит соответствующую команду, включающую перемещение курсора, или до тех пор, пока оно не будет отключено от компьютера и подключено к нему снова.
В коде, обеспечивающем работу устройства, имеется довольно много параметров, которые можно настраивать. Все параметры можно модифицировать, отправляя команды на последовательный порт контроллера, который добавляется на компьютер после подключения к нему устройства. А именно, контроллер виден в Windows как мышь (HID) и виртуальный последовательный (COM) порт. После того, как контроллер будет запрограммирован, параметрам будут назначены значения, применяемые по умолчанию. Но их можно изменить, а после этого — записать в EEPROM. В результате параметры, заданные пользователем, будут использоваться каждый раз, когда контроллер подключается к компьютеру.
Прошивка рассчитана на плату Pro Micro (с микроконтроллером ATmega32U4), которая соединена с компьютером через USB-порт. В результате оказывается, что аппаратная часть этого проекта представлена подходящей платой и USB-кабелем, посредством которого плата соединяется с компьютером.
Аппаратное обеспечение и система ввода-вывода
Хотя аппаратная часть этого проекта представлена лишь платой Pro Micro и USB-кабелем, на плате есть пины ввода-вывода, которые можно соединить перемычками для изменения поведения устройства. Кроме того, если нужно, к плате можно подключить светодиод, который будет сигнализировать о том, что устройство работает. Хотя это и необязательно, практика показала, что наличие светодиода — это удобно, так как позволяет точно знать о том, работает устройство или нет. Если говорить о перемычках, то они сделаны, в основном, ради того, чтобы устройством было бы удобнее управлять, или для тех случаев, когда создателю своего варианта MouseMover хотелось бы иметь возможность воздействия на него с помощью перемычек, а не посредством команд, отправляемых ему через последовательный порт.
Вот схема платы с указанием мест установки перемычек и подключения светодиода. Напомню, что это необязательно.
Схема платы
Перемычка, называемая JPE (это имя, как и имена других перемычек, определено в коде), может использоваться для выключения устройства. Подключение соответствующего пина к GND останавливает работу мыши (как если бы мышь отключили от компьютера). А если перемычку убрать — работа устройства продолжится. Эта перемычка подключается к пину 6 (PD7) Arduino.
Вторая перемычка, JP2, отключает программный таймер и заставляет мышь постоянно перемещаться, не обращая внимание на то, на какой временной интервал настроена программа. Если эту перемычку отключить — восстанавливается обычный режим работы. Эта перемычка подключается к пину 2 (PD1) Arduino.
Третья перемычка — PD3 — заставляет указатель мыши перемещаться каждые 5 секунд, при этом временной интервал, заданный в настройках, игнорируется. Если её убрать — система переходит в обычный режим работы. Перемычка подключается к пину 5 (PC6) Arduino.
Светодиод и резистор подключают к пину A3 Pro Micro (цифровой пин 21 (PF4) Arduino) и к VCC. Включение светодиода указывает на работу MouseMover. Хотя без светодиода и можно обойтись, если он есть, он позволяет точно знать о том, работает устройство или нет. Тут можно использовать любой светодиод, который есть под рукой. Я пользовался резистором на 330 Ом (0,25 Вт), но тут, что зависит от светодиода, подойдёт любой резистор с сопротивлением от 100 Ом до 1 КОм. Существуют и светодиоды со встроенным резистором, наподобие Lumex SSL-LX3044GD-5V (Digikey 67-1062-ND), которые рассчитаны на подключение прямо к 5В-выводу модуля. Если воспользоваться именно таким светодиодом — задача его подключения к плате упростится. Достаточно будет припаять выводы светодиода к соответствующим пинам. Какой бы светодиод вы ни использовали — обращайте внимание на его полярность. А именно — катод подключается к пину A3, а анод, через резистор, к VCC.
Компиляция прошивки и загрузка кода
Создайте папку MouseMover
в папке Arduino
и поместите в неё файл MouseMover.ino
из репозитория проекта. Сделайте двойной щелчок по этому файлу для запуска Arduino IDE и выполните следующие настройки в разделе Tools
:
Board
: Arduino Leonardo (эту настройку можно использовать и для Pro Micro).Port
: COMxx (номер порта, назначенный устройству операционной системой).Programmer
: ArduinoISP.
Если плата Pro Micro уже использовалась на компьютере, на котором установлена Arduino IDE — это значит, что после того, как файл будет открыт в IDE, для загрузки кода на плату достаточно будет нажать на кнопку Upload
. А если же плату впервые подключили к компьютеру — надо будет ещё установить для неё драйверы.
Подробности о подключении Pro Micro к компьютеру можно найти в PDF-файле с документацией в репозитории проекта. Там же есть сведения об изменении номера COM-порта и решении проблем, которые могут возникнуть при первом подключении Pro Micro к компьютеру.
Работа над проектом велась в Arduino IDE 1.8.5. Всё должно хорошо работать и в более новых версиях IDE (включая самую свежую — 1.8.15).
Команды
Контроллер принимает команды по последовательному порту. В ответ на эти команды он способен выполнять различные действия и возвращать сведения о текущем состоянии настроек. Для отправки команд нужно открыть порт на любой скорости (кроме 1200 бод) (формат 8-N-1) в программе наподобие Hyperterminal или Tera Term, или в терминале Arduino IDE (или в вашем любимом терминале). Потом можно создавать batch-файлы для автоматизации отправки команд на устройство через COM-порт.
После того, как вы убедитесь в том, что соединение с MouseMover успешно установлено (можно отправить ?
, нажать Enter
, после чего должны появиться справочные сведения), можно отправлять устройству команды и, если нужно, настраивать его параметры.
Ниже приведена таблица команд, поддерживаемых MouseMover. Команды для чтения значений состоят из одной буквы, а команды для записи значений — из одной буквы, за которой следует число. За командами идёт <CR>
или <CR><LF>
. Например, команда может выглядеть как X<CR>
или как X20<CR>
(ещё она может выглядеть как X=20<CR>
). <CR>
— это то же самое, что нажатие на клавишу Enter
.
Чтение данных | Запись данных | Описание |
V | Возврат сведений о версии / копирайте. | |
*IDN? | Возврат сведений о версии / копирайте (SCPI-совместимый формат). | |
X | X4 | Расстояние перемещения указателя по оси X (0..100) (по умолчанию — 4). |
Y | Y0 | Расстояние перемещения указателя по оси Y (0..100) (по умолчанию — 0). |
T | T60 | Частота перемещения указателя в секундах (2..3600) (по умолчанию — 60 секунд, то есть — 1 минута). |
R | R540 | Время, в минутах, в течение которого должен работать MouseMover (-1..64800) (максимум — 45 дней; 0 — устройство не работает, -1 — работает без ограничений по времени; по умолчанию — 540 минут, то есть — 9 часов). |
Z | Возврат значений всех переменных в списке, элементы которого разделены запятыми. Это — следующие значения: X, Y, <установленное T>, <установленное R>, <текущее T>, <текущее R>, HH:MM:SS (последнее значение указывает на общее время работы контроллера после его подключения к компьютеру). | |
E | E0 | Сброс переменных в значения, применяемые по умолчанию (эти значения описаны выше) |
E1 | Прочитать текущие значения из EEPROM. | |
E2 | Записать текущие значения в EEPROM. | |
? | Вернуть справочные сведения по командам | |
H | Вернуть справочные сведения по командам. |
Обратите внимание на то, что, при первом перемещении указателя, к его текущей позиции (X, Y) будет добавлено столько пикселей, сколько указано в соответствующих параметрах. При втором перемещении те же значения будут вычтены из новых координат указателя. Потом эта последовательность увеличения и уменьшения координат повторится.
Если вы хотите поменять значения переменных X
, Y
, T
, R
и сохранить их так, чтобы они использовались бы при следующем включении устройства как значения, применяемые по умолчанию, просто запишите в них новые значения, а после этого вызовите команду E2<CR>
. Для возврата их к исходным значениям, применяемым по умолчанию, вызовите команду E0<CR>
, а потом — команду E2<CR>
.
Интеграция с системой
После того, как в модуль Pro Micro записана прошивка MouseMover, его можно использовать в системе с разным уровнем интеграции в неё.
Самый простой сценарий использования устройства заключается в том, что его просто подключают к USB-порту компьютера на то время, когда нужно, чтобы оно работало. А когда нужды в нём нет — его отключают. После каждого подключения к компьютеру MouseMover будет использовать параметры, записанные в EEPROM, в состав которых входит и параметр, задающий продолжительность работы устройства. После того, как MouseMover проработает это время, устройство отключится и компьютер сможет перейти в режим сна или блокировки. Если же устройство просто отключить от компьютера, а потом подключить снова — отсчёт времени начнётся с нуля. Это позволяет пользователю задать время работы устройства, а потом, после каждого подключения к компьютеру, например, выполняемого каждое утро, устройство проработает именно это время.
Пакетные файлы Windows и автоматизация работы с MouseMover
Вместо того, чтобы постоянно подключать и отключать MouseMover, можно создать batch-файл (пакетный файл) в Windows и ярлыки к нему, позволяющие вызывать его с параметрами, и, например, включать и выключать устройство. Ещё можно создать в Windows задачу, вызывающую этот файл в заданное время или при входе в систему. Следующий пример рассчитан на Windows 7 и Windows 10, но тот же функционал можно реализовать и для macOS, и для Linux или Unix.
Можно создать пакетный файл, отправляющий на MouseMover команду R
. Вот как может выглядеть этот файл:
@echo off
rem MoverPort - это имя COM-порта в формате \.COM# (впишите сюда свой номер порта)
set MoverPort=\.COM4
rem R=<количество минут> (9 часов=540) (0=выключено)(%1=получить из командной строки)
echo R=%1 >%MoverPort%
Обратите внимание на то, что в этом примере batch-файла используется порт COM4
, а у вас это может быть порт с другим номером, поэтому вам может понадобиться отредактировать этот файл для использования его в своей системе.
Этот файл можно назвать MouseMover.bat
.
Его вызывают с параметром. Например:
MouseMover 540
(время работы устройства будет установлено в 540 минут).MouseMover 0
(устройство будет выключено).
После того, как создан файл MouseMover.bat
, можно создать ярлык, двойной щелчок по которому позволит вызвать этот файл с параметром. Для того чтобы создать ярлык — надо щёлкнуть правой кнопкой мыши по файлу и выбрать в появившемся меню команду Создать ярлык
. Будет создан ярлык, которому можно дать какое-нибудь понятное имя, вроде StartMouseMover
или StopMouseMover
. После переименования ярлыка (если решено было поступить именно так), можно отредактировать его свойства, введя время работы устройства после команды, которая уже имеется в поле Объект
вкладки Ярлык
. Можно создать и ещё один ярлык, предназначенный для выключения MouseMover. Для этого можно скопировать уже существующий ярлык и ввести 0
там же, где ранее вводилась продолжительность работы устройства. Теперь с помощью одного из этих ярлыков можно будет включить устройство на заданное время, а с помощью другого — отключить.
Для дальнейшей автоматизации работы с Mouse Mover можно воспользоваться задачами Windows. Например, задача может вызывать batch-файл для включения устройства в определённое время или при входе в систему. Для создания задач можно воспользоваться либо графическим интерфейсом планировщика заданий, либо — соответствующими инструментами командной строки. Подробности об этом смотрите в PDF-файле с документацией в репозитории проекта.
В моём случае лучше всего показал себя автоматический запуск устройства с помощью задачи, выполняющейся при входе в систему (а не применение задачи, запускающей устройство в определённое время). При использовании этого метода компьютер будет постоянно работать, не блокируя экран, с того момента, как пользователь войдёт в систему. А после того, как это время истечёт, MouseMover отключится и компьютер, если за ним нет пользователя, может «уснуть» или заблокировать экран. Использование batch-файлов и задач в Windows позволяет вообще не отключать MouseMover от компьютера и попросту забыть об этом устройстве. При этом входить в систему придётся не после каждого небольшого перерыва, а лишь раз в день.
Итоги
Я надеюсь, что MouseMover поможет всем желающим избавиться от одного из неудобств, вызванных корпоративными требованиями к информационной безопасности. Главное — прежде чем пользоваться подобным устройством на работе — почитайте дисклеймер, который можете найти в начале статьи. Конечно, если в этом есть смысл, вы можете пользоваться MouseMover и дома.
Планируете ли вы сделать себе MouseMover?
Автор: ru_vds