+++ /dev/null
-#!/bin/sh
-
-# Helper script to start/lock the screen with an available screen locker.
-
-# Copyright (C) 2015 Simon Ruderich
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-set -eu
-
-
-usage() {
- printf 'usage: %s start <lock time (min)> <lock binary>\n' "$0"
- printf ' %s lock\n' "$0"
- exit 1
-}
-
-installed() {
- type "$1" >/dev/null 2>&1
-}
-
-
-if test $# -eq 0; then
- usage
-fi
-
-if test x"$1" = xstart; then
- if test $# -ne 3; then
- usage
- fi
- lock_time_minutes="$2"
- lock_binary="$3"
-
- # NOTE: We must redirect stdout of the spawned background processes to
- # /dev/null or a potential caller which uses our output will wait forever
- # on the inherited stdin (and we become a zombie)! Thanks to Beano on [1]
- # for the idea, read on 2015-08-23.
- #
- # [1]: https://stackoverflow.com/questions/3748432/insane-crond-behavior-keeps-making-defunct-bash-processes/3750028#3750028
-
- if installed xscreensaver; then
- 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_binary"; then
- xautolock -secure -time "$lock_time_minutes" \
- -locker "$lock_binary" \
- >/dev/null &
- echo xautolock
- else
- echo "Locker '$lock_binary' not installed. Auto lock won't work!"
- exit 1
- fi
- else
- echo "No locker found. Auto lock won't work!"
- exit 1
- fi
-
-elif test x"$1" = xlock; then
- if test $# -ne 1; then
- usage
- fi
-
- if installed xscreensaver; then
- # Start xscreensaver if it's not already running. xscreensaver-command
- # ensures xscreensaver is available for the current X session.
- xscreensaver-command -time >/dev/null 2>&1 || xscreensaver &
-
- # It can take a while for xscreensaver to start, wait until it's
- # ready.
- 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
- else
- echo 'No screen locker found!'
- exit 1
- fi
-
-else
- usage
-fi