host info updates
[distro-setup] / btrfsmaint
index 871a0d380ab39e854fedfd88277c9010f1d34464..85f2f349711dd92584430c059acffd4071d2aa46 100755 (executable)
@@ -1,9 +1,30 @@
 #!/bin/bash
+# I, Ian Kelling, follow the GNU license recommendations at
+# https://www.gnu.org/licenses/license-recommendations.en.html. They
+# recommend that small programs, < 300 lines, be licensed under the
+# Apache License 2.0. This file contains or is part of one or more small
+# programs. If a small program grows beyond 300 lines, I plan to switch
+# its license to GPL.
+
+# Copyright 2024 Ian Kelling
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+#     http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 
 
 [[ $EUID == 0 ]] || exec sudo -E "${BASH_SOURCE[0]}" "$@"
 
-f=/usr/local/lib/err;test -r $f || { echo "error: $0 no $f" >&2;exit 1;}; . $f
+set -e; . /usr/local/lib/bash-bear; set +e
 
 # inspired from
 # https://github.com/kdave/btrfsmaintenance
@@ -32,21 +53,16 @@ e() {
 }
 
 check-idle() {
-  type -p xprintidle &>/dev/null || return 0
+  type -p xscreensaver-command &>/dev/null || return 0
+  export XAUTHORITY=/home/iank/.Xauthority
   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 -time); 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 +123,6 @@ readonly check dryrun force stats
 
 
 main() {
-  idle=true
   if ! $force; then
     check-idle
     if ! $check; then
@@ -115,7 +130,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 +176,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