How to check if Linux console screensaver has blanked screen How to check if Linux console screensaver has blanked screen linux linux

How to check if Linux console screensaver has blanked screen


Okay, checked the xset source code. The relevant code parts are

#include <X11/extensions/dpms.h>...Display* dpy = XOpenDisplay(NULL);...int dummy;CARD16 standby, suspend, off;BOOL onoff;CARD16 state;printf("DPMS (Energy Star):\n");if (DPMSQueryExtension(dpy, &dummy, &dummy)) {    if (DPMSCapable(dpy))     {        DPMSGetTimeouts(dpy, &standby, &suspend, &off);        printf ("  Standby: %d    Suspend: %d    Off: %d\n",                standby, suspend, off);        DPMSInfo(dpy, &state, &onoff);        if (onoff)         {            printf("  DPMS is Enabled\n");            switch (state)             {            case DPMSModeOn:                printf("  Monitor is On\n");                break;            case DPMSModeStandby:                printf("  Monitor is in Standby\n");                break;            case DPMSModeSuspend:                printf("  Monitor is in Suspend\n");                break;            case DPMSModeOff:                printf("  Monitor is Off\n");                break;            default:                printf("  Unrecognized response from server\n");            }        }    }}

Just in case anyone else needs this ;-)


You can parse the output of xset q with DISPLAY set, but it's not pretty.

$ xset qKeyboard Control:  auto repeat:  on    key click percent:  0    LED mask:  00000000  XKB indicators:    00: Caps Lock:   off    01: Num Lock:    off    02: Scroll Lock: off    03: Compose:     off    04: Kana:        off    05: Sleep:       off    06: Suspend:     off    07: Mute:        off    08: Misc:        off    09: Mail:        off    10: Charging:    off    11: Shift Lock:  off    12: Group 2:     off    13: Mouse Keys:  off  auto repeat delay:  250    repeat rate:  30  auto repeating keys:  00ffffffdffffbbf                        fadfffefffedffff                        9fffffffffffffff                        fff7ffffffffffff  bell percent:  50    bell pitch:  400    bell duration:  100Pointer Control:  acceleration:  20/10    threshold:  4Screen Saver:  prefer blanking:  yes    allow exposures:  yes  timeout:  0    cycle:  600Colors:  default colormap:  0x20    BlackPixel:  0    WhitePixel:  16777215Font Path:  /usr/share/fonts/misc,/usr/share/fonts/100dpi:unscaled,/usr/share/fonts/75dpi:unscaled,/usr/share/fonts/TTF,/usr/share/fonts/Type1,/usr/share/fonts/misc/,/usr/share/fonts/TTF/,/usr/share/fonts/Type1/,/usr/share/fonts/100dpi/,/usr/share/fonts/75dpi/,built-insDPMS (Energy Star):  Standby: 1200    Suspend: 1800    Off: 0  DPMS is Enabled  Monitor is OnFont cache:  Server does not have the FontCache Extension


I made an equivalent implementation of Günter's code in Python with ctypes.

import ctypesimport structctypes.cdll.LoadLibrary('libXext.so')libXext = ctypes.CDLL('libXext.so')DPMSFAIL = -1DPMSModeOn = 0DPMSModeStandby = 1DPMSModeSuspend = 2DPMSModeOff = 3def get_DPMS_state(display_name_in_byte_string=b':0'):    state = DPMSFAIL    if not isinstance(display_name_in_byte_string, bytes):        raise TypeError    display_name = ctypes.c_char_p()    display_name.value = display_name_in_byte_string    libXext.XOpenDisplay.restype = ctypes.c_void_p    display = ctypes.c_void_p(libXext.XOpenDisplay(display_name))    dummy1_i_p = ctypes.create_string_buffer(8)    dummy2_i_p = ctypes.create_string_buffer(8)    if display.value:        if libXext.DPMSQueryExtension(display, dummy1_i_p, dummy2_i_p)\           and libXext.DPMSCapable(display):            onoff_p = ctypes.create_string_buffer(1)            state_p = ctypes.create_string_buffer(2)            if libXext.DPMSInfo(display, state_p, onoff_p):                onoff = struct.unpack('B', onoff_p.raw)[0]                if onoff:                    state = struct.unpack('H', state_p.raw)[0]        libXext.XCloseDisplay(display)    return state

Calling sample is on my github.