Как запретить xdotool блокировать текущее окно после выполнения скрипта?

Как запретить xdotool блокировать текущее окно после выполнения скрипта?

У меня есть простой BASH-скрипт с xdotool, который считывает некоторые данные из CSV и вводит их в форму в другом программном обеспечении:

#!/bin/bash

sleep 5

while read -r line
do
    a="$(echo $line | awk '{ print $1 }')"
    xdotool type $a
    xdotool key "$Tab"
done < ./data.csv

aplay Beep.wav

Скрипт работает как задумано, но после звукового сигнала экран блокируется:

  • Мышь движется, но ни одно окно ее не видит (например, не появляются подсказки), и она не может ни на что нажать, даже на текущее окно.
  • Слова на клавиатуре, но только в пределах текущего окна.
  • Окно блокируется таким образом примерно на 5 минут, а затем внезапно снова не блокируется.

Сочетание клавиш CTRL+ALT+F1 позволяет мне менять консоли, но killall -9 xfce4-terminalи killall -9 xdotoolэто не отключает блокировку.

Как предотвратить xdotoolблокировку текущего окна после его запуска в скрипте?

решение1

Он пищит, потому что ждет, когда вы нажмете на окно, с которым вы хотите, чтобы он взаимодействовал. Разве вы не заметили, что курсор изменился на символ '+'?

Прочитайте страницу man еще раз. Вам нужно указать идентификатор окна (--windowидентификатор)

решение2

Я наткнулся на этот довольно старый вопрос, ища ответ сам, потому что у меня была/есть похожая проблема. Я использую xdotool для автоматического ввода информации для входа на веб-сайты (в Firefox).

Я привязал комбинацию клавиш к скрипту с помощью xbindkeys. Скрипт идентифицирует имя окна (также с помощью xdotool), ищет связанную запись в зашифрованном файле, загружает соответствующую информацию для входа и вводит ее.

Я не буду объяснять тонкости моего скрипта, взаимодействие пользователя с ним и то, как он вводит информацию в поля ввода. Однако я решил проблему,добавление короткого сна непосредственно перед началом печати.

sleep 0.4
xdotool type ...

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

Связанный контент