Автоматизируем щелчки мышкой в Linux: xdotool
Эта очень короткая заметка на примере активации ключей в Steam описывает процесс автоматизации операций, выполняемых при помощи мыши и клавиатуры.
Допустим, вы купили несколько наборов игр Humble Bundle. Теперь у вас есть, например, 5 ключей для активации в Steam. А может быть 15 или даже 25. Вы очень не хотите активировать их вручную, потому что это слишком муторно: в клиенте Steam нужно каждый раз наводить курсор на меню «Games», щёлкать, потом наводить курсор на пункт меню «Activate a Product on Steam…», опять щёлкать, потом нажимать Enter, потом ещё раз Enter, и только затем наконец-то вводить ключ (а потом нужно подождать, ещё раз нажать Enter, затем Escape). А потом повторять то же самое для каждого последующего ключа. Как писал Леонид Каганов, стоило ли вообще ради такого «прогресса» спускаться с пальмы и брать в руки каменный топор?
В общем, вы решили этот процесс автоматизировать — тем более, что задача-то, на самом деле, очень простая. Для её решения нам потребуются консольные утилиты xdotool и xclip — убедитесь, что они установлены у вас в системе.
Для начала вы собираете ключи с веб-страницы, чтобы затем записать их в текстовый файл, по одному на строку. Естественно, не вручную. Например, со страницы Humble Budle их можно собрать, выполнив через JS-консоль что-нибудь в таком духе:
Получается текстовый файл с примерно таким содержимым:
При сохранении текстового файла убедитесь, что в конце есть перенос строки (некоторые текстовые редакторы не добавляют его автоматически). Иначе при выполнении скрипта последний ключ не будет активирован.
Далее вам нужно открыть Steam и определить координаты тех точек, куда нужно будет автоматически перемещать курсор. Таких точек две: во-первых, точка для первого щелчка (меню «Games»), во-вторых, точка для второго щелчка (пункт меню «Activate a Product on Steam…»). Тут по настроению — можете получить координаты с помощью команды getmouselocation, а можете их подобрать.
В первом случае можно либо запустить xdotool через watch (для автоматического перевыполнения команды через определённый интервал времени), либо добавить sleep.
То есть либо запускаете watch xdotool getmouselocation и наводите курсор на нужное место экрана, посматривая при этом в консоль и запоминая значения нужных точек, либо запускаете xdotool sleep 5 getmouselocation и получаете координаты той точки, где курсор оказывается через 5 секунд после запуска команды (соответственно, смотреть в консоль или запоминать координаты не нужно — достаточно будет просто успеть поместить курсор в нужное место, и уже потом переключиться к консоли).
Во втором случае вы пишете, допустим, xdotool mousemove 52 38 , выполняете, смотрите, где оказался курсор, а потом меняете числа, пока не найдёте подходящие. Этот вариант более весёлый, поэтому, думаю, многие предпочтут сделать именно так.
Теперь, когда у нас есть нужные координаты, давайте действовать итеративно: прежде всего попробуем автоматически пройти до момента ввода ключа.
Для этого будем использовать команды mousemove, click, sleep и key. Список команд, кстати, можно посмотреть в документации по xdotool.
xdotool mousemove 210 105 click 1 mousemove 210 160 sleep 0.1 click 1 sleep 0.1 key Return sleep 0.1 key Return
Если в точке, куда в первую очередь перемещается курсор, не Steam, а какое-то другое окно (например, если Steam скрыт за окном терминала), то нужно добавить команды windowactivate/windowfocus, чтобы сначала отобразилось окно Steam, и уже затем выполнялись следующие команды.
steam_window=48234551 ; xdotool windowactivate $steam_window windowfocus $steam_window sleep 0.5 mousemove 210 105 click 1 mousemove 210 160 sleep 0.1 click 1 sleep 0.1 key Return sleep 0.1 key Return
Чтобы получить идентификатор активного окна, вы можете использовать команду getactivewindow (если окно Steam будет активно через секунду после выполнения команды xdotool sleep 1 getactivewindow, то в консоли отобразится его идентификатор). Кроме того, для команды getmouselocation (см. выше) также указывается идентификатор окна, над которым находится курсор.
Теперь давайте попробуем написать небольшой скрипт, который читает файл с ключами и поочерёдно их активирует.
Скрипт можно назвать, например, activate_steam_keys.sh.
Разрешаем для файла выполнение и запускаем скрипт. При этом передаём скрипту аргумент — имя файла с ключами.
chmod +x activate_steam_keys.sh
./activate_steam_keys.sh steam_keys.txt
А дальше просто смотрим на экран и наслаждаемся процессом. Всё-таки хорошая идея была взять тот каменный топор.
Источник
Повышаем эффективность работы из дома, или как шевелить мышкой на Pi Zero
Работа из дома – это не только благо, но и серьезный вызов для эффективных менеджеров, которые до сих пор меряют производительность ИТ отдела в трудочасах. Основным индикатором твоей трудонадёжности частенько выступает бодро-зеленый статус в корпоративном мессенджере. Некоторые идут ещё дальше и деплоят средства измерения “digital experience” сотрудников дабы считать, сколько времени они провели в Word’е, браузере или среде разработки.
Есть несколько способов, как можно противостоять этому безобразию:
Программный. Я перепробовал различные скрипты и тулзы, эмулирующие действия пользователя – ничего не работает. Компьютер всё равно засыпает/мессенджер ставит статус “Away”
Работает, но печатать что-либо разумное не выйдет.
3. Гибридный, на нём и остановимся поподробнее
Изготовить эмулятор USB HID устройства можно на любой Ардуине с ATmega32U4. Там есть поддержка USB. Но зачем использовать Ардуину, если за те же деньги есть Raspberry Pi Zero (W)? Pi0 можно превратить в USB клавиатуру, мышь и сетевую карту одновременно, при этом управлять всем добром через SSH, ни в чём себе не отказывая.
Давайте посмотрим, как это можно сделать.
Вначале нужно достать Pi Zero (W), установить туда ОС и настроить SSH Можно долго смотреть на то, как другие работают.
Источник
Имитация движения мыши в Ubuntu
Я хочу автоматически перемещать курсор мыши и имитировать щелчки кнопки мыши из командной строки с помощью внешнего скрипта. Не смотрю на:
- запись движения мыши и воспроизведения (например, xnee, xmacro)
- мгновенно перемещать мышь из одного места в другое (например, xdotool, warp_pointer Python)
Идеальным Решением
что я хотел бы сделать, так это следующее:
- редактировать простой файл сценария (например, mouse-script.txt ).
- добавить список координат, скорости движения, задержки и нажатия кнопок. Например:
- выполнить скрипт: xsim .
вопрос
как вы автоматизируете движение мыши, чтобы она переходила из своего текущего местоположения в другое место на экране с определенной скоростью? Например:
в —rate 50 не существует с xdotool .
2 ответов
- скачать xaut для Python
- следуя README — инструкции
- Run:
- редактировать src/Makefile
- изменить CFLAGS строку:
- Run:
- скопировать /usr/local/src/xaut-0.2.0/python/build/lib/* в новый каталог.
- перейти в этот новый каталог.
- скопируйте и вставьте следующий скрипт в mm.py :
- выполнить сценарий:
в более новых версиях Ubuntu (14.04+) вы можете использовать автопилот, инструмент тестирования пользовательского интерфейса для Ubuntu. Он предназначен для создания и запуска тестов пользовательского интерфейса, но также может использоваться для основных задач автоматизации GUI.
пример скрипта (Python3) для автоматизации движение мыши:
вы запустите это так же, как и любой другой скрипт Python3. Следите за движением указателя мыши!
Источник
Linux :: два, три, пять… указателей мыши
Не знаю зачем мне это пригодится, но очень вдруг захотелось иметь два указателя мыши в Linux, ведь две «мыши» у меня есть — собственно беспроводная мышь и тач-пад. Идея пришла в тот момент, когда я подключил вторую мышь, т.е. третье устройство управления указателем.
Сколько мышей, столько и курсоров, но как?
Давайте посмотрим — что скажет нам xinput:
Я честно не знаю — почему USB-свисток от Logitech — выводится дважды. Буду благодарен, если кто-то подскажет — почему.
Но я отвлекся! Из выхлопа видно, что у нас всего 4 мыши:
Для того, чтобы увидеть второй курсор создадим группу:
Теперь на экране ДВА указателя мыши, но второй пока неподвижен, а управляют все три устройства одним и тем же указателем. Давайте скажем X-серверу, что Logitech будет управлять тем самым неподвижным до сих пор курсором. Для этого еще раз посмотрим на
Теперь можно различить две группы устройств ввода. «Virtual core» и «logitech», однако мы видим что устройство logitech до сих пор входит в группу Virtual core. Исправим ситуацию — присоединим устройстов с (Logitech) к группе с (logitech)
Теперь мышь от Logitech управляет ранее неподвижным курсором.
Создадим еще одну группу и присоединим к ней наш тачпад:
После этого мы видим три указателя мыши и управляем каждым с отдельного устройства!
Чем это может быть полезно — пока не придумал. Just for fun — посмотреть в изумленные глаза Windows-пользователя и с гордостью сказать:
Источник
XMacro
XMacro — пакет содержащий две простые C (си) утилиты (xmacrorec и xmacroplay) для записи и воспроизведения действий клавиатуры и мыши.
xmacrorec и xmacroplay в значительной степени основаны на возможностях утилиты xremote (автор Jan Ekholm), предназначенной для захвата мыши и клавиатуры другого компьютера и удалённого управления им, симуляция ввода реализована с помощью библиотеки XTest (libxtst).
XMacro может работать с любыми раскладками клавиатуры, запись последовательности нажатий записывается в файл (утилитой xmacrorec2), перед началом записи утилита предлагает назначить клавишу по нажатию которой запись будет завершена (по выполнению запланированных манипуляций). В файле сохраняется список команд, повторяющих действия, часть ненужных (лишних) команд можно удалить (например некоторые движения мыши).
Утилиты XMacro можно использовать в скриптах и сочетать с другими приложениями (например с планировщиком задач), поддерживается запуск с задержкой после каждого действия, «по умолчанию» задержка десять миллисекунд (опция -d). Если последовательность нажатий не очень длинная (например при эмуляции нажатия мультимедийной кнопки), то запуск можно осуществлять одной строкой (без использования лог-файла).
XMacro поддерживает запись и эмуляцию жестов мыши, используемых для упрощения запуска без использования клавиатуры, но при возможности выполнения действий мыши аналогичными действиями на клавиатуре (горячие клавиши) то предпочтительнее использовать клавиатуру, так как мышь обычно привязана к расположению окон и кнопок.
Лицензия: GNU General Public License version 2.0 (GPLv2)
Источник