Desactivar salvapantallas en youtube y demás.

Pues eso que no logro desactivar el salvapantallas cuando estoy viendo algún vídeo online en youtube o similares, y la verdad resulta muy molesto el tener que estar pendiente de mover el ratón o presionar alguna tecla de vez en cuando para evitar que el salvapantallas salte.

Buscando un poco por la red recomiendan instalar la aplicación llamada caffeine que por lo visto permite desactivar el dichoso salvapantallas cuando las aplicaciones que uno seleccione estén funcionando a pantalla completa. De modo que e añadido el repositorio del caffeine y lo e instalado, pero cuando lo ejecuto no se abre ninguna interfaz gráfica donde configurar las citadas aplicaciones en las cuales desactivar el salvapantallas.

Si miro el monitor del sistema puedo ver que el caffeine esta corriendo después de ejecutarlo pero como ya digo no muestra ninguna interfaz así que supongo que no esta funcionando bien.
Y luego ademas en algún otro lugar de la red e encontrado este script:

#!/bin/bash
# lightsOn.sh

# Copyright (c) 2011 iye.cba at gmail com
# url: https://github.com/iye/lightsOn
#
This script is licensed under GNU GPL version 2.0 or above

# Description: Bash script that prevents the screensaver and display power
# management (DPMS) to be activated when you are watching Flash Videos
# fullscreen on Firefox and Chromium.
# Can detect mplayer and VLC when they are fullscreen too but I have disabled
# this by default.
# lightsOn.sh needs xscreensaver, kscreensaver or gnome-screensaver to work.

# HOW TO USE: Start the script with the number of seconds you want the checks
# for fullscreen to be done. Example:
# "./lightsOn.sh 120 &" will Check every 120 seconds if Mplayer,
# VLC, Firefox or Chromium are fullscreen and delay screensaver and Power Management if so.
# You want the number of seconds to be ~10 seconds less than the time it takes
# your screensaver or Power Management to activate.
# If you don't pass an argument, the checks are done every 50 seconds.

# Modify these variables if you want this script to detect if Mplayer,
# VLC or Firefox Flash Video are Fullscreen and disable
# xscreensaver/kscreensaver/gnome-screensaver and PowerManagement.
mplayer_detection=1
vlc_detection=1
firefox_flash_detection=1
chromium_flash_detection=1
html5_detection=1 #checks if the browser window is fullscreen; will disable the screensaver if the browser window is in fullscreen so it doesn't work correctly if you always use the browser (Firefox or Chromium) in fullscreen

# YOU SHOULD NOT NEED TO MODIFY ANYTHING BELOW THIS LINE

# enumerate all the attached screens
displays=""
while read id
do
    displays="$displays $id"
done< <(xvinfo | sed -n 's/^screen #\([0-9]\+\)$/\1/p')

# Detect screensaver been used (xscreensaver, kscreensaver, gnome-screensaver or none)
if [ `pgrep -l xscreensaver | grep -wc xscreensaver` -ge 1 ];then
    screensaver=xscreensaver
elif [ `pgrep -l gnome-screensav | grep -wc gnome-screensav` -ge 1 ];then
    screensaver=gnome-screensav
elif [ `pgrep -l kscreensaver | grep -wc kscreensaver` -ge 1 ];then
    screensaver=kscreensaver
else
    screensaver=None
    echo "No screensaver detected"    
fi

checkFullscreen()
{
    # loop through every display looking for a fullscreen window
    for display in $displays
    do
        #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#*# } #gives error if xprop returns extra ", 0x0" (happens on some distros)
        activ_win_id=${activ_win_id:40:9}

        # Skip invalid window ids (commented as I could not reproduce a case
        # where invalid id was returned, plus if id invalid
        # isActivWinFullscreen will fail anyway.)
        #if [ "$activ_win_id" = "0x0" ]; then
        #     continue
        #fi
       
        # Check if Active Window (the foremost window) is in fullscreen state
        isActivWinFullscreen=`DISPLAY=:0.${display} xprop -id $activ_win_id | grep _NET_WM_STATE_FULLSCREEN`
            if [[ "$isActivWinFullscreen" = *NET_WM_STATE_FULLSCREEN* ]];then
                isAppRunning
                var=$?
                if [[ $var -eq 1 ]];then
                    delayScreensaver
                fi
            fi
    done
}

   

# 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

