A PiPresents pipresents.wordpress.com/ show (we're talking about a Raspberry Pi running Raspbian) can be set to end at a time of day, but it does not have a way to set a day of the week. I have created a workaround for this using the standard Linux cron scheduler and some bash scripts.

Let's take a look at the first script. I think the comments explain it well enough. I named mine pp.sh. Be sure to make the file executable after you create it.

#!/bin/bash

# the name of the profile should be passed to this script
profile=$1

# show a black/blank screen
qiv -fmisC -d 5 /home/pi/media/common/blank.png &
# stop any running PiPresents shows
kill $(ps aux | grep pipresents.py | awk '{ print $2 }')
sleep 3;
# start the new show with the given profile and in the home folder below
python /home/pi/pipresents/pipresents.py -fb -o /home/pi/media -p "${profile}"

Now add an entry in cron to start the show. Run cron from your normal user (pi) in a terminal with crontab -e. The entry below starts a profile named 'myshow' at 8:30 am every sunday.

30 08 * * 0 /home/pi/pp.sh myshow

That's really all there is to it.

However, I also have a script to turn the screen on and off as part of the schedule, which would have a cron entry like this to turn off at 1:00 PM.

30 08 * * 0 /home/pi/screen.sh on; /home/pi/pp.sh myshow
00 13 * * 0 /home/pi/screen.sh off

Screen.sh looks like this.

#!/bin/bash

export XAUTHORITY=/home/pi/.Xauthority
export DISPLAY=":0"
export XAUTHLOCALHOSTNAME=localhost

if [ "$1" == "on" ]; then

  # see if we're already on
  state=$(tvservice -s | grep -oE 'DMT|CEA')
  echo "${state}"
  if [[ $state = "DMT" || $state = "CEA" ]]; then
    exit 0
  fi

  # turn on
  tvservice -p; 
  sleep 1;
  fbset -depth 8
  fbset -depth 16
  xrefresh
  sleep 3;

  # see if we're really on
  state=$(tvservice -s | grep -oE 'DMT|CEA')
  echo "${state}"
  if [[ $state = "DMT" || $state = "CEA" ]]; then
    exit 0
  fi
  exit 1
fi

if [ "$1" == "off" ]; then

  # see if we're already off
  state=$(tvservice -s | grep -o  'off')
  if [[ ${state} == "off" ]]; then
    exit 0
  fi

  # turn off
  tvservice -o;
  sleep 5;

  # see if we're really off
  state=$(tvservice -s | grep -o  'off')
  if [[ ${state} == "off" ]]; then
    exit 0
  fi
  exit 1
fi

Another improvement might be to turn off the PiPresents show when turning off the screen and turn on the screen based on some input.

Detecting MouseEnter and MouseLeave in a control that has lots of children controls (.Net)

Seems like I have been through this before. What I want to do is hide and show something, depending on whether the mouse is inside of a certain area. For instance, I have a container of some sort with lots of controls on it. When the mouse is anywhere inside of the container, I want a link to be visible. I can't simply use the MouseEnter/MouseLeave events on the container, because MouseLeave is triggered when the mouse enters a child control and the MouseEventArgs don't say anything about what control is being entered.

Say Goodbye to Windows 8's Start Screen

 

All of the people I've talked to who don't like Windows 8, don't like it because of the new start screen. You know, the tiled "apps" screen. A.K.A. "Metro" screen.

Maybe that sort of thing makes sense on a touchscreen device. Not on a desktop computer or standard laptop.

This free software brings back your start menu, like in Windows 7: ClassicShell. If you set it to start in desktop mode, you can say goodbye to the start screen! Here's how.