I occasionally write utilities for my computer that make my life a bit easier. This morning I was looking for a way to detect whether the monitor was turned off on my Linux laptop. The best advice I came across was using xset -q
and parsing the following section:
DPMS (Energy Star): Standby: 0 Suspend: 0 Off: 0 DPMS is Enabled Monitor is On
Wait, what? After diving into some C code, it turns out that this can be very simply done with a bit of dotnet core code:
namespace Laptop { class Display { [DllImport("libX11")] private static extern IntPtr XOpenDisplay(string displayName); [DllImport("libX11")] private static extern void XCloseDisplay(IntPtr display); [DllImport("libXext.so.6")] private static extern bool DPMSQueryExtension(IntPtr display, out string dummy1, out string dummy2); [DllImport("libXext.so.6")] private static extern bool DPMSCapable(IntPtr display); [DllImport("libXext.so.6")] private static extern void DPMSInfo(IntPtr display, out State state, out bool onOff); public State IsOn(string displayAddress = ":0") { // get a handle to the display, but don't forget to close it! var display = XOpenDisplay(displayAddress); if (display == IntPtr.Zero) { return State.Fail; // return } var reading = State.Fail; // attempt to read the state from the display if (DPMSQueryExtension(display, out var dummy1, out var dummy2)) if (DPMSCapable(display)) { DPMSInfo(display, out var state, out var onOff); if (onOff) reading = state; } // close our handle to the display XCloseDisplay(display); return reading; } public enum State { Fail = -1, On = 0, Standby = 1, Suspend = 2, Off = 3, } } }
And bam, we can get the display state with Display.IsOn()
.