Как выяснить, действительно ли окно отображается на экране, используя скрипт оболочки?
Я пытаюсь написать сценарий оболочки, который распознает, отображается ли окно Thunderbird, и если да, то выводит его в трей сообщений.
Я хотел бы использовать его в ответе на вопрос " Как сохранить работу Thunderbird и Pidgin в фоновом режиме? ".
Пока что я использую "xdotool", чтобы проверить, отображается ли Thunderbird, исимулировать закрытие на нем, как это было предложено в разделе " Как эмулировать нажатие кнопки" Закрыть "из скрипта?".
#!bin/bash
thunderbird &
TB=$(xdotool search --class thunderbird)
while [ -z "$TB" ]; do
sleep 2
TB=$(xdotool search --class thunderbird)
done
xdotool search --class thunderbird windowunmap %@
Но xdotool search --class thunderbird
возвращает результат к моменту запуска Thunderbird до того, как он будет отображен, xdotool search --class thunderbird windowunmap %@
ждет вечно ничего не делая
Чтобы обойти это ограничение sleep xx
добавляется в фактическую команду, но необходимое время ожидания зависит от системы к системе.
Я также использовал "xwininfo", чтобы проверить, отображается ли Thunderbird, но он ведет себя так же, как "xdotool", поэтому мне пришлось добавить sleep xx
здесь тоже.
#!bin/bash
thunderbird &
t="Thunderbird"
stop=0
xwininfo -name $t > /dev/null 2>&1
if [ $? -eq 0 ]; then
stop=1
fi
while [ $stop -eq 0 ]; do
xwininfo -name $t > /dev/null 2>&1
if [ $? -eq 0 ]; then
stop=1
fi
done
sleep 2
xdotool search --class thunderbird windowunmap %@
Есть ли другой способ проверить "реально" отображаемые окна?