Blurred lockscreen à la i3lock-fancy, with xsecurelock
I recently came across xsecurelock
. It is an alternative to xscreensaver
and other lockscreens, which focuses on security.
Out-of-the-box it just render a black screen as lockscreen, but with some configuration and elbow grease it is possible to make it pretty similar to i3lock-fancy – at least the “blurry desktop” part of it.
The script requires a few dependencies, namely mpv
, imagemagick
and scrot
. They are all part of the standard repositories in Arch Linux, including xsecurelock, and can be installed using pacman: pacman -S mpv imagemagick scrot xsecurelock
.
#!/bin/bash
set -euo pipefail
LOCKSCREEN_DIR=~/.cache # this dir must contain a dir called 'lockscreen'
BLURTYPE="0x8" # http://www.imagemagick.org/Usage/blur/#blur_args
export XSECURELOCK_SAVER=saver_mpv
export XSECURELOCK_LIST_VIDEOS_COMMAND="find ${LOCKSCREEN_DIR}/lockscreen/ -type f"
export XSECURELOCK_IMAGE_DURATION_SECONDS=3600
if [ -z ${LOCKSCREEN_DIR+x} ]; then exit 1; fi # bail if lockscreen dir is not set
scrot ${LOCKSCREEN_DIR}/lockscreen-plain.png --overwrite &&
convert ${LOCKSCREEN_DIR}/lockscreen-plain.png -blur $BLURTYPE ${LOCKSCREEN_DIR}/lockscreen-blurred.png &&
mv ${LOCKSCREEN_DIR}/lockscreen-blurred.png ${LOCKSCREEN_DIR}/lockscreen/lockscreen.png &
xsecurelock &&
rm ${LOCKSCREEN_DIR}/lockscreen/lockscreen.png
The script does the following:
- it snap a screenshot using scrot
- blurs it using imagemagick’s
convert
command - moves the image to an empty lockscreen directory since xsecurelock will use all images it finds in that specific directory
- launches xsecurelock with XSECURELOCK_LIST_VIDEOS_COMMAND set so that it reads and displays the image as background
- finally removes the plain (non-blurred) image
The first three steps are done sequentially, while xsecurelock is launched in parallel immediately since the blur operation takes a few seconds to complete.
This means that the lockscreen will activate the same moment you call the script, even though it takes a while before the background image is done rendering.
Unfortunately this results in a black screen for the duration that imagemagick renders the blur effect. Personally I can live with that, but there is obviously room for improvement.
Bonus⌗
As for xsecurelock
, I enjoy these env variables too. Especially the kaomoji part:
export XSECURELOCK_SHOW_HOSTNAME=0
export XSECURELOCK_SHOW_USERNAME=0
export XSECURELOCK_FONT=JetBrainsMono
export XSECURELOCK_PASSWORD_PROMPT=kaomoji
I just realised that JetBrains Mono is missing some of the characters. Oh well…