#!/usr/bin/bash # # /usr/local/sbin/pam-umount.sh %(USER) %(USERUID) %(MNTPT)' set -eu usr="$1" uid="$2" mtp="$3" 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 done } ###################### ## This is the first mount we need to get rid of: if [[ "$mtp" =~ "/lmn/media/$usr/share" ]] ; then shutdownVMs sleep 5 # leave some time to write caches … sudo -u ${usr} killall gvfsd | systemd-cat sudo -u ${usr} killall dbus-daemon | systemd-cat systemctl kill system-virtiofs.slice # debug to find processes blocking umount: # lsof > /tmp/lsof.log fi ## Just umount: exec umount "$mtp"