tarch-hooks/tarch-reboot-required
2024-02-26 13:57:04 +03:00

87 lines
2.3 KiB
Bash
Executable File

#!/bin/bash
# Avoid unnecessary reboots: don't notify if an updated package is
# - not currently running (e.g. alternative kernel)
# - not in use (e.g. alternative driver)
## Colors ----------------------------
# Reset
Color_Off='\033[0m' # Text Reset
# Regular Colors
Black='\033[0;30m' Red='\033[0;31m' Green='\033[0;32m' Yellow='\033[0;33m'
Blue='\033[0;34m' Purple='\033[0;35m' Cyan='\033[0;36m' White='\033[0;37m'
# Bold
BBlack='\033[1;30m' BRed='\033[1;31m' BGreen='\033[1;32m' BYellow='\033[1;33m'
BBlue='\033[1;34m' BPurple='\033[1;35m' BCyan='\033[1;36m' BWhite='\033[1;37m'
## -----------------------------------
_notify_reboot_required() {
local xx
for xx in "$DESKTOP_SESSION" "$XDG_CURRENT_DESKTOP"; do
if [[ -n "$xx" ]]; then
break
fi
done
if [[ -n "$xx" ]]; then
local user userid cmd
for user in $(/usr/bin/users); do
userid=$(/usr/bin/id -u $user)
cmd=(DISPLAY=:0 DBUS_SESSION_ADDRESS=unix:path=/run/user/$userid/bus /usr/bin/notify-send)
cmd+=(--icon=system-reboot --urgency=critical)
cmd+=("\"Core system package upgraded, You need to reboot the machine.\"")
/usr/bin/su $user -c "${cmd[*]}"
done
else
# at TTY
echo -e ${BRed}"\n[*] Core system package upgraded, You need to reboot the machine.\n"${Color_Off} >&2
fi
}
RunningKernel() {
cat /proc/cmdline | sed 's|.*/vmlinuz-\(linux[a-z0-9-]*\) .*|\1|'
}
main() {
# targets from the hook (stdin) #
local targets=$(tee /dev/null)
local target
local notify=no
local runningKernel="$(RunningKernel)"
for target in $targets; do
case "$target" in
linux | linux-lts | linux-zen | linux-hardened | linux-lts?? | linux-lts???)
# Note: only official and older LTS kernels are checked.
if [[ "$target" = "$runningKernel" ]] ; then
notify=yes
break
fi
;;
btrfs-progs)
if [[ -n "$(/usr/bin/df -hT | awk '{print $2}' | grep -w btrfs)" ]] ; then
notify=yes
break
fi
;;
*)
notify=yes
break
;;
esac
done
if [[ "$notify" = "yes" ]]; then
_notify_reboot_required
unset -f _notify_reboot_required
fi
}
main "$@"