File: //usr/lib/systemd/system-sleep/nvidia
#!/bin/sh
# Special-case suspend-then-hibernate:
#
# If the system was woken by a battery alarm, then systemd will call this script
# to resume from suspend and then enter hibernation. Don't call into the full
# nvidia-sleep.sh script in that case, just write directly to
# /proc/driver/nvidia/suspend.
if [ "$2" = "suspend-then-hibernate" -a -f /proc/driver/nvidia/suspend ]; then
case "$1:$SYSTEMD_SLEEP_ACTION" in
post:*)
# Normally, we would want to call the full nvidia-sleep.sh here, but
# that is a problem for suspend-after-failed-hibernate: systemd
# calls this script with the sleep action set to "hibernate" but
# doesn't tell us whether the hibernate succeeded or failed. If it
# failed, it is important not to perform the VT switch back to the
# Xorg server before systemd attempts to suspend again. Instead,
# rely on the nvidia-resume.service systemd unit to do that.
echo resume > /proc/driver/nvidia/suspend
;;
pre:hibernate)
echo hibernate > /proc/driver/nvidia/suspend
;;
pre:suspend-after-failed-hibernate)
echo suspend > /proc/driver/nvidia/suspend
;;
esac
exit 0
fi
case "$1" in
post)
/usr/bin/nvidia-sleep.sh "resume"
;;
esac