mirror of
https://github.com/arthur-pbty/arthur-os.git
synced 2026-08-01 20:28:16 +02:00
Make hibernation offset safer
This commit is contained in:
@@ -14,9 +14,22 @@ if ! command -v limine-mkinitcpio &>/dev/null; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
MKINITCPIO_CONF="/etc/mkinitcpio.conf.d/omarchy_resume.conf"
|
MKINITCPIO_CONF="/etc/mkinitcpio.conf.d/omarchy_resume.conf"
|
||||||
|
SWAP_FILE="/swap/swapfile"
|
||||||
|
RESUME_DROP_IN="/etc/limine-entry-tool.d/resume.conf"
|
||||||
|
|
||||||
# Check if hibernation is already configured
|
# Check if hibernation is already configured
|
||||||
if [[ -f $MKINITCPIO_CONF ]] && grep -q "^HOOKS+=(resume)$" "$MKINITCPIO_CONF"; then
|
if [[ -f $MKINITCPIO_CONF ]] && grep -q "^HOOKS+=(resume)$" "$MKINITCPIO_CONF"; then
|
||||||
|
# Fix empty resume_offset if btrfs map-swapfile failed during initial setup
|
||||||
|
if [[ -f $RESUME_DROP_IN ]] && grep -q 'resume_offset="$' "$RESUME_DROP_IN" && [[ -f $SWAP_FILE ]]; then
|
||||||
|
RESUME_OFFSET=$(sudo btrfs inspect-internal map-swapfile -r "$SWAP_FILE" 2>/dev/null)
|
||||||
|
if [[ -n $RESUME_OFFSET ]]; then
|
||||||
|
echo "Fixing empty resume_offset ($RESUME_OFFSET)"
|
||||||
|
sudo sed -i "s/resume_offset=\"$/resume_offset=$RESUME_OFFSET\"/" "$RESUME_DROP_IN"
|
||||||
|
sudo sed -i "s/resume_offset=\"$/resume_offset=$RESUME_OFFSET\"/" /etc/default/limine
|
||||||
|
sudo limine-mkinitcpio
|
||||||
|
sudo limine-update
|
||||||
|
fi
|
||||||
|
fi
|
||||||
echo "Hibernation is already set up"
|
echo "Hibernation is already set up"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
@@ -29,7 +42,6 @@ if [[ $1 != "--force" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
SWAP_SUBVOLUME="/swap"
|
SWAP_SUBVOLUME="/swap"
|
||||||
SWAP_FILE="$SWAP_SUBVOLUME/swapfile"
|
|
||||||
|
|
||||||
# Create btrfs subvolume for swap
|
# Create btrfs subvolume for swap
|
||||||
if ! sudo btrfs subvolume show "$SWAP_SUBVOLUME" &>/dev/null; then
|
if ! sudo btrfs subvolume show "$SWAP_SUBVOLUME" &>/dev/null; then
|
||||||
@@ -68,15 +80,18 @@ sudo cp -p "$OMARCHY_PATH/default/systemd/system-sleep/keyboard-backlight" /usr/
|
|||||||
|
|
||||||
# Add resume= kernel parameters so the initramfs resume hook knows where to find the
|
# Add resume= kernel parameters so the initramfs resume hook knows where to find the
|
||||||
# hibernation image. Without these, resume happens late (after GPU drivers load) and fails.
|
# hibernation image. Without these, resume happens late (after GPU drivers load) and fails.
|
||||||
RESUME_DROP_IN="/etc/limine-entry-tool.d/resume.conf"
|
|
||||||
if [[ ! -f $RESUME_DROP_IN ]]; then
|
if [[ ! -f $RESUME_DROP_IN ]]; then
|
||||||
echo "Adding resume kernel parameters"
|
echo "Adding resume kernel parameters"
|
||||||
sudo swapon -p 0 "$SWAP_FILE" 2>/dev/null
|
sudo swapon -p 0 "$SWAP_FILE" 2>/dev/null
|
||||||
RESUME_DEVICE=$(findmnt -no SOURCE -T "$SWAP_FILE" | sed 's/\[.*\]//')
|
RESUME_DEVICE=$(findmnt -no SOURCE -T "$SWAP_FILE" | sed 's/\[.*\]//')
|
||||||
RESUME_OFFSET=$(sudo btrfs inspect-internal map-swapfile -r "$SWAP_FILE")
|
RESUME_OFFSET=$(sudo btrfs inspect-internal map-swapfile -r "$SWAP_FILE")
|
||||||
sudo mkdir -p /etc/limine-entry-tool.d
|
if [[ -n $RESUME_OFFSET ]]; then
|
||||||
echo "KERNEL_CMDLINE[default]+=\" resume=$RESUME_DEVICE resume_offset=$RESUME_OFFSET\"" | sudo tee "$RESUME_DROP_IN" >/dev/null
|
sudo mkdir -p /etc/limine-entry-tool.d
|
||||||
sudo tee -a /etc/default/limine < "$RESUME_DROP_IN" >/dev/null
|
echo "KERNEL_CMDLINE[default]+=\" resume=$RESUME_DEVICE resume_offset=$RESUME_OFFSET\"" | sudo tee "$RESUME_DROP_IN" >/dev/null
|
||||||
|
sudo tee -a /etc/default/limine < "$RESUME_DROP_IN" >/dev/null
|
||||||
|
else
|
||||||
|
echo "Warning: Could not determine resume offset for $SWAP_FILE" >&2
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Use ACPI alarm for RTC wakeup on s2idle systems (needed for suspend-then-hibernate)
|
# Use ACPI alarm for RTC wakeup on s2idle systems (needed for suspend-then-hibernate)
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
echo "Fix empty resume_offset in hibernation config"
|
||||||
|
|
||||||
|
RESUME_DROP_IN="/etc/limine-entry-tool.d/resume.conf"
|
||||||
|
SWAP_FILE="/swap/swapfile"
|
||||||
|
|
||||||
|
if [[ -f $RESUME_DROP_IN ]] && grep -q 'resume_offset="$' "$RESUME_DROP_IN" && [[ -f $SWAP_FILE ]]; then
|
||||||
|
RESUME_OFFSET=$(sudo btrfs inspect-internal map-swapfile -r "$SWAP_FILE" 2>/dev/null)
|
||||||
|
if [[ -n $RESUME_OFFSET ]]; then
|
||||||
|
sudo sed -i "s/resume_offset=\"$/resume_offset=$RESUME_OFFSET\"/" "$RESUME_DROP_IN"
|
||||||
|
sudo sed -i "s/resume_offset=\"$/resume_offset=$RESUME_OFFSET\"/" /etc/default/limine
|
||||||
|
sudo limine-mkinitcpio
|
||||||
|
sudo limine-update
|
||||||
|
echo "Fixed: resume_offset=$RESUME_OFFSET"
|
||||||
|
else
|
||||||
|
echo "Warning: Could not determine resume offset for $SWAP_FILE"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
Reference in New Issue
Block a user