2025-10-31 i3lock 2.16

 • fix crash when the user changes the XKB configuration
 • when started on Wayland, display an error and usage
 • switch to clang-format 15 (with InsertBraces)
 • fix -Werror=calloc-transposed-args by swapping calloc args
 • reword: remove "dynamic" TWM
 • update meson setup command in README
 • do not increase failed_attempts beyond 999
 • i3lock.1 man page: fix acute accent
 • declare a development shell in flake.nix
 • fix in_dpi variable checking
 • meson: use explicit_bzero if it is available

2024-03-16 i3lock 2.15

 • unlock indicator: display current keyboard layout when
   user types password (with --show-keyboard-layout flag).

2022-06-21 i3lock 2.14.1

 • unlock indicator: display only caps lock and num lock,
   not all modifiers like shift (which can leak information
   about your password to bystanders)

2022-05-28 i3lock 2.14

 • Change default background color to #a3a3a3
   See https://github.com/i3/i3lock/pull/300 for extensive
   discussion and rationale for this change.
 • Recommend using xss-lock to start i3lock in the README
   and i3lock.1 man page. xss-lock is the best way to ensure
   your screen truly is locked before your computer suspends.
 • Display modifier key warning before unlocking, too,
   not just on failed attempts like before.
 • Switch build system from autotools to meson.

2020-10-27 i3lock 2.13

 • Throw error when trying to start on Wayland
 • Use explicit_bzero() where available, not just on OpenBSD
 • avoid pixmap allocations in the redraw path
 • make --debug output go to stderr
 • unlock_indicator.c: fix build failure against gcc-10
 • fix: call pam_end in cleanup in main, not in event loop
 • set _NET_WM_BYPASS_COMPOSITOR hint to avoid flickering

2019-07-21 i3lock 2.12

 • remove stray \n from error messages
 • capitalize unlock indicator contents
 • set WM_CLASS property
 • reference modifier as “Super”, not “Win”
 • add --raw option to read image as raw bytes

2018-10-18 i3lock 2.11.1

 • Fix dist tarball by including I3LOCK_VERSION

2018-10-10 i3lock 2.11

 • Switch to autotools
 • Display an error when backspace is pressed without any input
 • Print an error when a non-PNG file is opened
   (i3lock only supports PNG files) (Thanks eplanet)
 • Don’t unnecessarily check the xcb_connect return value,
   it is known never to be NULL (Thanks SegFault42)
 • Fix memory leak when grabbing fails (Thanks karulont)
 • Respect Xft.dpi for determining the unlock indicator’s scale factor
 • Discard pending password verification attempts
   when a new password is entered (Thanks layus)

2017-11-25 i3lock 2.10

 • Only use -lpam when not on OpenBSD (Thanks Kaashif)
 • locale: treat empty string same as unset (Thanks Ran)
 • Fix overwrite of getopt optind (Thanks jakob)
 • Immediately hide the unlock indicator after ESC / C-u (Thanks Orestis)
 • Measure wall-clock time instead of CPU time for “locking” indicator.
 • SetInputFocus to the i3lock window to force-close context menus
 • Use RandR for learning about attached monitors

2017-06-21 i3lock 2.9.1

 • Fix version number mechanism (for --version)
 • Revert the fix for composited notifications, as it causes more issues than
   it solves:
   https://github.com/i3/i3lock/issues/130
   https://github.com/i3/i3lock/issues/128

2017-05-26 i3lock 2.9

 • i3lock.1: use signal names without SIG prefix
 • Removed obsolete inactivity timeout
 • Added version files for release tarball.
 • Set font face
 • Automatically unlock (without having to press <Enter>) one attempt which was
   entered while authenticating
 • Stop leaking the image_path dup
 • Displaying locking message when grabbing the pointer/keyboard
 • Display error message when locking failed
 • Add Enter on C-m
 • Change input slices to be exactly pi/3 in size instead of slightly more
 • Fix covering of composited notifications using the XComposite extension
 • Remove last traces of DPMS
 • Use bsd_auth(3) instead of PAM on OpenBSD
 • Restore intended behaviour and don't use mlock(2) on OpenBSD.

2016-06-04 i3lock 2.8

 • Remove DPMS support in favor of a wrapper script and xset(1).
 • Indicate that the --inactivity-timeout option takes an argument. (Thanks
   Kenneth Lyons)
 • fix pam_securetty: set PAM_TTY to getenv("DISPLAY")
 • Eat XKB_KEY_Delete and XKB_KEY_KP_Delete (Thanks bebehei)
 • Show unlock indicator if password was entered during PAM verification
 • Allow CTRL+J as enter and CTRL+H as backspace (Thanks Karl Tarbe)
 • Flush xcb connection after opening fullscreen window (Thanks martin)
 • Add support for `xss-lock --transfer-sleep-lock'

2015-05-20 i3lock 2.7

 • Die when the X11 connection breaks during runtime (Thanks Eduan)
 • Implement logging the number of failed attempts (Thanks koebi)
 • Ignore password validation is pam is in wrong state (Thanks Neodyblue)
 • Get current user with getpwuid() instead of using $ENV{USER} (Thanks Martin)
 • Add support for Compose and dead-keys with libxkbcommon.
   Requires libxkbcommon ≥ 0.5.0 (Thanks Daniel)
 • Format the source using clang-format.
 • Refresh pam credentials on successful authentication (for Kerberos and the
   like) (Thanks James)
 • List pressed modifiers on failed authentication (Thanks Deiz, Alexandre)
 • Only redraw the screen if the unlock indicator is actually used
   (Thanks Ingo)
 • Make pkg-config configurable for cross-compilation (Thanks Nikolay)

2014-07-18 i3lock 2.6

 • NEW DEPENDENCY: use libxkbcommon-x11 instead of libX11
   This helps us get rid of all code that directly uses libX11
 • Use cairo_status_to_string for descriptive errors.
 • Add `-e` option to not validate empty password.
 • Bugfix: update the initial keyboard modifier state (Thanks lee, Ran)
 • Re-raise i3lock when obscured in a separate process
 • Turn on the screen on successful authentication
 • Delay to turn off the screen after wrong passwd
 • Discard half-entered passwd after some inactivity
 • Ignore empty passwd after repeated Enter keypress
 • Scale the unlock indicator (for retina displays)

2013-06-09 i3lock 2.5

 • NEW DEPENDENCY: Use libxkbcommon for input handling
   This makes input handling much better for many edge cases.
 • Bugfix: fix argument parsing on ARM (s/char/int/)
 • Bugfix: free(reply) to avoid memory leak
 • Bugfix: Use ev_loop_fork after fork, fixes forking on kqueue based OSes
 • Bugfix: Fix centering the indicator in the no-xinerama case
 • Only use mlock() on Linux, FreeBSD (for example) requires root
 • promote the "could not load image" message from debug to normal
 • s/pam_message/pam_response/ (Thanks Tucos)
 • remove support for NOLIBCAIRO, cairo-xcb is widespread by now
 • Allow XKB_KEY_XF86ScreenSaver as synonym for enter
   This keysym is generated on convertible tablets by pressing a hardware
   lock/unlock button.
 • Allow passwordless PAM conversations (e.g. fingerprint)
 • Add ctrl+u password reset
 • Set window name to i3lock

2012-06-02 i3lock 2.4.1

 • Bugfix: Correctly center unlock indicator after reconfiguring screens
   (Thanks xeen)
 • Bugfix: Revert shift lock handling (broke uppercase letters)
 • Bugfix: Skip shift when getting the modifier mask (Thanks SardemFF7)

2012-04-01 i3lock 2.4

 • Bugfix: Fix background color when using cairo (Thanks Pascal)
 • Only output text when in debug mode (fixes problems with xautolock)
 • fallback when the image cannot be loaded
 • Use (void) instead of () for functions without args (Thanks fernandotcl)

2012-03-15 i3lock 2.3.1

 • Fix compilation on some systems

2012-03-15 i3lock 2.3

  • Implement a visual unlock indicator
  • Support ISO_Level5_Shift and Caps Lock
  • Lock the password buffer in memory, clear it in RAM after verifying
  • Fork after the window is visible, not before
  • Bugfix: Copy the color depth from parent (root) window instead of
    hardcoding a depth of 24

2011-11-06 i3lock 2.2

  • Don’t re-grab pointer/keyboard on MappingNotify. In some rare situations,
    this lead to some keypresses "slipping through" to the last focused window.
  • Correctly handle Mode_switch/ISO_Level3_Shift
  • Render to a pixmap which is used as background for the window instead of
    copying contents on every expose event
  • Handle screen resolution changes while screen is locked
  • Manpage: document arguments for every option

2011-05-13 i3lock 2.1

  • Accept return/backspace when the buffer of 512 bytes is full
  • Handle numpad keys correctly
  • Handle MappingNotify events
  • Correctly check for errors when connecting to X11
  • Add i3lock.pam to not rely on debian’s /etc/pam.d/other anymore
  • don’t display debug output
  • add NOLIBCAIRO flag to permit compilation without cairo

2010-09-05 i3lock 2.0

  • Complete rewrite of i3lock. Now using xcb instead of Xlib.
  • When a window obscures i3lock, it pushes itself back to the top again.
  • Display version when starting with -v

2009-08-02 i3lock 1.1

  • Implement background pictures (-i) and colors (-c)

2009-05-10 i3lock 1.0

  • Implement PAM support
  • Implement options for forking, beeping, DPMS

2009-05-01 i3lock 0.9

  • First release, forked from slock 0.9
