mirror of https://github.com/i3/i3lock.git
parent
c5bb1d55e0
commit
929e541fb7
28
i3lock.1
28
i3lock.1
|
@ -18,7 +18,6 @@ i3lock \- improved screen locker
|
|||
.RB [\|\-v\|]
|
||||
.RB [\|\-n\|]
|
||||
.RB [\|\-b\|]
|
||||
.RB [\|\-d\|]
|
||||
.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.
|
||||
|
||||
.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
|
||||
|
@ -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.
|
||||
|
||||
.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
|
||||
|
|
51
i3lock.c
51
i3lock.c
|
@ -16,7 +16,6 @@
|
|||
#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>
|
||||
|
@ -57,14 +56,12 @@ int input_position = 0;
|
|||
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;
|
||||
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;
|
||||
|
@ -95,16 +92,6 @@ void u8_dec(char *s, int *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
|
||||
|
@ -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();
|
||||
turn_monitors_off();
|
||||
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();
|
||||
/* 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
|
||||
|
@ -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;
|
||||
|
||||
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;
|
||||
|
@ -807,7 +774,7 @@ int main(int argc, char *argv[]) {
|
|||
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;
|
||||
|
@ -942,20 +909,6 @@ int main(int argc, char *argv[]) {
|
|||
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;
|
||||
|
@ -1002,8 +955,6 @@ int main(int argc, char *argv[]) {
|
|||
* keyboard. */
|
||||
(void)load_keymap();
|
||||
|
||||
turn_monitors_off();
|
||||
|
||||
/* Initialize the libev event loop. */
|
||||
main_loop = EV_DEFAULT;
|
||||
if (main_loop == NULL)
|
||||
|
|
11
xcb.c
11
xcb.c
|
@ -10,7 +10,6 @@
|
|||
#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>
|
||||
|
@ -154,16 +153,6 @@ xcb_window_t open_fullscreen_window(xcb_connection_t *conn, xcb_screen_t *scr, c
|
|||
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).
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue