Поиск по сайту:

Как имитировать нажатие клавиш и движение мыши в Linux


Вы когда-нибудь мечтали о том, чтобы ваш компьютер делал что-то автоматически за вас? Наверное, нет, если вы только что посмотрели Терминатора. Но за исключением этого, сценарии и автоматизация задач — мечта каждого опытного пользователя. Если сегодня существует множество решений для достижения этой цели, иногда трудно выбрать из множества простое, умное и эффективное. Я не могу притворяться, что нашел его сам, но в то же время я предпочитаю аккуратное программное обеспечение под названием xdotool. Его подход интуитивно понятен, поскольку он представляет собой инструмент автоматизации X11. Другими словами, xdotool может имитировать нажатия клавиш и даже события мыши при чтении текстового файла.

Установка Xdotool в Linux

Для Ubuntu, Debian или Linux Mint вы можете просто сделать:

$ sudo apt-get install xdotool

Для Fedora используйте команду yum:

$ sudo yum install xdotool

Для пользователей CentOS пакет доступен в репозитории EPEL. После включения репозитория EPEL просто используйте команду yum, как указано выше.

Для пользователя Arch пакет доступен в репозитории сообщества:

$ sudo pacman -S xdotool

Если вы не можете найти xdotool для своего дистрибутива, вы всегда можете скачать его с официального сайта.

Основное использование Xdotool

Каким бы интуитивно понятным он ни был, xdotool остается приложением для сценариев. Следовательно, вы должны знать синтаксис, чтобы использовать его правильно. Будьте уверены, однако, синтаксис очень прост и быстро усваивается по сравнению с возможностями программы.

Во-первых, очень легко имитировать нажатие клавиши. Из терминала вы можете ввести команду:

$ xdotool key [name of the key]

Если вы хотите связать два ключа, используйте между ними оператор +. Например, для переключения окон:

$ xdotool key alt+Tab

Чтобы получить тип xdotool, используйте команду type:

$ xdotool type '[text 1="type" language="to"][/text]'

Этого уже достаточно для простого нажатия клавиш. Но одной из многих сильных сторон xdotool является его способность фокусироваться на определенном окне. Он может выбрать нужное окно, а затем ввести его, не позволяя всем вашим записанным нажатиям клавиш просто испаряться в воздухе. Для этого самая простая команда:

$ xdotool search --name [name of the window] key [keys to press]

Это будет искать в открытом окне окно с именем, совпадающим с поиском, давать ему фокус, а затем имитировать нажатие клавиши.

Немного более продвинутый, но очень полезный, xdotool может имитировать движение мыши и щелчок. Например:

$ xdotool mousemove x y

С помощью приведенной выше команды вы можете поместить курсор в координаты (x, y) вашего экрана (в пикселях). Вы также можете комбинировать его с аргументом click:

$ xdotool mousemove x y click 1

Это переместит мышь в (x, y) и щелкнет левой кнопкой. 1 представляет собой левую кнопку мыши, 2 — колесо прокрутки, 3 — правую кнопку и т. д.

Наконец, как только вы запомните свои команды, вы можете захотеть сбросить их в файл для редактирования и воспроизведения. Для этого существует более одного синтаксиса. Вы можете написать скрипт bash:

#!/bin/bash
xdotool [command 1]
xdotool [command 2]
. . .

Или вы можете использовать:

$ xdotool [filename]

где вы пишете свои команды в отдельном файле и подставляете его имя в качестве аргумента.

Бонус

В качестве бонуса к этому сообщению, вот конкретный пример xdotool в действии. Возможно, вы слышали или не слышали о Bing, поисковой системе Microsoft. В последнем случае вы никогда не слышали о Bing Rewards: программе, которая позволяет вам обменивать баллы Bing на подарочные карты Amazon и другие. Чтобы заработать эти баллы, вы можете выполнять до 30 поисков в день на Bing, каждый поиск дает вам 0,5 балла. Другими словами, вы должны сделать Bing поисковой системой по умолчанию и использовать ее каждый день.

Или вы можете использовать этот скрипт xdotool, который автоматически отдаст фокус Firefox (замените его вашим любимым навигатором) и выполнит поиск с помощью команды fortune, чтобы сгенерировать некоторые случайные слова. Примерно через 30 секунд все ваши ежедневные поиски будут выполнены.

#!/bin/bash
for i in {1..30}
do
  WID=`xdotool search --title "Mozilla Firefox" | head -1`
  xdotool windowfocus $WID
  xdotool key ctrl+l
  xdotool key Tab
  SENTENCE="$(fortune | cut -d' ' -f1-3 | head -1)"
  xdotool type $SENTENCE
  xdotool key "Return"
  sleep 4
done

В заключение, мне очень нравится xdotool, даже несмотря на то, что его полные возможности выходят далеко за рамки этого поста. Это действительно доступный способ написания сценариев и автоматизации задач. Недостатком является то, что он, вероятно, не самый эффективный. Но опять же, он выполняет свою работу и не слишком утомляет изучение.

Что вы думаете о xdotool? Вы предпочитаете другой инструмент автоматизации? И почему? Дайте нам знать об этом в комментариях.

Статьи по данной тематике: