Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?



fast and sweet looking lockscreen for linux systems with effects!

GitHub release (latest by date including pre-releases) GitHub release (latest by date) GitHub Workflow Status (main) GitHub Workflow Status (next) GitHub milestone GitHub commits since latest release (by date) for a branch


Table of Contents


Most of i3lock wrapper-scripts out there take an image, add some effect(s) then lock with the modified image as locker-background. Overall experience doesn't feel natural given delay of 2-3 seconds.

Who would like a delay of 2-3 seconds while locking screen?

So Betterlockscreen was my attempt to solve this problem, as we dont need to change lockscreen background frequently this script caches images with effect so overall experience is simple and as fast as native i3lock.

How it works

The script takes a directory or image, adds various effects and caches the images in special directory. Those cached images will be used as locker-background depending on configuration provided by user.

System Requirements

Note: Make sure your system has all dependencies satisfied


Package Manager

Packaging status

Betterlockscreen is available via package manager on some linux-distributions, if you miss your favorite one you can follow along with our installation-script or manual-installation.

If you are using Arch Linux, you can install the AUR package betterlockscreen to get the latest version, or betterlockscreen-git for the most up-to-date (unstable) changes.

If you are using Gentoo Linux, you can install betterlockscreen from Gentoo's GURU overlay using emerge x11-misc/betterlockscreen.

If you are using NixOS, betterlockscreen is available in both the stable and unstable channels and can be installed using nix-env -iA nixos.betterlockscreen.

If you are using Void Linux, you can install betterlockscreen using xbps-install -S betterlockscreen.

Installation Script

We have created an automatic install-script for Betterlockscreen. The script is very simple and takes three parameters:

  • <install-mode>: (string) 'user' installs to '~/.local/bin/', 'system' installs to '/usr/local/bin'
  • [<version>]: (string) defaults to 'latest' which will determinate the latest tag from git or specified branch/tag
  • [<systemd-service>]: (boolean) defaults to 'false' - Whether to copy and enable system-service.

For system-installation:

wget -O - -q | sudo bash -s system

For user-installation:

wget -O - -q | bash -s user

Manual Installation

α»²ou can download the latest release here, please ensure to fullfill the system-requirements!

You will need to copy "betterlockscreen" to you desired binary-directory, if you want to use the systemd-service you will need to copy the service-file from "system/" to the desired location on your system.

Example (Ubuntu):


cd betterlockscreen-main/
chmod u+x betterlockscreen
cp betterlockscreen /usr/local/bin/

cp system/betterlockscreen@.service /usr/lib/systemd/system/
systemctl enable betterlockscreen@$USER


You can customize Betterlockscreen for your needs, copy the config file from the examples-directory to the user-configuration directory ~/.config/betterlockscreen/ and edit it accordingly.

mkdir -p ~/.config/betterlockscreen/
cp /usr/share/doc/betterlockscreen/examples/betterlockscreenrc ~/.config/betterlockscreen/

If no configuration-file is found, then the default configurations (which is equal to the example but hardcoded) will be used.

Custom script's on pre/post-lock

If present in user-configuration directory (see above) the "custom-(pre|post).sh" gets sourced at the appropriate time. This can be used to pause notification (not needed for dunst!), switch keyboard-layout on pre/post-lock etc.


Run betterlockscreen and point it to either a directory (betterlockscreen -u "path/to/dir") or an image (betterlockscreen -u "/path/to/img.jpg") and that's all. betterlockscreen will change update its cache with image you provided.

Usage: betterlockscreen [-u <PATH>] [-l <EFFECT>] [-w <EFFECT>]

  -u --update <PATH>
      Update lock screen image

  -l --lock <EFFECT>
      Lock screen with cached image

  -w --wall <EFFECT>
      Set wallpaper with cached image

Additional arguments:

  --display <N>
      Set display to draw loginbox

      Scale image to span multiple displays

  --off <N>
      Turn display off after N seconds

      List of effects to apply

  -- <ARGS>
      Pass following arguments to i3lock

Effects arguments:

  --dim <N>
      Dim image N percent (0-100)

  --blur <N>
      Blur image N amount (0.0-1.0)

  --pixel <N,N>
      Pixelate image with N shrink and N grow (unsupported)

  --color <HEX>
      Solid color background with HEX


  1. Update image cache with random image betterlockscreen -u ~/Wallpapers

  2. Update image cache with only dim and pixel effects betterlockscreen -u ~/Wallpapers/image.png --fx dim,pixel

  3. Update image cache with random image, multiple monitors, login on 1, spanning betterlockscreen -u ~/Wallpapers/Dual/ --display 1 --span

  4. Update image cache with solid background only (ignore errors) betterlockscreen -u . --fx color --color 5833ff

  5. Update image cache with different background images betterlockscreen -u ~/Wallpapers/image1.png -u ~/Wallpapers/image2.png

  6. Lock screen with blur effect betterlockscreen --lock blur

  7. Lock screen with multiple monitors, spanning betterlockscreen -l dimblur --display 1 --span

AwesomeWM - naughty

It has been discovered that the integrated notification-system "naughty" which is included and enabled by default, causes issue with dunst when running parallel.

If dunst is not installed, there should be no issue, if dunst is installed (even not running) our integration will try to pause dunst on lock/resume on unlock, which lead to a DBus reply timeout.

To fix this, please add the following line to your rc.lua:

package.loaded["naughty.dbus"] = {}

Source: #284 (thanks to @nullbyto), awesomeWM/awesome#1285


Add this line to .xinitrc.

# set desktop background with custom effect
betterlockscreen -w dim

# Alternative (set last used background)
source ~/.fehbg


Add this line to ~/.config/i3/config

# set desktop background with custom effect
exec --no-startup-id betterlockscreen -w dim

# Alternative (set last used background)
exec --no-startup-id source ~/.fehbg


To lockscreen using keyboard shortcut


Add this line to your ~/.config/i3/config

bindsym $mod+shift+x exec betterlockscreen -l dim


Add this line to your ~/.config/sxhkd/sxhkdrc

# lockscreen
alt + shift + x
    betterlockscreen -l dim

Systemd-Service: Lockscreen after sleep/suspend

# move service file to proper dir (the aur package does this for you)
cp betterlockscreen@.service /usr/lib/systemd/system/

# enable systemd service
systemctl enable betterlockscreen@$USER

# disable systemd service
systemctl disable betterlockscreen@$USER

# Note: Now you can call systemctl suspend to suspend your system
# and betterlockscreen service will be activated
# so when your system wakes your screen will be locked.

Hint: The systemd-unit expects betterlockscreen to be installed in "/usr/local/bin", so maybe you want to check or change this!

Resources and more informations:


Please see


Betterlockscreen is under MIT license.

Feel free to use and distribute

  • Hat tip to anyone who's code was used
  • Thanks to those who contributed to make it better
  • Inspiration - r/unixporn

Supported by

JetBrains Logo (Main) logo