HOME > Documentations > How-to articles > Custom Script for TV Power On/Off Custom Script for TV Power On/Off Posted by Kostas Sveronis on October 16th, 2020 Table of Contents How does it work? How should the custom script behave? The “standard” script Changing the standard script In the Yodeck Portal, the “Turned Off” option provides an easy way to turn off the connected screen. How does it work? The Yodeck Player (or Raspberry Pi in general) includes a CEC adapter on its HDMI monitor port. If your screen supports HDMI-CEC, then the Player issues a CEC “standby” (or “power on”) command to turn your screen off (or on). If your monitor does not support CEC (e.g. you have a computer monitor. Check out the CEC compatibility chart ), the Player deactivates the HDMI port to allow the monitor to power-down by itself. This function is supported by all current computer monitors, even some TVs. How should the custom script behave? The script should take 1 command-line argument. This argument will always be present. It will only have one of two possible values: on and off The script should be idempotent. (that is, if it is called twice with the same argument (e.g. on), it should not cause trouble) . That’s it. The “standard” script The script below simulates the standard behavior provided by the Yodeck Player. You can customize this script, adding anything you need, and use it. yodeck_custom_power_script #!/bin/bash echo 'on 0' | cec-client -s | grep 'not present' > /dev/null NOT_CEC_COMPATIBLE=$? tvservice -s | grep -i 'tv is off' > /dev/null TV_IS_OFF=$? if [ "$1" == "off" ]; then if [ $TV_IS_OFF -eq 0 ]; then echo 'Screen already off, aborting...' exit 0 fi echo 'Turning off screen' if [ $NOT_CEC_COMPATIBLE -ne 0 ]; then echo 'standby 0' | cec-client -s > /dev/null fi tvservice -o elif [ "$1" == "on" ]; then if [ $TV_IS_OFF -ne 0 ]; then echo 'Screen already on, aborting...' exit 0 fi echo 'Turning on screen' FB_DEPTH=$(/bin/fbset | grep 'geometry' | awk '{ print $6 }') tvservice -p fbset -depth 8 fbset -depth $FB_DEPTH xrefresh if [ $NOT_CEC_COMPATIBLE -ne 0 ]; then echo 'on 0' | cec-client -s > /dev/null fi else # Just for debugging, not required or used echo "Screens supports HDMI-CEC: $NOT_CEC_COMPATIBLE" echo "Screens current status: $TV_IS_OFF" echo 'You must specify "on" or "off"' fi It does not HAVE to be a bash script. You can always provide an executable file, or a script in any other language, like Python or Perl. Yodeck will use the contents you provide in Base64 (details below), will write the file to the filesystem, make it executable ( chmod +x ) and call it every time it is required. Changing the standard script In your Linux command line, you can use the yodeck_custom_power_script directive to provide your own custom TV on/off script. To create the custom script entry, run: echo yodeck_custom_power_script=`base64 -w 0 script_filename.sh` You should get a player directive (directive_name=base64_encoded_data) ready to be pasted in the Advanced Player Directive field. For the above standard script, that would be: yodeck_custom_power_script=IyEvYmluL2Jhc2gKCmVjaG8gJ29uIDAnIHwgY2VjLWNsaWVudCAtcyB8IGdyZXAgJ25vdCBwcmVzZW50JyA+IC9kZXYvbnVsbApOT1RfQ0VDX0NPTVBBVElCTEU9JD8KdHZzZXJ2aWNlIC1zIHwgZ3JlcCAtaSAndHYgaXMgb2ZmJyA+IC9kZXYvbnVsbApUVl9JU19PRkY9JD8KCmlmIFsgIiQxIiA9PSAib2ZmIiBdOyB0aGVuCiAgICBpZiBbICRUVl9JU19PRkYgLWVxIDAgXTsgdGhlbgogICAgICAgIGVjaG8gJ1NjcmVlbiBhbHJlYWR5IG9mZiwgYWJvcnRpbmcuLi4nCiAgICAgICAgZXhpdCAwCiAgICBmaQogICAgZWNobyAnVHVybmluZyBvZmYgc2NyZWVuJwogICAgaWYgWyAkTk9UX0NFQ19DT01QQVRJQkxFIC1uZSAwIF07IHRoZW4KICAgICAgICBlY2hvICdzdGFuZGJ5IDAnIHwgY2VjLWNsaWVudCAtcyA+IC9kZXYvbnVsbAogICAgZmkKICAgIHR2c2VydmljZSAtbwplbGlmIFsgIiQxIiA9PSAib24iIF07IHRoZW4KICAgIGlmIFsgJFRWX0lTX09GRiAtbmUgMCBdOyB0aGVuCiAgICAgICAgZWNobyAnU2NyZWVuIGFscmVhZHkgb24sIGFib3J0aW5nLi4uJwogICAgICAgIGV4aXQgMAogICAgZmkKICAgIGVjaG8gJ1R1cm5pbmcgb24gc2NyZWVuJwogICAgRkJfREVQVEg9JCgvYmluL2Zic2V0IHwgZ3JlcCAnZ2VvbWV0cnknIHwgYXdrICd7IHByaW50ICQ2IH0nKQogICAgdHZzZXJ2aWNlIC1wCiAgICBmYnNldCAtZGVwdGggOAogICAgZmJzZXQgLWRlcHRoICRGQl9ERVBUSAogICAgeHJlZnJlc2gKICAgIGlmIFsgJE5PVF9DRUNfQ09NUEFUSUJMRSAtbmUgMCBdOyB0aGVuCiAgICAgICAgZWNobyAnb24gMCcgfCBjZWMtY2xpZW50IC1zID4gL2Rldi9udWxsCiAgICBmaQplbHNlCiAgICAjIEp1c3QgZm9yIGRlYnVnZ2luZywgbm90IHJlcXVpcmVkIG9yIHVzZWQKICAgIGVjaG8gIlNjcmVlbnMgc3VwcG9ydHMgSERNSS1DRUM6ICROT1RfQ0VDX0NPTVBBVElCTEUiCiAgICBlY2hvICJTY3JlZW5zIGN1cnJlbnQgc3RhdHVzOiAkVFZfSVNfT0ZGIgogICAgZWNobyAnWW91IG11c3Qgc3BlY2lmeSAib24iIG9yICJvZmYiJwpmaQo=