Sabato, 05 Marzo 2016 07:35

Se il monitor si spegne guardando i film

Written by
Rate this item
(0 votes)

MI capita spesso, usando Linux, di notare che dopo un certo tempo che non uso tastiera e mouse, il monitor che si oscura un pò e poi si spegne, per una politica di risparmio energetico, tanto più quando l'alimentazione è a batteria. Tuttavia questo può essere fastidioso in alcuni frangenti, tipo quando si guarda un film.

E tanto più quando non ci puoi mettere le mani. Ad esempio nei viaggi in auto lunghi, con un bimbo piccolo a bordo, che rischiano di diventare pesanti, perché il pupo si annoia. Ok le canzoni alla radio, i libri, i giochetti, ma si sa, la cosa che cattura l'attenzione a lungo termine sono i cartoni. Un netbook è una via (si lo so ci sono anche i tablet...) per avere un sistema di intrattenimento da agganciare al sedile davanti per il bambino seduto comodo dietro.

Il mio netbook da tempo è Windows free. Windows starter aveva cominciato ad essere pesantissimo, specie dopo gli ultimi aggiornamenti. D'altronde il numero di servizi caricati e l'uso della memoria di applicativi in esecuzione e background mi davano una durata batteria sensibilmente inferiore a quella dello stesso netbook con Linux installato... tanto più quando è in uso un desktop environment leggero, tipo XFCE, ma ce ne sono anche di più leggeri.

Uno dei difetti del sistema col pinguino però è che, proprio per massimizzare la durata della batteria, il monitor se ne va in sleep dopo un pò che non si utilizza in maniera attiva il PC, ovverousando tasti o mouse. Ecco cosa fa il Display Power Management System- DPMS, il che è molto seccante, specie nella situazione descritta, specie se il fruitore del PC è un bimbo di 3 anni, specie se tu sei seduto davanti. D'altronde non è nemmeno furbo disabilitare il risparmio energetico per sempre, dato che invece la funzione è utile nel normale utilizzo del PC. Ad ogni modo ho anche provato dal pannello di gestione dell'energia a disabilitare lo spegnimento del monitor, per la durata della sessione in cui si fa solo uso multimediale, ma non so perché non ha avuto effetto. Quindi?

Cercando nei vari forum ho trovato 3 soluzioni, che sto ancora vagliando, quindi quale sarà la vincitrice lo dirò a breve:

1) easy way: installare un gestore dei processi apposta, tipo caffeine o usare uno script tipo LightsOn, bello e pronto da scaricare su GitHub. Nel primo caso ci sono dei programmi che possono essere messi in whitelist con semplici spunte, nel secondo si lancia lo script e basta. Lo script non fa altro che controllare, a determinati intervalli di tempo in secondi da specificare, se in esecuzione ci sono lettori multimediali o browser con flash in esecuzione (così da funzionare anche quando si guardano video su youtube). In quel caso setta i parametri opportuni per evitare lo spegnimento del monitor. Si può impostare in modo che si avvii da solo con il sistema o lanciarlo solo in caso di necessità. La differenza sostanziale è che cafferine individua i processi in esecuzione dal loro ID, quindi sia che stiano riproducendo che no, sia in fullscreen che no. LightsOn invece agisce solo quando le applicazioni sono in esecuzione E a schermo intero. Per settare lo script in modo che si avvii automaticamente si può andarlo a posizionare in modo opportuno o usare i pannelli di controllo. Ad esempio in XFCE c'è l'apposita funzione "Sessione e avvio" dove si possono specificare servizi e applicazioni da lanciare, togliendo quelli che non servono e aggiungendo altri voluti.

2)custom script: dato che magari avere una applicazione che gira sempre in background come caffeine può dare noia per il consumo di risorse, e uno script come LightsOn funziona solo se siamo a schermo intero, si può pensare di fare uno script personalizzato che lanci proprio il programma preferito spegnendo subito prima il DPMS e riaccendendolo alla chiusura del programma. Devo dire che l'idea non mi fa impazzire, in pratica si tratterebbe di fare un apposto lanciatore per una particolare applicazione. CI può anche stare, ma poi non funzionerebbe per youtube, ad esempio.

3)minimal way: dare i famosi comandi per spegnere il DPMS da terminale, o creare un launcher chiamandolo "video mode" che spenga la funzione di risparmio e la riaccenda magari dopo....o semplicemente poi si riavvia il pc. Ecco i comandi, da dare come UTENTE, NON ROOT:

xset -dpms
xset s off

UPDATE 20-3-16 And the winner is....

Chiaramente la mia preferenza va allo script LightsON, su cui si può anche mettere le mani per poterlo un pò personalizzare. Infatti su Mint XFCE il lettore multimediale predefinito è chiamato "Videos", anche se io SO che si tratta di Totem, un lettore leggero che mi è sempre piaciuto... che però non è contemplato nello script. Chiaro che è presente anche VLC, ma avere la possibilità di modificare uno script per aggiungere una opzione è sempre molto bello.

