qubes-core-agent-linux/qubes-rpc/prepare-suspend
Marek Marczykowski-Górecki d9206f0aa0
Place list of loaded modules in /var/run directly
Do not use /var/run/qubes for this, as it may be non-root writeable and
someone may want to isolate root/user.
Also, remove the file after resume.

(cherry picked from commit 79b38cf106)
2018-02-10 22:29:11 +01:00

54 lines
1.8 KiB
Bash
Executable File

#!/bin/bash
# Source Qubes library.
. /usr/lib/qubes/init/functions
action=$1
[ -z "$action" ] && action=suspend
MODULES_BLACKLIST=""
if [ -r /etc/qubes-suspend-module-blacklist ]; then
MODULES_BLACKLIST="$MODULES_BLACKLIST `grep -v '^#' /etc/qubes-suspend-module-blacklist`"
fi
if [ -r /rw/config/suspend-module-blacklist ]; then
MODULES_BLACKLIST="$MODULES_BLACKLIST `grep -v '^#' /rw/config/suspend-module-blacklist`"
fi
if [ x"$action" = x"suspend" ]; then
if qsvc network-manager ; then
dbus-send --system --print-reply \
--dest=org.freedesktop.NetworkManager \
/org/freedesktop/NetworkManager \
org.freedesktop.NetworkManager.Sleep boolean:true || \
service NetworkManager stop
fi
# Force interfaces down, just in case when NM didn't done it
for if in `ls /sys/class/net|grep -v "lo\|vif"`; do
if [ "`cat /sys/class/net/$if/device/devtype 2>/dev/null`" = "vif" ]; then
continue
fi
ip l s $if down
done
LOADED_MODULES=""
for mod in $MODULES_BLACKLIST; do
if lsmod |grep -q $mod; then
LOADED_MODULES="$LOADED_MODULES $mod"
modprobe -r $mod
fi
done
echo "$LOADED_MODULES" > /var/run/qubes-suspend-modules-loaded
else
# shellcheck disable=SC2013
for mod in $(cat /var/run/qubes-suspend-modules-loaded); do
modprobe "$mod"
done
rm -f /var/run/qubes-suspend-modules-loaded
if qsvc network-manager ; then
dbus-send --system --print-reply \
--dest=org.freedesktop.NetworkManager \
/org/freedesktop/NetworkManager \
org.freedesktop.NetworkManager.Sleep boolean:false || \
{ under_systemd && systemctl start NetworkManager.service; } || service qubes-core-netvm start
fi
fi