Come rilevare se l'utente sta guardando un video a schermo intero?
Situazione attuale
Sospendo il mio laptop dopo 30 minuti di inattività. Sto usando questo codice all'interno di questo script per rilevare la durata dell'inattività.
Problema originale
VLC (e sono abbastanza sicuro che qualsiasi altro lettore video che impedisce l'esecuzione dello screen saver) invia un segnale periodico (ogni 30 secondi) per disturbare gli eventi del mouse / tastiera, quindi lo screen saver (quindi il mio codice) pensa che "end di tempo di inattività è raggiunto "e non esegue mai il comando desiderato fino a quando VLC non termina la riproduzione della playlist video.
Problema introdotto
Ho aggirato il problema ignorando qualsiasi piccolo input dell'utente tenendo traccia di un file offset
. Se il disturbo è molto breve, aggiungo semplicemente la misura precedente alla offset
variabile, quindi il problema principale è sparito. Tuttavia, ho anche disabilitato la funzione "elimina lo screensaver durante la visione di video" di VLC. Ora voglio aggiungere di nuovo questa funzione.
Domanda
Come posso rilevare se VLC sta riproducendo un video a schermo intero (o più preferibilmente, qualsiasi "stato video a schermo intero" da qualsiasi lettore) in modo da poter disabilitare "il mio salvaschermo" solo quando un'applicazione / VLC è in modalità a schermo intero?
Risposte
È possibile utilizzare xdotool
per ottenere la geometria della finestra principale e la geometria della finestra VLC. Se sono uguali, la finestra di VLC è a schermo intero.
gRoot=$(xdotool search --maxdepth 0 '.*' getwindowgeometry | grep 'Geometry:') gActive=$(xdotool getactivewindow getwindowgeometry | grep 'Geometry:')
if [ "$gRoot" = "$gActive" ]; then
echo "The active window is fullscreened."
else
echo "The active window is not fullscreened."
fi
Il primo comando utilizza in --maxdepth 0
modo che venga cercata solo la finestra principale.
Un comando correlato è xdotool getdisplaygeometry
. Non è documentato nel manuale, ma ha una menzione nella lista delle modifiche . Tieni presente che restituisce le dimensioni di visualizzazione nella forma [Width] [Height]
anziché [Width]x[Height]
come getwindowgeometry
fa, quindi il suo utilizzo richiede un'ulteriore elaborazione per effettuare il confronto di uguaglianza.