Всем привет!
В этой небольшой статье я опишу простой способ, как можно автоматизировать 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
Идем на хост и радуемся открытому Хабру!
А теперь о том, как это работает:
export DISPLAY=":0" && \
Задаем переменную DISPLAY. Один из двух параметров, необходимых для покдлючения к X-сессии.export XAUTHORITY="$(/usr/bin/find /var/run/sddm/ -type f)" && \
Указываем команду, после отработки которой получим путь к Xauthority - файлу cookie, используемого для хранения учетных данных, необходимых xauth для аутентификации X-сессий.
Почему /var/run/sddm/?
Ответ прост — используя куки экранного менеджера, мы можем работать на стадии авторизации пользователя в системе. То есть необходимость в авторизации ручками отпадает.
Тем не менее, можно сначала войти в пользователя, увидеть рабочий стол и взять Xauthority из домашней директории, и этот способ тоже будет рабочим.
А теперь вернемся к плейбуку.
Далее все просто.xdotool key "alt+space" && \
Вызываем меню, через которое...xdotool type "firefox --kiosk https://habr.com" && \
...Запускаем Firefox в режиме киоска (окно сразу открывается в фуллскрине), указав ссылку на Хабр.sleep 1s && \
Ждем 1 секунду между действиями, чтобы все успело открыться.sleep 5s
Иногда приходится ждать дольше, если открываем какое-то большое приложение.
На этом можно завершить.
Надеюсь, данная статья будет полезной и освободит вам целую кучу времени.
Полезные статьи про xdotool на Хабре:
https://habr.com/ru/sandbox/46514/
https://habr.com/ru/articles/214779/
petro_64
Честно говоря, юзкейс у вас непонятный, почему просто не запустить браузер в X11 из-под пользователя в режиме киоска? Зачем именно из-под K-Menu?
buyurside Автор
Честно - не искал более изящного способа решения задачи. Главное, что работает. А дальше углубляться желания не было.
Если же все-таки есть способ запустить X11-приложение без DE и прочего, и вы сейчас про него, то это был не мой кейс.