]> ruderich.org/simon Gitweb - config/dotfiles.git/blobdiff - bin/xlockscreen
herbstluftwm/autostart: also create tag 0
[config/dotfiles.git] / bin / xlockscreen
index 1bac3a19aadba22209858a50f97e02f2ed688331..11b8aecfff44f464a95959656ded0025e49de001 100755 (executable)
@@ -50,17 +50,24 @@ if test x"$1" = xstart; then
     # [1]: https://stackoverflow.com/questions/3748432/insane-crond-behavior-keeps-making-defunct-bash-processes/3750028#3750028
 
     if installed xscreensaver; then
-        echo "xscreensaver.lockTimeout: $lock_time_minutes" | xrdb -merge
+        printf 'xscreensaver.timeout: %d
+                xscreensaver.lock: True
+                xscreensaver.lockTimeout: 0
+               ' "$lock_time_minutes" | xrdb -merge
         xscreensaver >/dev/null &
         echo xscreensaver
     elif installed xautolock; then
-        if installed "$lock_bin"; then
+        if installed "$lock_binary"; then
+            # Terminate a running xautolock because we might have to replace
+            # its timeout and other settings with our values.
+            pkill -u "$USER" xautolock || true
+
             xautolock -secure -time "$lock_time_minutes" \
                       -locker "$lock_binary" \
                       >/dev/null &
             echo xautolock
         else
-            echo "Locker '$lock_bin' not installed. Auto lock won't work!"
+            echo "Locker '$lock_binary' not installed. Auto lock won't work!"
             exit 1
         fi
     else
@@ -78,16 +85,17 @@ elif test x"$1" = xlock; then
         # ensures xscreensaver is available for the current X session.
         xscreensaver-command -time >/dev/null 2>&1 || xscreensaver &
 
-        xscreensaver-command -lock
         # It can take a while for xscreensaver to start, wait until it's
-        # ready.
-        while test $? -eq 255; do
-            xscreensaver-command -lock
+        # ready. a || b && c behaves like (a || b) && c.
+        while :; do
+            xscreensaver-command -lock || test $? -ne 255 && break
         done
     elif installed xtrlock; then
         # Sleep is necessary to allow xtrlock to grab the keyboard input.
         sleep 1
-        xtrlock
+        exec xtrlock
+    elif installed xlock; then
+        exec xlock
     else
         echo 'No screen locker found!'
         exit 1