isAppRunning()
{   
    #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.

    # Check if user want to detect Video fullscreen on Firefox, modify variable firefox_flash_detection if you dont want Firefox detection
    if [ $firefox_flash_detection == 1 ];then
        if [[ "$activ_win_title" = *unknown* || "$activ_win_title" = *plugin-container* ]];then
        # Check if plugin-container process is running
            flash_process=`pgrep -l plugin-containe | grep -wc plugin-containe`
            #(why was I using this line avobe? delete if pgrep -lc works ok)
            #flash_process=`pgrep -lc plugin-containe`
            if [[ $flash_process -ge 1 ]];then
                return 1
            fi
        fi
    fi

   
    # Check if user want to detect Video fullscreen on Chromium, modify variable chromium_flash_detection if you dont want Chromium detection
    if [ $chromium_flash_detection == 1 ];then
        if [[ "$activ_win_title" = *exe* ]];then  
        # Check if Chromium Flash process is running
            if [[ `pgrep -lfc "chromium-browser --type=plugin --plugin-path=/usr/lib/adobe-flashplugin"` -ge 1 || `pgrep -lfc "chromium-browser --type=plugin --plugin-path=/usr/lib/flashplugin-installer"` -ge 1 ]];then
                return 1
            fi
        fi
    fi

    #html5 (Firefox or Chromium full-screen)
    if [ $html5_detection == 1 ];then
        if [[ "$activ_win_title" = *chromium-browser* || "$activ_win_title" = *Firefox* ]];then  
            #check if firefox or chromium is running.
            if [[ `pgrep -l firefox | grep -wc firefox` -ge 1 || `pgrep -l chromium-browse | grep -wc chromium-browse` -ge 1 ]]; then
                return 1
            fi
        fi
    fi

   
    #check if user want to detect mplayer fullscreen, modify variable mplayer_detection
    if [ $mplayer_detection == 1 ];then 
        if [[ "$activ_win_title" = *mplayer* || "$activ_win_title" = *MPlayer* ]];then
            #check if mplayer is running.
            #mplayer_process=`pgrep -l mplayer | grep -wc mplayer`
            mplayer_process=`pgrep -lc mplayer`
            if [ $mplayer_process -ge 1 ]; then
                return 1
            fi
        fi
    fi
   
   
    # 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   
   

return 0
}

delayScreensaver()
{

    # reset inactivity time counter so screensaver is not started
    if [ "$screensaver" == "xscreensaver" ]; then
#This tells xscreensaver to pretend that there has just been user activity. This means that if the screensaver is active (the screen is blanked), then this command will cause the screen to un-blank as if there had been keyboard or mouse activity. If the screen is locked, then the password dialog will pop up first, as usual. If the screen is not blanked, then this simulated user activity will re-start the countdown (so, issuing the -deactivate command periodically is one way to prevent the screen from blanking.)
    xscreensaver-command -deactivate > /dev/null
    elif [ "$screensaver" == "gnome-screensav" ]; then
dbus-send --session --type=method_call --dest=org.gnome.ScreenSaver --reply-timeout=20000 /org/gnome/ScreenSaver org.gnome.ScreenSaver.SimulateUserActivity > /dev/null
    elif [ "$screensaver" == "kscreensaver" ]; then
    qdbus org.freedesktop.ScreenSaver /ScreenSaver SimulateUserActivity > /dev/null
    fi

    #Check if DPMS is on. If it is, deactivate and reactivate again. If it is not, do nothing.   
    dpmsStatus=`xset -q | grep -ce 'DPMS is Enabled'`
    if [ $dpmsStatus == 1 ];then
        xset -dpms
        xset dpms
fi

}

delay=$1

# If argument empty, use 50 seconds as default.
if [ -z "$1" ];then
    delay=50
fi

# If argument is not integer quit.
if [[ $1 = *[^0-9]* ]]; then
    echo "The Argument \"$1\" is not valid, not an integer"
    echo "Please use the time in seconds you want the checks to repeat."
    echo "You want it to be ~10 seconds less than the time it takes your screensaver or DPMS to activate"
    exit 1
fi

while true
do
    checkFullscreen
    sleep $delay
done

exit 0   

Pero aunque si funciona con los reproductores mplayer y vlc por desgracia no es así para los navegadores firefox y chromium, que por otro lado es justo donde mas me interesaría que sirviera.
En fin que ¿como puedo desactivar el salvapantallas al ver los vídeos online o como puedo hacer funcionar al caffeine si es que esta aplicación realmente funciona para esto?
Saludos...

Me dado cuenta de que no necesito el script de arriba para deshabilitar el salvapantallas en el vlc ni tampoco en el smplayer ya que al parecer estos reproductores lo deshabilitan por si solos (por tanto el script seguramente no vale para nada).

El problema es que a mi donde mas me interesa deshabilitar el salvapantallas es en el navegador (firefox, chromium, opera, o por lo menos en alguno de ellos) mientras visualizo vídeos online en youtube o sitios similares.
Saludos...

Al final lo e podido solucionar de esta forma que aunque no es muy ortodoxa al menos es la ÚNICA que realmente FUNCIONA.
Se trata de este script:

#!/bin/bash
# credits goes to
http://silviumc.wordpress.com/2011/12/05/how-to-stop-the-screen-saver-in-kde-
while-watching-long-flash-clips-in-a-web-browser/

while /bin/true
do
qdbus org.freedesktop.ScreenSaver /ScreenSaver SimulateUserActivity > /dev/null;
sleep 1m;
done

Este script guardado en un archivo que le nombrado como 'salvapantallas.bash' y que e puesto en la carpeta de mi usuario y cargado a través de un atajo del teclado lo que por lo visto hace es deshabilitar el salvapantallas. De modo que lo único que tengo que hacer antes de empezar (o durante) a ver el vídeo online es presionar el atajo del teclado y ya me olvido del dichoso salvapantallas. Después al terminar la reproducción del vídeo o vídeos online si deseo volver a habilitar el salvapantallas solo presiono otro atajo del teclado en el que como comando e puesto 'killall salvapantallas.bash' y listo osea ya vuelve a habilitarse el salvapantallas al matar al script.

