Skip to content

Instantly share code, notes, and snippets.

@simlun
Last active September 14, 2021 14:36
Show Gist options
  • Save simlun/1b27b14d707abbba8fc1 to your computer and use it in GitHub Desktop.
Save simlun/1b27b14d707abbba8fc1 to your computer and use it in GitHub Desktop.
Script to enable and disable the HDMI signal of the Raspberry PI
#!/bin/bash -e
# /usr/local/sbin/raspi-monitor
# Script to enable and disable the HDMI signal of the Raspberry PI
# Inspiration: http://www.raspberrypi.org/forums/viewtopic.php?t=16472&p=176258
CMD="$1"
function on {
/opt/vc/bin/tvservice --preferred
# Hack to enable virtual terminal nr 7 again:
chvt 6
chvt 7
}
function off {
/opt/vc/bin/tvservice --off
}
function must_be_root {
if [ $USER != root ]; then
echo "ERROR: Script must be executed as the root user"
exit 1
fi
}
function main {
must_be_root
if [ "$CMD" == "on" ]; then
on
elif [ "$CMD" == "off" ]; then
off
else
echo "Usage: $0 <on|off>"
exit 1
fi
exit 0
}
main
# /etc/cron.d/raspi-monitor-scheduler
# Enable the monitor every weekday morning at 8:00
0 8 * * 1,2,3,4,5 root /usr/local/sbin/raspi-monitor on > /dev/null 2>&1
# Disable the monitor every weekday evening at 17:30
30 17 * * 1,2,3,4,5 root /usr/local/sbin/raspi-monitor off > /dev/null 2>&1
@colindean
Copy link

colindean commented Jul 24, 2017

Apparently, this is the better way to turn off and turn on the display power now:

sudo vcgencmd display_power 0
sudo vcgencmd display_power 1

This is reflected in @sinrig's post but it's hard to spot.

@matheusft
Copy link

Is there any way of forcing the HDMI to only display a Framebuffer from a certain virtual console and block the Raspberry from switching automatically to the virtual console 1 when something is typed in the keyboard?

@lucvdv
Copy link

lucvdv commented Oct 6, 2018

Sinrig's solution works fine, with a couple of minuses.

  1. the xscreensave-command subprocess doesn't stop when I log out, so neither does the script.
  2. it consumes 100% CPU on one core, per instance running (i.e. one per time you logged off and back on).

I included a line 'time.sleep(0.5)' in the loop (and ' import time' near the top) to prevent 2, but haven't found a solution for 1 yet. Not that it happens a lot that I log off, usually power down or reboot.

--Edit

I have to take my words back on 1, it stopped now. Earlier today I found I had 3 copies running at 100% CPU and a thermometer warning icon at the right hand top of my desktop after logging off and back on a couple of times, can't explain why.

@sapnho
Copy link

sapnho commented Jul 21, 2019

sudo vcgencmd display_power 0

Unfortunately, this no longer works on the Raspberry Pi 4.

@dvbit
Copy link

dvbit commented Sep 19, 2020

now works again

@toehold
Copy link

toehold commented Sep 14, 2021

Hi,
in order to have the monitor output only shown, when there is no holiday, I added this 2 sections:
at line 7

###############################################
TODAY=$(date +%Y-%m-%d)
###############################################

after line 30,
###############################################
if grep -q $TODAY /home/pi/holidays.txt; then
echo Skipping holiday for $*
echo "Today $TODAY is a holiday!" >> /home/pi/today-is-a-holiday.txt
off
exit 0
fi
###############################################

Created a file: /home/pi/holidays.txt with a holiday on each line, e.g.

2021-11-01

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment