various fixes, a few new features
[distro-setup] / btrfsmaint
index 0204ed5aa78a4e9043e0aae3a624066252a77955..7b2dabe78f1b3915fff3310820b0bb96b7f1609f 100755 (executable)
@@ -32,21 +32,15 @@ e() {
 }
 
 check-idle() {
-  type -p xprintidle &>/dev/null || return 0
+  type -p xscreensaver-command &>/dev/null || return 0
   export DISPLAY=:0
-  # a hours, a movie could run that long.
-  idle_limit=$((1000 * 60 * 60 * 2))
-  idle_time=$idle_limit
-  while read -r user; do
-    new_idle_time=$(sudo -u $user xprintidle 2>/dev/null) ||:
-    if [[ $new_idle_time && $new_idle_time -lt $idle_time ]]; then
-      idle_time=$new_idle_time
+  locked=false
+  if lock_info=$(xscreensaver-command -timer); then
+    if [[ $lock_info != *non-blanked* ]]; then
+      locked=true
     fi
-  done < <(users | tr " " "\n" | sort -u)
-  if (( idle_time < idle_limit )); then
-    idle=false
   else
-    idle=true
+    locked=true
   fi
 }
 
@@ -107,7 +101,6 @@ readonly check dryrun force stats
 
 
 main() {
-  idle=true
   if ! $force; then
     check-idle
     if ! $check; then
@@ -115,7 +108,7 @@ main() {
       max_min=300
       # When the cron kicks in, we may not be idle (physically sleeping) yet, so
       # wait.
-      while ! $idle && (( min < max_min )); do
+      while ! $locked && (( min < max_min )); do
         min=$(( min + 1 ))
         sleep 60
         check-idle
@@ -161,7 +154,7 @@ EOF
     #### end look for diff in stats, eg: increasing error count ####
 
     if $check; then
-      if ! $idle; then
+      if ! $locked; then
         if $dryrun; then
           echo "$0: not idle. if this wasnt a dry run, btrfs scrub cancel $mnt"
         else