Create a gist now

Instantly share code, notes, and snippets.

Last active Feb 16, 2018

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.
# Enable and disable HDMI output on the Raspberry Pi
is_off ()
tvservice -s | grep "TV is off" >/dev/null
case $1 in
tvservice -o
if is_off
tvservice -p
if [ "$curr_vt" = "1" ]
chvt 2
chvt 1
chvt 1
chvt "$curr_vt"
if is_off
echo off
echo on
echo "Usage: $0 on|off|status" >&2
exit 2
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

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:
to be:
curr_vt=sudo `fgconsole`

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

quelleck commented Apr 6, 2017

@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/ on
00 23 * * * * /home/pi/ off

Then for the weekdays:
00 9 * * 1–5 /home/pi/ off (off at 9AM)
00 17 * * 1–5 /home/pi/ 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?

usafle commented Nov 30, 2017

@leemcarthur: Did you ever figure out a solution to that?

wmcollins commented Feb 16, 2018

@leemcarthur: Did you ever figure out a solution?

Here's the solution. I think you will have problem each on/off for each day. See

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