mirror of
https://github.com/arthur-pbty/arthur-os.git
synced 2026-08-01 20:28:16 +02:00
33 lines
1.1 KiB
Bash
33 lines
1.1 KiB
Bash
#!/bin/bash
|
|
|
|
# Lazy-unmount gvfsd-fuse filesystems before suspend/hibernate to prevent the
|
|
# kernel's process freeze from timing out. FUSE daemons (like gvfsd-fuse from
|
|
# Nautilus) can block in uninterruptible sleep during freeze, causing suspend
|
|
# to silently fail. After wake, restart gvfs so the FUSE mount is restored.
|
|
|
|
if [[ $1 == "pre" ]]; then
|
|
while IFS=' ' read -r _ mountpoint fstype _; do
|
|
if [[ $fstype == fuse.gvfsd-fuse ]]; then
|
|
mountpoint=$(printf '%b' "$mountpoint")
|
|
fusermount3 -uz "$mountpoint" 2>/dev/null || fusermount -uz "$mountpoint" 2>/dev/null || true
|
|
fi
|
|
done < /proc/mounts
|
|
fi
|
|
|
|
if [[ $1 == "post" ]]; then
|
|
# Run in background — user.slice is still frozen at this point, so a
|
|
# synchronous restart would block the thaw for up to 90 seconds.
|
|
(
|
|
sleep 5
|
|
for uid_dir in /run/user/*; do
|
|
uid=$(basename "$uid_dir")
|
|
if [[ -S $uid_dir/bus ]]; then
|
|
sudo -u "#$uid" env \
|
|
DBUS_SESSION_BUS_ADDRESS="unix:path=$uid_dir/bus" \
|
|
XDG_RUNTIME_DIR="$uid_dir" \
|
|
systemctl --user restart gvfs-daemon.service 2>/dev/null || true
|
|
fi
|
|
done
|
|
) &
|
|
fi
|