summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorJarno Suni <8@iki.fi>2014-07-20 18:25:22 +0300
committerEric Koegel <eric.koegel@gmail.com>2014-08-28 18:52:16 +0300
commitbb0cbd537d72be4dece2ade8a86d76335dfda2dc (patch)
tree567ad30657d704de4bcd23207d4e496f59103219 /scripts
parent7892794fbf029a3b15d9e1320cf701bf0d31fd83 (diff)
downloadxfce4-session-bb0cbd537d72be4dece2ade8a86d76335dfda2dc.tar.gz
Update xflock4 (Bug 10217)
Complete rewrite of xflock4 that aims to be more reliable and support more screen savers and lockers. Signed-off-by: Eric Koegel <eric.koegel@gmail.com>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/xflock468
1 files changed, 41 insertions, 27 deletions
diff --git a/scripts/xflock4 b/scripts/xflock4
index ec4d05d4..9268e6a7 100644
--- a/scripts/xflock4
+++ b/scripts/xflock4
@@ -4,7 +4,7 @@
#
# Copyright (C) 1999, 2003 Olivier Fourdan (fourdan@xfce.org)
# Copyright (C) 2011 Guido Berhoerster (guido+xfce.org@berhoerster.name)
-# Copyright (C) 2011 Jarno Suni (8@iki.fi)
+# Copyright (C) 2014 Jarno Suni (8@iki.fi)
#
# 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
@@ -20,31 +20,45 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
-
-PATH=/bin:/usr/bin
+set -o nounset
+set -o errexit
+# OpenBSD and possibly some other OSs require
+# /usr/local/bin:/usr/X11R6/bin in PATH
+PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
export PATH
-# Lock by xscreensaver or gnome-screensaver, if a respective daemon is running
-for lock_cmd in \
- "xscreensaver-command -lock" \
- "gnome-screensaver-command --lock"
-do
- $lock_cmd >/dev/null 2>&1 && exit
-done
-
-# else run another access locking utility, if installed
-for lock_cmd in \
- "xlock -mode blank" \
- "slock"
- do
- set -- $lock_cmd
- if command -v -- $1 >/dev/null 2>&1; then
- $lock_cmd >/dev/null 2>&1 &
- # turn off display backlight:
- xset dpms force off
- exit
- fi
-done
-
-# else access locking failed
-exit 1
+# Lock by a screensaver, if its daemon is running.
+if pidof "`command -v xscreensaver`" >/dev/null; then
+ xscreensaver-command -lock >/dev/null
+elif pidof "`command -v gnome-screensaver`" >/dev/null; then
+ gnome-screensaver-command --lock >/dev/null
+elif pidof "`command -v light-locker`" >/dev/null; then
+ light-locker-command --lock >/dev/null
+elif pidof "`command -v mate-screensaver`" >/dev/null; then
+ mate-screensaver-command --lock >/dev/null
+elif pidof "`command -v cinnamon-screensaver`" >/dev/null; then
+ cinnamon-screensaver-command --lock >/dev/null
+elif pidof "`command -v xautolock`" >/dev/null; then
+# Note: xautolock does not tell, if it succeeds in locking,
+# so be sure to start the daemon properly.
+ xautolock -locknow >/dev/null
+# No daemon was found; use some available utility to lock:
+elif command -v i3lock >/dev/null; then
+ i3lock --dpms --color=000000 >/dev/null
+else
+ for lock_cmd in \
+ "xlock -mode blank" \
+ "slock" \
+ "slimlock"
+ do
+ if command -v -- $lock_cmd >/dev/null; then
+ # Run the command in background
+ $lock_cmd >/dev/null &
+ # Turn off display backlight
+ xset dpms force off
+ exit
+ fi
+ done
+ # None of the above worked. Access locking failed.
+ exit 1
+fi