Меню Рубрики

Xdotool установка на linux

Автоматизируем щелчки мышкой в 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

А дальше просто смотрим на экран и наслаждаемся процессом. Всё-таки хорошая идея была взять тот каменный топор.

Источник

xdotool или как сделать что-то ничего не делая

Доброй ночи Хабравчане,

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

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

Итак начнем.

Работаю на одну хостинговую компанию (маленькую, сейчас 40+ серверов) и стало все больше лень заходить на сервера посредством набора команд «ssh root@IP». Так как сначала серверов было около 20, но время шло, а серверов ставало больше, а когда ты их мониторишь, то желательно, чтоб они все у тебя были «навиду». Так вот, проблема входа стала ребром, так как при пересменке надо было заходить на все серваки, дабы не случилось чего плохого. Посидев с сотрудниками подумали написать какой-то скрипт, чтобы он сам входил на все серваки. Так как я совсем не прогер, то за дело взялись сотрудники, которые шарят в программировании. И вот не прошло пару недель как родился скрипт:

screen -d -m gnome-terminal —profile=»Default» —tab -t «s1» -e «ssh -t uateam@jump.server ssh -t root@server1»

P.S. не буду показывать весь скрипт, так как там почти одно и тоже.

Ой, забыл сказать, не все так просто было. У нас есть так cказать «jump» сервер, только он имеет доступ к другим серверам используя пользователя root. То есть, чтобы попасть на нужный сервер надо было:
1) Зайти на jump сервер
2) С jump сервера зайти на нужный сервер

Ключики все были, то есть пароли вводить не надо было и еще упустили пунк (1) путем прописния в настройках gnome-terminal команды, которая входить на jump сервер сразу же при открытии терминала и последующих его вкладоках.

Все было хорошо, протестили с 5ма серверами, все заходит и работает просто отлично, но когда прописали все сервера наткнулись на «подводные камни».

P.S. так как было 3 подвида серверов, то есть шаровые, реселлеры и ВПСы, мы открывали отдельно 3 окна терминала.

И вот «камешком» стала опцыя в конфиге SSH’а на jump сервере (доступ к которому у нас был ограничен), которая ограничивала открытие терминалов #!/bin/bash
gnome-terminal;
WID=`xprop -root | grep «_NET_ACTIVE_WINDOW(WINDOW)»| awk ‘‘`;
export WID;
xdotool windowfocus $WID;
xdotool type «ssh root@server»;
xdotool key Return;
xdotool key «ctrl+m»;
xdotool type s;
xdotool key Return;

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

В процессе написания столкнулся с проблемой клавиши Enter, то она работала, то она не работала, но в конце заработала так и не поняв в чем была причина.

И вот первый тест с 10 серверами, запускаю скрипт, и вдруг мне захотелось вставить свою флэшку (не помню почему), открылось окно с содержимим флэшки и в нем же начали октрываться подобные вкладки (в мозге пролетела мысль: «прикольная шняжка»). И тут я зразу же понял, что xdotool работает с активным окном. Почесав репу дошел до того, чтобы запустить полноценный скрипт надо, чтобы в момент выполнение все программы, которые могли помешать (даже Skype с дилоговыми всплываниями) должны быть выключены.
Тесты шли, работа шла, скрипт работал и я соответственно радовался. В конце концов родилось детище, которое открывало 19 серверов (соответствено за некоторое время):

#!/bin/bash
#Shared Servers
gnome-terminal;
WID=`xprop -root | grep «_NET_ACTIVE_WINDOW(WINDOW)»| awk ‘‘`;
export WID;
for i in <1..19>
do
WID=`xprop -root | grep «_NET_ACTIVE_WINDOW(WINDOW)»| awk ‘‘`;
export WID;
xdotool windowfocus $WID;
xdotool type «ssh root@server$«;
xdotool key Return;
xdotool key «ctrl+m»;
xdotool type s$;
xdotool key Return;
sleep 1;
WID=`xprop -root | grep «_NET_ACTIVE_WINDOW(WINDOW)»| awk ‘‘`;
export WID;
xdotool key «ctrl+n»
sleep 2;
done;
sleep 2;
xdotool key «ctrl+d»
xdotool windowsize —usehints $WID 300% 100%

Не знаю почему, но люблю когда все работает и выглядит красиво без особых затрат времени и усилий
Может некоторые части скрипта вовсе и не надо, но на стадии теста я их ввел и выводить не собираюсь.
Так как я не программист (хочу что-то писать, но не могу никак определиться что учить), хотя чесно говоря мне нравиться писать что-то свое, то мой скрипт на мое мнение не очень уж и плохой.

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

Источник

HostOnNet Blog

For Ubuntu, Debian or Linux Mint, you can just do:

For Fedora, use yum command:

For CentOS user, the package is available in EPEL repo. After enabling EPEL repo, simply use yum command as above.

For Arch user, the package is available in the Community repo:

If you cannot find xdotool for your distribution, you can always download it from the official website.

Basic Usage of Xdotool

As intuitive as it is, xdotool remains a scripting application. Hence you have to know the syntax in order to use it properly. Rest assured though, the syntax is very simple and quick to pick up, relative to the extent of the program’s features.

First, it is very easy to simulate key press. From the terminal, you can type the command:

If you want to chain two keys, use the “+” operator between them. So:

will switch window for you.

To have xdotool type for you, use the type command:

That’s already enough for basic key pressing. But one of the many strengths of xdotool is its ability to put the focus on a particular window. It can fetch the right window, and then type in it, preventing all your recorded keystrokes to just vaporize in thin air. For this, the simplest command is:

This will search through the opened window for one with the name matching the search, give it the focus, and then simulate the key pressing.

A bit more advanced, but very useful, xdotool can simulate mouse movement and click. With:

you can place the cursor at coordinates (x,y) of your screen (in pixels). You can also combine it with the “click” argument:

This will move the mouse to (x,y), and click with the left button. The “1” represents the left button of the mouse, “2” would be the scroll wheel, “3” the right button, etc.

Finally, once you have your commands in mind, you might want to actually dump it in a file to edit and play. For that, there is more than one syntax. You can write is a bash script:

where you write your commands in a separate file and plug its name as the argument.

Bonus

As a bonus to this post, here is a concrete example of xdotool in action. You may or may not have heard of Bing, the Microsoft’s search engine. In the latter case, you have then never heard of Bing Rewards: a program that allows you to trade Bing points for Amazon’s and other gift cards. To earn those points, you can do up to 30 searches a day on Bing, each search giving you 0.5 point. In other words, you have to make Bing your default search engine, and use it every day.

Or, you can use this xdotool script, which will automatically give focus to Firefox (replace it with your favorite navigator), and perform a search using the fortune command to generate some random words. In about 30 seconds, all your daily searches will be done.

To conclude, It is a really approachable way to scripting and task automation. The downside is that it probably is not the most efficient one.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Старые версии skype для mac os
  • Старкрафт для mac os
  • Стандартные обои mac os sierra
  • Ставим mac os на ноутбук
  • Ставим mac os на virtualbox