« The watch & pgrep Commands | Main | noblank: Part Deux »

noblank: A Generic Screensaver Preventer

A while ago, I posted an extremely simplistic script for preventing screensaver activation while using gxine. Ever since then, I've felt increasingly embarrassed about leaving a more generic version as "an exercise for the reader". It's time to make amends.

I call the following script noblank. (I also considered calling it noss.) It should be used similarly to nohup. For example, to avoid an annoying interruption while watching a movie:

noblank mplayer dvd://
The beauty of this solution is that it can also be used while leisurely reading a good book:
noblank acroread Alice_in_Wonderland.pdf

And so, without further ado, I present noblank (download file):

#!/bin/bash
kscreensaver=$(dcop kdesktop KScreensaverIface isEnabled 2>/dev/null)
if [ -n $kscreensaver ]; then
  dcop kdesktop KScreensaverIface enable false &>/dev/null
fi
(exec "$@")&
PID=$(jobs -p)
( while [ -d /proc/$PID ] &>/dev/null ; do
    xscreensaver-command -deactivate &>/dev/null
    gnome-screensaver-command --poke &>/dev/null
  done
  if [ -n $kscreensaver ]; then
    dcop kdesktop KScreensaverIface enable $kscreensaver &>/dev/null
  fi
)&
wait $PID