Как выяснить, действительно ли окно отображается на экране, используя скрипт оболочки?

Я пытаюсь написать сценарий оболочки, который распознает, отображается ли окно 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 %@

Есть ли другой способ проверить "реально" отображаемые окна?

1 ответ

Попробуй это:

wmctrl -l | grep -i thunderbird
Другие вопросы по тегам