#!/usr/bin/bash # # /usr/local/sbin/pam-umount.sh %(USER) %(USERUID) %(MNTPT)' set -eu usr="$1" uid="$2" mtp="$3" slce="system-virtiofs.slice" slp=false shutdownVMs(){ local VM for VM in $(sudo -u $usr XDG_RUNTIME_DIR="/run/user/$uid" \ XDG_CONFIG_HOME="/tmp/$uid/.config/" \ XDG_CACHE_HOME="/var/cache/user/$uid/" \ virsh list --state-running | \ sed -nE "s/.*\s+(\S+)\s+running/\1/p") ; do sudo -u $usr XDG_RUNTIME_DIR="/run/user/$uid" \ XDG_CONFIG_HOME="/tmp/$uid/.config/" \ XDG_CACHE_HOME="/var/cache/user/$uid/" \ virsh destroy "$VM" 2>&1 | systemd-cat || true slp=true done } ###################### ## This is the first mount we need to get rid of: if [[ "$mtp" =~ "/lmn/media/$usr/share" ]] ; then shutdownVMs [[ "$slp" = true ]] && sleep 5 # leave some time to write caches … sudo -u ${usr} killall gvfsd | systemd-cat sudo -u ${usr} killall dbus-daemon | systemd-cat systemctl -q is-active "$slce" && systemctl kill "$slce" # debug to find processes blocking umount: # lsof >> /var/log/lsof.log fi ## Just umount: exec umount "$mtp"