En fin si alguien tiene alguna idea mejor que no dude el comentarlo.
Saludos...

Hola.
Las dos lineas de la url irían comentadas, ¿verdad?

Aquí he encontrado este plasmoide "Screensaver Control":
http://kde-apps.org/content/show.php/Screensaver+Control?content=146137

El plasmoide debe hacer algo similar al script que has puesto, es decir emular actividad del usuario. Ya que yo no tengo habilitado el salva pantallas pero si tengo configurado que el monitor entre en modo de ahorro de energía a un cierto tiempo, y al parecer el plasmoide ha funcionado.

Supongo que sería bueno también la autodetección de cuándo el plugin flash está en reproducción de un video, pero bueno, el script y el plasmoide son buenas alternativas.

Saludos.

Si bueno irían comentadas o mejor irían eliminadas jeje. Mas que nada porque la url no lleva a ningún sitio que parezca tener relación alguna con el tema (no se como e olvidado quitarlas).
Saludos...

Es porque hay un salto de linea en el guión después de "kde" en la url. Si lleva al lugar a donde explica que hace esos comandos:
http://silviumc.wordpress.com/2011/12/05/how-to-stop-the-screen-saver-in...

Supongo que el script que pones sería mejor así:

Script escribió:

#! /bin/bash
# credits goes to
# http://silviumc.wordpress.com/2011/12/05/how-to-stop-the-screen-saver-in-kde-while-watching-long-flash-clips-in-a-web-browser

while /bin/true; do qdbus org.freedesktop.ScreenSaver /ScreenSaver SimulateUserActivity > /dev/null; sleep 1m; done

Lo que ocurre además es que parece que la etiqueta "código" del foro no respeta lineas largas y hace saltos de linea, y además si se pone la url que es larga, la corta. Ahí arriba he puesto el script dentro de la etiqueta "cita" y la url dentro de la etiqueta "código". Si se copia y pega lo anterior en un archivo de texto (sin lo que aparece en negrita "Script escribió:"), se ve que la url aparece en una sola linea.

Me parece que después de lo de:

# credits goes to

Hay otro salto de linea que a puesto el foro. Yo creo que todo es la misma linea, osea empieza en lo de # credits goes to y luego sigue la url completa todo en la misma linea. Osea no son dos lineas una lo de # credits goes to y otra la url (que también esta en dos lineas) sino que todo el conjunto es la misma linea.
Saludos...

He encontrado este otro script que también funciona:

#!/bin/bash

programs="firefox chromium opera"

sleep 270 # wait medio minute to check as we just started KDE
for pgm in ${programs}; do # Check list of programs one by one
     if ps axo comm | grep -q ${pgm} ;then # Is a program running?
# Yes, simulate user activity vice shutting down the screen saver
qdbus org.kde.screensaver /ScreenSaver SimulateUserActivity
break # All done, we had at least one program running.
    fi
done
exec $0 $* # Restart this script

En este caso hay que tener en cuenta que yo tengo configurado mi sistema para que el salvapantallas salte a los 5 minutos osea a los 300 segundos por lo que en lo de 'sleep' con ponerle para que compruebe que los programas se están o no ejecutando 30 segundos antes es suficiente y por eso le puesto el valor de 270. Pero el que tenga configurado su salvapantallas para otro tiempo distinto de los 5 minutos que yo tengo puede cambiar el valor de 270 por otro que como ya digo que sea por ejemplo 30 segundos inferior al tiempo de salto del salvapantallas.

Este script cargado al inicio del sistema hace que mientras se este ejecutando alguno de los programas allí puestos como en este caso el firefox, chromium, y opera el salvapantallas quede desactivado, y vuelva a activarse automáticamente en cuanto no haya ninguno de dichos programas en ejecución.
Se pueden añadir mas programas o quitar los que yo e puesto claro esta.

De echo mi pregunta está relacionada con esto. Como ya digo el script funciona muy bien pero lo que me gustaría es sustituir el firefox, chromium, y opera por el flasplayer o el html5. Pero por desgracia no logro identificar el proceso que debo poner para ello, osea no se que proceso se activa al estar viendo un vídeo online con el flashplayer o en html5. Si tuviera dichos nombres podría sustituir los de los navegadores por ellos para que de este modo el salvapantallas estuviera activo con los navegadores y solo se desactivara al iniciarse el flashplayer o html5 cuando estuviera viendo un vídeo online.

He de decir que e probado cosas como flash, flashplayer, libflasplayer, libflashplayer.so, html5, plugin (este ultimo funciona pero no sirve porque el plugin-container no se cierra mientras el navegador firefox siga abierto aunque ya no se este viendo ningún vídeo por lo que para el caso es lo mismo que poner el navegador), etc pero no e logrado resultados positivos.
En fin si alguien sabe el nombre del proceso que se activa con el flashplayer y html5 al ver vídeos online por favor decirlo y así el script quedaría perfecto.
Saludos...