Автоматизация мартышкиного труда с помощью Xdotool и Ansible

от автора

Всем привет!

В этой небольшой статье я опишу простой способ, как можно автоматизировать 10 000+ ручных протыкиваний мышкой или клавиатурой на нескольких удаленных Linux-машинах (Xserver + SDDM).

Допустим, есть в нашем распоряжении некоторый парк машин, на которых нужно проделать руками очень долгую и однотипную рутину, состоящую из примитивных действий с клавиатурой и мышкой.

Задача облегчается наличием доступа по VNC, если машин хотя бы меньше 50 и клацать не так уж и много. А если нет?

На помощь к нам приходит Xdotool!

Если вкратце, это инструмент, позволяющий эмулировать работу клавиатуры, мыши, взаимодействовать с окнами и прочее.

Как можно понять из названия, он работает только с Xserver. Если у вас Wayland, можете заглянуть сюда: https://github.com/jordansissel/xdotool#wayland

Для сотворения магии нам понадобятся:

  • Linux с доступом по ssh

  • SDDM + любое окружение рабочего стола, работающее на Xserver

  • Установленный на нем Xdotool либо возможность сделать это

  • Ansible

Поставим задачу — открыть на удаленной машине Хабр и сделать окно на весь экран.
В моем распоряжении была KDE Plasma, в которой при нажатии Alt + Space появляется меню, в котором можно запускать приложения и задавать параметры.

Сразу скажу, что если дело касается работы с вебом, то используйте Firefox. К сожалению, Chrome очень любит задавать вопросы при старте и ломать этим всю всю остальную работу. По крайней мере, так было у меня.

Взмахнем же волшебной палочкой:

- name: Do monke job - hosts: some_hosts   tasks:     - name: Open Habr       ansible.builtin.shell:         cmd: |           export DISPLAY=":0" && \           export XAUTHORITY="$(/usr/bin/find /var/run/sddm/ -type f)"" && \           xdotool key "alt+space" && \           sleep 1s && \           xdotool type "firefox --kiosk https://habr.com" && \           sleep 1s && \           xdotool key Return \           sleep 5s 

Идем на хост и радуемся открытому Хабру!

А теперь о том, как это работает:

  1. export DISPLAY=":0" && \
    Задаем переменную DISPLAY. Один из двух параметров, необходимых для покдлючения к X-сессии.

  2. export XAUTHORITY="$(/usr/bin/find /var/run/sddm/ -type f)" && \
    Указываем команду, после отработки которой получим путь к Xauthority — файлу cookie, используемого для хранения учетных данных, необходимых xauth для аутентификации X-сессий.

    Почему /var/run/sddm/?
    Ответ прост — используя куки экранного менеджера, мы можем работать на стадии авторизации пользователя в системе. То есть необходимость в авторизации ручками отпадает.
    Тем не менее, можно сначала войти в пользователя, увидеть рабочий стол и взять Xauthority из домашней директории, и этот способ тоже будет рабочим.
    А теперь вернемся к плейбуку.

    Далее все просто.

  3. xdotool key "alt+space" && \
    Вызываем меню, через которое…

  4. xdotool type "firefox --kiosk https://habr.com" && \
    …Запускаем Firefox в режиме киоска (окно сразу открывается в фуллскрине), указав ссылку на Хабр.

  5. sleep 1s && \
    Ждем 1 секунду между действиями, чтобы все успело открыться.

  6. sleep 5s
    Иногда приходится ждать дольше, если открываем какое-то большое приложение.

На этом можно завершить.

Надеюсь, данная статья будет полезной и освободит вам целую кучу времени.

Полезные статьи про xdotool на Хабре:
https://habr.com/ru/sandbox/46514/
https://habr.com/ru/articles/214779/


ссылка на оригинал статьи https://habr.com/ru/articles/826918/


Комментарии

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

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