]> git.sur5r.net Git - i3/i3lock/commitdiff
Remove DPMS support in favor of a wrapper script and xset(1).
authorMichael Stapelberg <michael@stapelberg.de>
Tue, 11 Aug 2015 19:50:42 +0000 (21:50 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Tue, 11 Aug 2015 19:50:42 +0000 (21:50 +0200)
fixes #32

i3lock.1
i3lock.c
xcb.c

index 14ff580a3238cec61ce8f8b3cf2e3807d7c20e96..aff08f307016302d68fe6665b31ab1dc9e9c38b2 100644 (file)
--- a/i3lock.1
+++ b/i3lock.1
@@ -18,7 +18,6 @@ i3lock \- improved screen locker
 .RB [\|\-v\|]
 .RB [\|\-n\|]
 .RB [\|\-b\|]
 .RB [\|\-v\|]
 .RB [\|\-n\|]
 .RB [\|\-b\|]
-.RB [\|\-d\|]
 .RB [\|\-i
 .IR image.png \|]
 .RB [\|\-c
 .RB [\|\-i
 .IR image.png \|]
 .RB [\|\-c
@@ -65,12 +64,6 @@ Don't fork after starting.
 Enable beeping. Be sure to not do this when you are about to annoy other people,
 like when opening your laptop in a boring lecture.
 
 Enable beeping. Be sure to not do this when you are about to annoy other people,
 like when opening your laptop in a boring lecture.
 
-.TP
-.B \-d, \-\-dpms
-Enable turning off your screen using DPMS. Note that, when you do not specify this
-option, DPMS will turn off your screen after 15 minutes of inactivity anyways (if
-you did not disable this in your X server).
-
 .TP
 .BI \-I\  seconds \fR,\ \fB\-\-inactivity-timeout= seconds
 Specifies the number of seconds i3lock will wait for another password before
 .TP
 .BI \-I\  seconds \fR,\ \fB\-\-inactivity-timeout= seconds
 Specifies the number of seconds i3lock will wait for another password before
@@ -126,6 +119,27 @@ Show the number of failed attempts, if any.
 Enables debug logging.
 Note, that this will log the password used for authentication to stdout.
 
 Enables debug logging.
 Note, that this will log the password used for authentication to stdout.
 
+.SH DPMS
+
+The \-d (\-\-dpms) option was removed from i3lock in version 2.8. There were
+plenty of use-cases that were not properly addressed, and plenty of bugs
+surrounding that feature. While features are not normally removed from i3 and
+its tools, we felt the need to make an exception in this case.
+
+Users who wish to explicitly enable DPMS only when their screen is locked can
+use a wrapper script around i3lock like the following:
+
+.Vb 6
+\&     #!/bin/sh
+\&     revert() {
+\&       xset dpms 0 0 0
+\&     }
+\&     trap revert SIGHUP SIGINT SIGTERM
+\&     xset +dpms dpms 5 5 5
+\&     i3lock -n
+\&     revert
+.Ve
+
 .SH SEE ALSO
 .IR xautolock(1)
 \- use i3lock as your screen saver
 .SH SEE ALSO
 .IR xautolock(1)
 \- use i3lock as your screen saver
index 18d7667ddfa1e8b3e55cca3ce499c396f8c0523f..a7b54f5823a86f0e0b84f90083d82cacab53a671 100644 (file)
--- a/i3lock.c
+++ b/i3lock.c
@@ -16,7 +16,6 @@
 #include <stdint.h>
 #include <xcb/xcb.h>
 #include <xcb/xkb.h>
 #include <stdint.h>
 #include <xcb/xcb.h>
 #include <xcb/xkb.h>
-#include <xcb/dpms.h>
 #include <err.h>
 #include <assert.h>
 #include <security/pam_appl.h>
 #include <err.h>
 #include <assert.h>
 #include <security/pam_appl.h>
@@ -57,14 +56,12 @@ int input_position = 0;
 static char password[512];
 static bool beep = false;
 bool debug_mode = false;
 static char password[512];
 static bool beep = false;
 bool debug_mode = false;
-static bool dpms = false;
 bool unlock_indicator = true;
 char *modifier_string = NULL;
 static bool dont_fork = false;
 struct ev_loop *main_loop;
 static struct ev_timer *clear_pam_wrong_timeout;
 static struct ev_timer *clear_indicator_timeout;
 bool unlock_indicator = true;
 char *modifier_string = NULL;
 static bool dont_fork = false;
 struct ev_loop *main_loop;
 static struct ev_timer *clear_pam_wrong_timeout;
 static struct ev_timer *clear_indicator_timeout;
-static struct ev_timer *dpms_timeout;
 static struct ev_timer *discard_passwd_timeout;
 extern unlock_state_t unlock_state;
 extern pam_state_t pam_state;
 static struct ev_timer *discard_passwd_timeout;
 extern unlock_state_t unlock_state;
 extern pam_state_t pam_state;
@@ -95,16 +92,6 @@ void u8_dec(char *s, int *i) {
     (void)(isutf(s[--(*i)]) || isutf(s[--(*i)]) || isutf(s[--(*i)]) || --(*i));
 }
 
     (void)(isutf(s[--(*i)]) || isutf(s[--(*i)]) || isutf(s[--(*i)]) || --(*i));
 }
 
-static void turn_monitors_on(void) {
-    if (dpms)
-        dpms_set_mode(conn, XCB_DPMS_DPMS_MODE_ON);
-}
-
-static void turn_monitors_off(void) {
-    if (dpms)
-        dpms_set_mode(conn, XCB_DPMS_DPMS_MODE_OFF);
-}
-
 /*
  * Loads the XKB keymap from the X11 server and feeds it to xkbcommon.
  * Necessary so that we can properly let xkbcommon track the keyboard state and
 /*
  * Loads the XKB keymap from the X11 server and feeds it to xkbcommon.
  * Necessary so that we can properly let xkbcommon track the keyboard state and
@@ -248,16 +235,8 @@ static void clear_input(void) {
     }
 }
 
     }
 }
 
-static void turn_off_monitors_cb(EV_P_ ev_timer *w, int revents) {
-    if (input_position == 0)
-        turn_monitors_off();
-
-    STOP_TIMER(dpms_timeout);
-}
-
 static void discard_passwd_cb(EV_P_ ev_timer *w, int revents) {
     clear_input();
 static void discard_passwd_cb(EV_P_ ev_timer *w, int revents) {
     clear_input();
-    turn_monitors_off();
     STOP_TIMER(discard_passwd_timeout);
 }
 
     STOP_TIMER(discard_passwd_timeout);
 }
 
@@ -269,9 +248,6 @@ static void input_done(void) {
     if (pam_authenticate(pam_handle, 0) == PAM_SUCCESS) {
         DEBUG("successfully authenticated\n");
         clear_password_memory();
     if (pam_authenticate(pam_handle, 0) == PAM_SUCCESS) {
         DEBUG("successfully authenticated\n");
         clear_password_memory();
-        /* Turn the screen on, as it may have been turned off
-         * on release of the 'enter' key. */
-        turn_monitors_on();
 
         /* PAM credentials should be refreshed, this will for example update any kerberos tickets.
          * Related to credentials pam_end() needs to be called to cleanup any temporary
 
         /* PAM credentials should be refreshed, this will for example update any kerberos tickets.
          * Related to credentials pam_end() needs to be called to cleanup any temporary
@@ -668,15 +644,6 @@ static void xcb_check_cb(EV_P_ ev_check *w, int revents) {
                 handle_key_press((xcb_key_press_event_t *)event);
                 break;
 
                 handle_key_press((xcb_key_press_event_t *)event);
                 break;
 
-            case XCB_KEY_RELEASE:
-                /* If this was the backspace or escape key we are back at an
-                 * empty input, so turn off the screen if DPMS is enabled, but
-                 * only do that after some timeout: maybe user mistyped and
-                 * will type again right away */
-                START_TIMER(dpms_timeout, TSTAMP_N_SECS(inactivity_timeout),
-                            turn_off_monitors_cb);
-                break;
-
             case XCB_VISIBILITY_NOTIFY:
                 handle_visibility_notify(conn, (xcb_visibility_notify_event_t *)event);
                 break;
             case XCB_VISIBILITY_NOTIFY:
                 handle_visibility_notify(conn, (xcb_visibility_notify_event_t *)event);
                 break;
@@ -807,7 +774,7 @@ int main(int argc, char *argv[]) {
                 beep = true;
                 break;
             case 'd':
                 beep = true;
                 break;
             case 'd':
-                dpms = true;
+                fprintf(stderr, "DPMS support has been removed from i3lock. Please see the manpage i3lock(1).\n");
                 break;
             case 'I': {
                 int time = 0;
                 break;
             case 'I': {
                 int time = 0;
@@ -942,20 +909,6 @@ int main(int argc, char *argv[]) {
     xinerama_init();
     xinerama_query_screens();
 
     xinerama_init();
     xinerama_query_screens();
 
-    /* if DPMS is enabled, check if the X server really supports it */
-    if (dpms) {
-        xcb_dpms_capable_cookie_t dpmsc = xcb_dpms_capable(conn);
-        xcb_dpms_capable_reply_t *dpmsr;
-        if ((dpmsr = xcb_dpms_capable_reply(conn, dpmsc, NULL))) {
-            if (!dpmsr->capable) {
-                if (debug_mode)
-                    fprintf(stderr, "Disabling DPMS, X server not DPMS capable\n");
-                dpms = false;
-            }
-            free(dpmsr);
-        }
-    }
-
     screen = xcb_setup_roots_iterator(xcb_get_setup(conn)).data;
 
     last_resolution[0] = screen->width_in_pixels;
     screen = xcb_setup_roots_iterator(xcb_get_setup(conn)).data;
 
     last_resolution[0] = screen->width_in_pixels;
@@ -1002,8 +955,6 @@ int main(int argc, char *argv[]) {
      * keyboard. */
     (void)load_keymap();
 
      * keyboard. */
     (void)load_keymap();
 
-    turn_monitors_off();
-
     /* Initialize the libev event loop. */
     main_loop = EV_DEFAULT;
     if (main_loop == NULL)
     /* Initialize the libev event loop. */
     main_loop = EV_DEFAULT;
     if (main_loop == NULL)
diff --git a/xcb.c b/xcb.c
index e3a33b87600e444c27892d63e9a51b5f84f82e99..f1a9a7680cbd7b2bcba89bbb9cc7ff6821ba5c17 100644 (file)
--- a/xcb.c
+++ b/xcb.c
@@ -10,7 +10,6 @@
 #include <xcb/xcb.h>
 #include <xcb/xcb_image.h>
 #include <xcb/xcb_atom.h>
 #include <xcb/xcb.h>
 #include <xcb/xcb_image.h>
 #include <xcb/xcb_atom.h>
-#include <xcb/dpms.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdbool.h>
@@ -154,16 +153,6 @@ xcb_window_t open_fullscreen_window(xcb_connection_t *conn, xcb_screen_t *scr, c
     return win;
 }
 
     return win;
 }
 
-/*
- * Set the dpms level to 'mode'.
- *
- */
-void dpms_set_mode(xcb_connection_t *conn, xcb_dpms_dpms_mode_t mode) {
-    xcb_dpms_enable(conn);
-    xcb_dpms_force_level(conn, mode);
-    xcb_flush(conn);
-}
-
 /*
  * Repeatedly tries to grab pointer and keyboard (up to 1000 times).
  *
 /*
  * Repeatedly tries to grab pointer and keyboard (up to 1000 times).
  *