Имеется следующий код:
#!/bin/bash
teeworlds "connect $1" >/dev/null &
sleep 0.2
TEEID=$(xdotool getwindowfocus)
while :
do
ACTION=$(shuf -i 1-4 -n 1)
case $ACTION in
1) xdotool key --window $TEEID "q" ;;
2) xdotool keyup --window $TEEID "d" &&
xdotool keyup --window $TEEID "a" &&
xdotool keydown --window $TEEID "d" ;;
3) xdotool keyup --window $TEEID "d" &&
xdotool keyup --window $TEEID "a" &&
xdotool keydown --window $TEEID "a" ;;
4) xdotool key --window $TEEID "space" ;;
esac
sleep 0.1
if ! xdotool search --class teeworlds | grep $TEEID >/dev/null
then break; fi
done
Собственно, он посылает определенные клавиши (в случайном порядке) в игру с задержкой на 0.1 сек.
Все бы ничего, но иногда, при манипуляциях с окнами (свернуть, открыть, открыть игру в фул в другом окне) сбивается скрипт и выдает примерно следующее:
X Error of failed request: BadWindow (invalid Window parameter)
Major opcode of failed request: 15 (X_QueryTree)
Resource id in failed request: 0xc6ea37
Serial number of failed request: 1144
Current serial number in output stream: 1144
0xc6ea37 - не тот id окна, что находится в TEEID, это точно. Тем не менее, иногда все работает довольно долго и без ошибок. Вопрос следующий: откуда он берет такой id, если переменная его не содержит? К слову, если намеренно запустить xdotool с неправильным id, то ошибка вместо X_QueryTree будет уже X_SendEvent, только вот мне это ничего не дает. Прошу помочь