2 votos

¿Cómo detecto cuándo se minimizan todas las ventanas / aplicaciones y solo se ve el escritorio?

Tengo un cronjob que cambia el fondo de escritorio cada 5 minutos desde un directorio de flashcard imágenes (el aprendizaje de un nuevo idioma).

Ahora el fondo de pantalla cambia cuando tengo ventanas abiertas (y no puedo ver el fondo de escritorio). Idealmente quiero que este script se ejecute cada vez que me han cerrado o se minimiza todas mis ventanas.

Esto ayuda cuando no hay un orden específico para las flashcards y los que faltan un par de transiciones estropea la experiencia. Así que cuando mi tarea programada se ejecuta necesito para detectar si windows/apps visible = 0 y sólo a continuación, cambiar el fondo de escritorio.

Miré a mi alrededor y encontró wmctrl y xlsclients pero se muestran todo tipo de información, incluso cuando no hay aplicaciones están abiertas o visible.

¿Hay alguna forma de detectar este estado desde la línea de comandos, así que puedo utilizar en mi script?

Gracias!

1voto

Jacob Vlijm Puntos 24137

Averiguar si todas las ventanas se minimizan

La respuesta existente se menciona el derecho de las herramientas, pero tiene bastantes problemas, y no funciona como es.

Un par de importantes:

  1. Cuando se usa:

    s = Wnck.Screen.get_default()
    

    En un "independiente" de la situación (no de un bucle existente), es necesario agregar (ver más abajo)*:

    s.force_update()
    
  2. is_minimzed() es un método, y no funcionará sin ()

  3. La respuesta no es utilizable en otra situación de OP

Un general de la secuencia de comandos para ver si todas las ventanas se minimizan sería:

#!/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)



a partir de aquí:

Los Errores Más Comunes

Mientras que la API proporcionada por libwnck debe ser en su mayoría directa y, en general, un par de trampas que a menudo son afectados por los usuarios de la biblioteca. Explícita a que la obtención de la información En su creación, un WnckScreen objeto de no haber traído la información desde el servidor X. Si consultan inmediatamente después de su creación (a través de wnck_screen_get_windows() o wnck_screen_get_workspaces(), por ejemplo), el WnckScreen objeto parecerá que no hay espacios de trabajo ni de windows en la pantalla. Esta información se recopila en el evento principal de bucle con una inactividad de origen, para evitar una costosa operación síncrona en el inicio. Si no hay ningún evento principal de bucle se utiliza, o si la información es necesaria tan pronto como sea posible después de la creación del objeto, wnck_screen_force_update() puede ser utilizada de forma explícita recuperar la información.

0voto

Sharun Puntos 108

Terminé usando un script de Python para detectar este estado de "todas las aplicaciones están minimizadas".

 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
 

Realiza funciones relevantes basadas en valores changebg.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: