Skip to content

Latest commit

 

History

History
49 lines (36 loc) · 2.26 KB

README.md

File metadata and controls

49 lines (36 loc) · 2.26 KB

Offscreen

Offscreen is an X Windows program to watch for the screen saver being activated and deactivated and turning an attached Sony Bravia TV set off and on.

The Sony Bravia 43X8000D is a 43-inch 4k TV screen with 4:4:4 chroma, making it suitable to use as a computer monitor. However as it is a TV, it does not support DPMI which puts a computer monitor into standby, low power mode. When a PC turns on DPMI, the Sony TV displays a message saying nothing is connected - hardly power saving.

Many Sony TVs have a control interface. In the olden days, this was a serial interface with a custom protocol. Modern smart TVs from Sony have a HTTP/REST API. With this control interface, we can turn the TV on and off.

By hooking into the XSCREENSAVER extension, we can watch when the screen saver is enabled and turn off the TV. When the screen saver is disabled, we can turn the TV on. To be even smarter, we can use the RANDR extension to check if the TV is actually connected to the computer so that we do not try to turn it on and off if it is not actually plugged into the machine. This is handy for laptops which may get unplugged but remain on wifi, so are still able to control the TV when we may not want it to.

Building

You can build offscreen with:

make build

and the binary will be written to out/offscreen in the root of the repository.

⚠️ Caution ⚠️

If the environment variables OFFSCREEN_HOSTNAME or OFFSCREEN_PSK are set in the environment when you build the binary with make build or make install, the values from those environment variables will be built into the binary as the default for the --hostname and --psk flags. The pre-shared key (PSK) is sensitive so be aware if you are going to distribute the binary.

This is done to make it easier to use the binary across multiple machines without requiring the PSK or hostname environment variables set up in your shell rc file, or requiring the argument be supplied when running. But this could leak your PSK if you share such a binary.

If you take the binary from the offscreen GitHub releases page or build it with go install foxygo.at/offscreen@latest, there will be no default hostname or PSK embedded in the binary.