TV HDMI CEC Switch

/usr/local/bin/hdmi

#!/bin/bash

lock=/run/lock/hdmi.lock

cecas() { for (( t=s=0 ; t++<12 && s<4;)) ; do { 
    cec-ctl -sd0 -t0 --playback --active-source phys-addr=$1.0.0.0
    sleep 1  ;  cec-ctl -sd0 -t0 --playback --image-view-on  ;} |
  grep -q Error && echo -n E || (( s++ )) ; sleep 1 ; done  ;}

 ! [ -d $(dirname "$lock") ]   &&   cecas ${1:-1}  ||
(
  # Wait for lock on fd 9 for 1 second
  flock -x -w 1 9 || { echo hdmi in use; exit 9; }

  cecas ${1:-1}

) 9>$lock

rm -f $lock

/usr/local/bin/tvoff

#!/bin/bash

lock=/run/lock/hdmi.lock

tvoff() { for (( t=s=0 ; t++<9 && s<4;)) ; do
  cec-ctl -sd0 -t0 --playback --standby  |
  grep -q Error && echo -n E || (( s++ )) ; sleep 2 ; done ;}

 ! [ -d $(dirname "$lock") ]   &&   tvoff   ||
(
  # Wait for lock on fd 9 for 1 second
  flock -x -w 1 9 || { echo hdmi in use; exit 9; }

  tvoff

) 9>$lock

rm -f $lock