Всем привет!

В этой небольшой статье я опишу простой способ, как можно автоматизировать 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/

Комментарии (2)


  1. petro_64
    05.07.2024 16:41
    +2

    Честно говоря, юзкейс у вас непонятный, почему просто не запустить браузер в X11 из-под пользователя в режиме киоска? Зачем именно из-под K-Menu?


    1. buyurside Автор
      05.07.2024 16:41

      Честно - не искал более изящного способа решения задачи. Главное, что работает. А дальше углубляться желания не было.
      Если же все-таки есть способ запустить X11-приложение без DE и прочего, и вы сейчас про него, то это был не мой кейс.