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

У меня есть cronjob, который изменяет мое настольное образование каждые 5 минут из каталога изображений карты флэш-памяти (изучение нового языка).

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

Это помогает, когда существует определенный порядок на карты флэш-памяти, и пропускающий несколько переходов портит опыт. Таким образом, когда мой cronjob работает, я должен обнаружить, если окна/приложения, видимые = 0 и только затем, изменяют настольный фон.

Я озирался и нашел wmctrl и xlsclients, но они показывают все виды информации, даже когда никакие приложения не открыты или видимы.

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

Спасибо!

2
задан 4 March 2019 в 17:53

2 ответа

Узнайте, минимизированы ли все окна

Существующий ответ упоминает правильные инструменты, но имеет довольно много проблем и не будет работать как есть.

Несколько важных:

  1. При использовании:

    s = Wnck.Screen.get_default()
    

    В "автономной" ситуации (не от существующего цикла), необходимо добавить (см. далее ниже), *:

    s.force_update()
    
  2. is_minimzed() метод и не будет работать без ()

  3. Ответ не применим в другой ситуации, чем OP's

Общий сценарий, чтобы просто видеть, минимизированы ли все окна, затем был бы:

#!/usr/bin/env python3
import gi
gi.require_version('Wnck', '3.0')
from gi.repository import Wnck

s = Wnck.Screen.get_default()
# when not run from a loop, tell it to force_update
# else there will be no output
s.force_update()

all_minimized = True

# go through all windows
for window in s.get_windows():
    # exclude windows like the desktop etc.
    if window.get_window_type() == Wnck.WindowType.NORMAL:
        # see if it is minimized
        if not window.is_minimized():
            # if any of the windows is not minimized -> all_minimized = False
            all_minimized = False


print(all_minimized)



отсюда:

Распространенные ошибки

В то время как API, обеспеченный libwnck, должен быть главным образом простым в целом, несколько ловушек часто поражаются пользователями библиотеки. Явная выборка информации При ее создании, объект WnckScreen не будет выбирать информацию от X-сервера. Если запрошено сразу после его создания (через wnck_screen_get_windows () или wnck_screen_get_workspaces (), например), объект WnckScreen будет похож нет никаких рабочих областей, ни окон на экране. Эта информация выбирается в основном цикле событий с неактивным источником, для предотвращения дорогой синхронной операции на запуске. Если никакой основной цикл событий не используется, или если информация необходима как можно скорее после того, как создание объекта, wnck_screen_force_update () может использоваться для явной выборки информации.

1
ответ дан 2 December 2019 в 04:38

Я закончил тем, что использовал сценарий Python для обнаружения этого, "все приложения минимизированы" состояние.

changebg = True
from gi.repository import Wnck
s = Wnck.Screen.get_default()
for window in s.get_windows():
    if window.get_window_type() == Wnck.WindowType.NORMAL:
        if not window.is_minimized:
            changebg = False

Сделайте соответствующие функции на основе значений changebg

0
ответ дан 2 December 2019 в 04:38

Другие вопросы по тегам:

Похожие вопросы: