-# Lock the screen. The sleep is necessary to allow xtrlock to grab the
-# keyboard input.
-hc keybind $mod-z spawn sh -c 'sleep 1 && exec xtrlock'
+# Find an existing screen locker.
+for locker in xscreensaver xtrlock ''; do
+ if installed "$locker"; then
+ break
+ fi
+done
+if test -z "$locker"; then
+ echo 'No screen locker found!' | notify 60
+fi
+# Additional options.
+locker_pre=
+if test x"$locker" = xxscreensaver; then
+ # Start xscreensaver if it's not already running. xscreensaver-command
+ # ensures xscreensaver is availble for the current X session.
+ locker_pre='xscreensaver-command -time >/dev/null 2>&1 || xscreensaver &'
+ locker='xscreensaver-command -lock'
+elif test x"$locker" = xxtrlock; then
+ # Sleep is necessary to allow xtrlock to grab the keyboard input.
+ locker_pre='sleep 1;'
+fi
+# Lock the screen.
+hc keybind $mod-z spawn sh -c "$locker_pre exec $locker"