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