Можно ли использовать xdotool на окне, которое не находится на переднем плане?

Вопрос или проблема

На рабочем столе Ubuntu, могу ли я использовать xdotool для щелчка мыши (например, чтобы нажать на ссылку) и нажать несколько клавиш (например, Ctrl+s) в окне (например, в окне Firefox), которое не находится на переднем плане, чтобы я мог работать в другом окне, которое может находиться поверх остальных окон, в то время как xdotool будет работать в скрытом окне?

Спасибо.

Чтобы получить ID окна, выполните:

sleep 5; xdotool getactivewindow

Это подождет 5 секунд, а затем получит ID активного окна. Выполните эту команду, щелкните на Firefox и дождитесь окончания. Используйте этот ID на следующем шаге.

Вы можете отправить нажатия клавиш непосредственно в конкретное окно, выполнив:

xdotool type --window [ID окна] Привет, мир

Используйте команду man xdotool, чтобы получить полный список команд и функций!

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

Да

Xdotool можно использовать для отправки ввода в окно, которое не находится на переднем плане. Однако не все окна примут такой ввод. Например, xterm не примет, если вы не отметите опцию “Разрешить отправку событий”. Chromium также не примет. Однако Firefox, по крайней мере, с 2019 года, работает.

Вот пример, который перезагружает текущую вкладку во всех окнах Firefox:

xdotool search --class firefox key --window %@ Ctrl+F5

Вы можете автоматически активировать это окно и вернуться в ранее активированное окно с помощью: (пример с отправкой пробела в Firefox)

activewindow=$(xdotool getactivewindow)
xdotool windowactivate --sync $(xdotool search --name "Firefox") key space
xdotool windowactivate "$activewindow"

Это сработало для меня с небольшими изменениями. Я не смог заставить это работать, используя встроенное выполнение.

    activewindow=$(xdotool getactivewindow)
    wantedwindow=$(xdotool search --name "Firefox")
    xdotool windowactivate $wantedwindow
    (xdotool commands here, starting with xdotool e.g. xdotool mousemove 0 0)
    xdotool windowactivate $activewindow

xdotool удивителен !!!
‘getactivewindow’ и ‘getmouselocation’ это именно то, что я искал, но мне нужна небольшая помощь с bash-скриптом для выполнения задачи.

Что мне нужно сделать, так это запустить скрипт, который будет использовать команду ‘sleep’, чтобы дать мне время добраться до целевого окна и разместить мышь там, куда я хочу, чтобы пришел ‘click1’, использовать запрос ‘getmouselocation’, чтобы получить эти данные, сохранить эти данные в переменных, а затем перейти в цикл ‘for’ (логика которого у меня уже написана), чтобы произвести ‘click1’ в той x/y на этом окне (вероятно, в другом рабочем пространстве, чем то, в которое я буду перемещаться). Это нужно для того, чтобы я мог определить окно и местоположение мыши – а затем перейти в другое рабочее пространство, чтобы делать другие вещи, в то время как xdotool продолжает производить щелчок на назначенном окне в указанном местоположении мыши.

У меня есть скрипт для основной функции – выполненный каждый (#) минуту повторно, пока я не остановлю скрипт вручную, но в данный момент я должен оставаться ‘активным’ на этом окне, чтобы это работало.

Любая краткая помощь будет оценена…
И примеры скриптов также будут оценены.

adTHANKSvance,
Брюс

Ответ или решение

Использование xdotool для взаимодействия с окнами в фоновом режиме на Ubuntu

Введение

xdotool — это мощный инструмент для автоматизации взаимодействия с графическим интерфейсом пользователя в Linux, который может быть использован для отправки нажатий клавиш и перемещения курсора мыши к окнам, находящимся не на первом плане. Данный ответ подробно рассмотрит, как можно использовать xdotool для работы с окнами, не находящимися в фокусе, на примере операционной системы Ubuntu.

Основные возможности xdotool

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

Вот несколько ключевых команд:

  1. Получение активного окна:

    sleep 5; xdotool getactivewindow

    Эта команда позволяет получить ID активного окна после 5 секунд ожидания, что дает вам время для выбора нужного окна (например, Firefox).

  2. Отправка текста в конкретное окно:

    xdotool type --window [ID окна] "Hello World"

    Это полезно для отправки текстовых сообщений в приложение, находящееся не на переднем плане.

Взаимодействие с окнами, не находящимися на переднем плане

Хотя xdotool может отправлять команды в окна, находящиеся в фоновом режиме, нужно учитывать, что не все приложения принимают такие команды. Например, приложения, такие как xterm или Chromium, могут игнорировать ввод, если они не активированы. Однако Firefox, по состоянию на 2019 год, поддерживает эту функцию и позволяет отправлять команды через xdotool.

Пример команды для перезагрузки вкладки в Firefox

Для перезагрузки текущей вкладки во всех окнах Firefox можно использовать следующую команду:

xdotool search --class firefox key --window %@ Ctrl+F5

Эта команда ищет все окна Firefox и отправляет команду перезагрузки.

Автоматическая активация окна

Вы можете также использовать xdotool для автоматической активации окна, а затем возвращаться к предыдущему окну. Пример команды:

activewindow=$(xdotool getactivewindow)
xdotool windowactivate --sync $(xdotool search --name "Firefox") key space
xdotool windowactivate "$activewindow"

Здесь мы сохраняем ID активного окна, активируем окно Firefox, отправляем команду нажатия клавиши и затем возвращаем фокус на первоначальное окно.

Пример скрипта для автоматизации кликов

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

#!/bin/bash

# Ждем 10 секунд для выбора окна и положения мыши
sleep 10

# Получаем текущие координаты мыши
eval $(xdotool getmouselocation --shell)

# Цикл для регулярного клика
while true; do
    xdotool mousemove $X $Y click 1
    sleep 60 # ожидание 60 секунд между кликами
done

Этот скрипт будет непрерывно кликать на заданные координаты каждую минуту. Вам нужно будет вручную остановить его, нажав Ctrl+C.

Заключение

В заключение, xdotool — это универсальный и мощный инструмент для автоматизации взаимодействия с оконными приложениями в системах Linux, позволяющий отправлять команды и клики в окна, даже если они не находятся на переднем плане. Однако важно помнить, что не все приложения поддерживают такую функциональность. Перед использованием стоит протестировать, как конкретное приложение реагирует на команды xdotool.

Если вам понадобится дальнейшая помощь или более сложные сценарии автоматизации, вы всегда можете обратиться к документации xdotool, вызвав команду man xdotool или найти ресурсы онлайн.

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

Капча загружается...