Create a gist now

Instantly share code, notes, and snippets.

@AGWA /rpi-hdmi.sh
Last active Sep 19, 2017

What would you like to do?
Enable and disable the HDMI port on the Raspberry Pi: `rpi-hdmi on` to turn on, `rpi-hdmi off` to turn off. X is properly reinitialized when re-enabling.
#!/bin/sh
# Enable and disable HDMI output on the Raspberry Pi
is_off ()
{
tvservice -s | grep "TV is off" >/dev/null
}
case $1 in
off)
tvservice -o
;;
on)
if is_off
then
tvservice -p
curr_vt=`fgconsole`
if [ "$curr_vt" = "1" ]
then
chvt 2
chvt 1
else
chvt 1
chvt "$curr_vt"
fi
fi
;;
status)
if is_off
then
echo off
else
echo on
fi
;;
*)
echo "Usage: $0 on|off|status" >&2
exit 2
;;
esac
exit 0

arionl commented Mar 30, 2014

I have a standard console on VT1 and X11 on VT2. When I ran your script initially, it wasn't working. I poked around a bit and it seems that the VT numbers were getting mixed up for some reason. I added some sleeps in between the chvt commands and that seems to have fixed things. I let it burn in for a few hours running:

while true; do sudo ./rpi-hdmi off; sleep 10; sudo ./rpi-hdmi on; sleep 60; done

...and it seems to be working consistently now. Thanks for your help with this solution!

Chalta commented Feb 24, 2017 edited

Just a note to other users, the fgconsole command must be called with sudo privileges or you will get an error:

Couldn't get a file descriptor referring to the console

IBKDan commented Mar 30, 2017

@Chalta - are you saying you modified the line from:
curr_vt=`fgconsole`
to be:
curr_vt=sudo `fgconsole`

Hello
Is there a way to switch between hdmi and composite video without rebooting?

quelleck commented Apr 6, 2017 edited

@IBKDan I found some comments suggesting vcgencmd instead of tvservice (info here). I forked this and used vcgencmd instead. So far no issues, and no need for sudo.

Hi all. I am trying to use this script to turn my raspberry pi on/off at different times depending if its a work day or a weekend.
I know how to setup the weekday AND weekend requests separate from one another. 

My requirements: 
M-F: (turn it off all day, only back on when we get home after work)
Every day during the week I want the HDMI port on at 7AM, and off at 9AM. I want it back on when we get home at work from 5:00 PM and to turn off for the day at 11PM.

Sat-Sun: (leave it on all day)
On at 7AM, Off at 11PM.

So since I have a global on and off time of 7AM and 11PM every day we could say:
00 7 * * * * /home/pi/rpi-hdmi.sh on
00 23 * * * * /home/pi/rpi-hdmi.sh off

Then for the weekdays:
00 9 * * 1–5 /home/pi/rpi-hdmi.sh off (off at 9AM)
00 17 * * 1–5 /home/pi/rpi-hdmi.sh on (on at 5PM)

My question to you is one of order — how do I know if these will be executed in this order? Is there a better way to write this?
Thanks!

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