Andando ad esaminarlo con calma si nota che s'è una prima parte in cui si dichiarano le applicazioni da monitorare. Io ho aggiunto una riga per Totem:

# Modify these variables if you want this script to detect if Mplayer,
# VLC, Minitube, or Firefox or Chromium Flash Video are Fullscreen and disable
# xscreensaver/kscreensaver and PowerManagement.
mplayer_detection=1
vlc_detection=1
firefox_flash_detection=1
chromium_flash_detection=1
minitube_detection=1

totem_detection=1

A quel punto è stato necessario solo copiare la parte riguardante VLC cambiando un pò di cose.

C'è una sezione più in basso con

# check if active windows is mplayer, vlc or firefox
#TODO only window name in the variable activ_win_id, not whole line.
#Then change IFs to detect more specifically the apps "<vlc>" and if process name exist

e la parte su VLC

# Check if user want to detect vlc fullscreen, modify variable vlc_detection
    if [ $vlc_detection == 1 ];then
        if [[ "$activ_win_title" = *vlc* ]];then
            #check if vlc is running.
            #vlc_process=`pgrep -l vlc | grep -wc vlc`
            vlc_process=`pgrep -lc vlc`
            if [ $vlc_process -ge 1 ]; then
                return 1
            fi
        fi
    fi

Si nota che per stabilire se il processo è attivo controlla una variabile "activ_win_title" per vedere se contiene la stringa vlc. A quel punto da il suo lavoro.

Dunque dovrò copiare questa parte modificando un pò per Totem....sapendo però quale è il titolo della finestra del lettore, cosa non banale. Infatti quando lancio il lettore multimediale per i video (che io SO essere Totem) sulla finestra e nel menu esso viene indicato come "Videos".

Il comando che riempie la variabile active_win_titel è il seguente, e si trova qualche riga più su, appena sotto il blocco di inizio del controllo dei processi

#Get title of active window
    activ_win_title=`xprop -id $activ_win_id | grep "WM_CLASS(STRING)"`   # I used WM_NAME(STRING) before, WM_CLASS more accurate.

che a sua volta si appoggia alla variabile "active_win_id" rilevata ancora più sopra, nella sezione "Checkfullscreen()":

 #get id of active window and clean output
activ_win_id=`DISPLAY=:0.${display} xprop -root _NET_ACTIVE_WINDOW`
activ_win_id=${activ_win_id:40:9}

Ecco, eseguire questi comando da terminale non ha senso, dato che funziona per l'active window a schermo intero, e se lo schermo è intero come si fa a dare il comando?

Ecco allora che possiamo usare lo script stesso.

1) inseriamo subito sotto i pezzi in cui si determinano le due varibili, rispettivamente

 echo $activ_win_id

echo $activ_win_title

2) eseguiamo lo script da terminale ad intervalli brevi

./lightsOn.sh 5

3) lanciamo il lettore di video e mettiamolo a schermo intero, aspettando una decina di secondi.

4) chiudere il lettore, tornare al terminale, interrompere lo script con Ctrl+C e vedere l'output

$ ./lightsON.sh 5

0x2a003da
0x2a003da
0x2e0000f
0x2e0000f
WM_CLASS(STRING) = "totem", "Totem"
0x2e0000f
WM_CLASS(STRING) = "totem", "Totem"
0x2e0000f
WM_CLASS(STRING) = "totem", "Totem"
0x2a003da

Allora, 0x2a003da è l'id della finestra del terminale, da cui parto per lanciare lo script, 0x2e0000f è la finestra del lettore video che apro caricando il filmato, quindi ecco che appare la stringa con l'acti_win_title, che mi conferma essere totem.

Perciò ecco finalmente formato il mio pezzo da aggiungere nello script, giusto sotto a quello per vlc:

 if [ $totem_detection == 1 ];then
        if [[ "$activ_win_title" = *totem* ]];then
            #check if totem is running.
            totem_process=`pgrep -lc totem|grep -wc totem`
            if [ $totem_process -ge 1 ]; then
             return 1
            fi
        fi
    fi

C'è da dire che a questo punto si potrebbe anche fare in modo che lo script lavori anche sull'id o sul nome della finestra, qualora il programma dovesse uscire per qualche motivo dallo schermo intero, ma lo script andrebbe un attimo rivisto...magari alla prossima puntata!

 

Read 2773 times Last modified on Lunedì, 20 Marzo 2017 10:01

Aggiungi commento


Codice di sicurezza
Aggiorna

Annuncio pubblicitario by google

Questo sito utilizza cookies per amministrare autenticazioni, navigazione, statistiche di accesso e/o altre funzioni. Continuando la navigazione nel sito acconsentite che questi tipi di cookie vengano memorizzati nel vostro dispositivo.

Visualizzare la Politica sui Cookies

Visualizzare il Documento della Direttiva sulla e-Privacy

Avete Rifiutato i cookies. Questa decisione puo'essere modificata.

Avete acconsentito all'uso dei cookies. Questa decisione puo' essere modificata.