sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

commit 8c0d52bbe1e06fee0eb86a79f3e1aea0d067d5ab
parent b24cd0ef61af15cff01d1ba62718ae51600845d0
Author: Alvar Penning <post@0x21.biz>
Date:   Sat, 23 Sep 2017 16:15:10 +0200

[slock] Add dpms patch

Diffstat:
Atools.suckless.org/slock/patches/dpms.md | 29+++++++++++++++++++++++++++++
Atools.suckless.org/slock/patches/slock-dpms-20170923-fa11589.diff | 84+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 113 insertions(+), 0 deletions(-)

diff --git a/tools.suckless.org/slock/patches/dpms.md b/tools.suckless.org/slock/patches/dpms.md @@ -0,0 +1,29 @@ +DPMS +==== + +Description +----------- + +This patch interacts with the Display Power Signaling and automatically shuts +down the monitor after a configurable amount of seconds. The monitor will +automatically be activated by pressing a key or moving the mouse and the +password can be entered then. + +Notes +----- + +The number of seconds until the screen will be disabled is configured +in `config.h` via the `monitortime` option. + +This patch was written against the `1.4`-tag. + + +Download +-------- + +* [slock-dpms-20170923-fa11589.diff](slock-dpms-20170923-fa11589.diff) + +Authors +------- + +* Alvar Penning <[post@0x21.biz](mailto:post@0x21.biz)> diff --git a/tools.suckless.org/slock/patches/slock-dpms-20170923-fa11589.diff b/tools.suckless.org/slock/patches/slock-dpms-20170923-fa11589.diff @@ -0,0 +1,84 @@ +diff --git a/config.def.h b/config.def.h +index 9855e21..d01bd38 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -10,3 +10,6 @@ static const char *colorname[NUMCOLS] = { + + /* treat a cleared input like a wrong password (color) */ + static const int failonclear = 1; ++ ++/* time in seconds before the monitor shuts down */ ++static const int monitortime = 5; +diff --git a/slock.c b/slock.c +index d2f0886..7ab0521 100644 +--- a/slock.c ++++ b/slock.c +@@ -15,6 +15,7 @@ + #include <unistd.h> + #include <sys/types.h> + #include <X11/extensions/Xrandr.h> ++#include <X11/extensions/dpms.h> + #include <X11/keysym.h> + #include <X11/Xlib.h> + #include <X11/Xutil.h> +@@ -289,6 +290,14 @@ lockscreen(Display *dpy, struct xrandr *rr, int screen) + return NULL; + } + ++static void ++monitorreset(Display* dpy, CARD16 standby, CARD16 suspend, CARD16 off) ++{ ++ DPMSSetTimeouts(dpy, standby, suspend, off); ++ DPMSForceLevel(dpy, DPMSModeOn); ++ XFlush(dpy); ++} ++ + static void + usage(void) + { +@@ -306,6 +315,7 @@ main(int argc, char **argv) { + const char *hash; + Display *dpy; + int s, nlocks, nscreens; ++ CARD16 standby, suspend, off; + + ARGBEGIN { + case 'v': +@@ -366,12 +376,28 @@ main(int argc, char **argv) { + if (nlocks != nscreens) + return 1; + ++ /* DPMS-magic to disable the monitor */ ++ if (!DPMSCapable(dpy)) ++ die("slock: DPMSCapable failed\n"); ++ if (!DPMSEnable(dpy)) ++ die("slock: DPMSEnable failed\n"); ++ if (!DPMSGetTimeouts(dpy, &standby, &suspend, &off)) ++ die("slock: DPMSGetTimeouts failed\n"); ++ if (!standby || !suspend || !off) ++ /* set values if there arent some */ ++ standby = suspend = off = 300; ++ ++ DPMSSetTimeouts(dpy, monitortime, monitortime, monitortime); ++ XFlush(dpy); ++ + /* run post-lock command */ + if (argc > 0) { + switch (fork()) { + case -1: + die("slock: fork failed: %s\n", strerror(errno)); + case 0: ++ monitorreset(dpy, standby, suspend, off); ++ + if (close(ConnectionNumber(dpy)) < 0) + die("slock: close: %s\n", strerror(errno)); + execvp(argv[0], argv); +@@ -383,5 +409,8 @@ main(int argc, char **argv) { + /* everything is now blank. Wait for the correct password */ + readpw(dpy, &rr, locks, nscreens, hash); + ++ /* reset DPMS values to inital ones */ ++ monitorreset(dpy, standby, suspend, off); ++ + return 0; + }