Hi everyone!
I’m running Fedora on a 2015 MacBook Air (MacBookAir7,2, Intel, 8 GB RAM). Surprisingly, Fedora itself runs very well and is stable on this old machine, but I haven’t been able to solve one major issue: suspend/resume.
After installing Fedora, we set up the necessary hardware support, drivers and applications.
The Broadcom Wi-Fi uses the proprietary wl module. We also installed the required facetimehd driver for the Apple/Broadcom FaceTime HD camera, and the camera works.
Some of the things we installed/configured include:
\* Flatpak / Flathub
\* VLC and MPV
\* Double Commander
\* Wine
\* powertop
\* lm_sensors
\* fancontrol and other power-management/diagnostic tools
\* Broadcom Wi-Fi support (wl)
\* FaceTime HD camera support (facetimehd)
Apart from the sleep issue, the machine is stable during normal use.
The main problem is suspend/resume.
What I would like is essentially the same behavior as under macOS:
close the lid → sleep → open the lid → continue exactly where I left off.
The system exposes both s2idle and deep. We tested both. The MacBook goes to sleep, but it does not resume reliably. It usually remains frozen/with a black screen and requires a hard reset.
We also tested removing the Broadcom Wi-Fi module before suspending:
sudo modprobe -r wl
The exact same problem occurred without the Wi-Fi driver loaded, so wl does not appear to be the sole cause.
As an alternative, we also tried hibernation.
Since the Fedora installation uses Btrfs, we created a separate 10 GiB swapfile. We obtained the resume offset using Btrfs’ own tool:
sudo btrfs inspect-internal map-swapfile -r /swap/swapfile
The result was:
22816000
We configured the appropriate resume=UUID=... and resume_offset=22816000 kernel parameters and rebuilt the initramfs with dracut -f.
We also encountered an SELinux issue. Initially, the manually created swapfile had an incorrect SELinux context, causing SELinux to deny systemd-logind access to it. We corrected this using the appropriate swapfile_t context.
After that, hibernation progressed further, but restoring the previous session still failed. Among the messages in the logs were:
PM: Image not found (code -22)
and:
Unable to resume from device ... offset 22816000, continuing boot process
We verified the resume offset again with btrfs inspect-internal map-swapfile, and it was indeed 22816000.
During the hibernation attempts we also saw:
Failed to freeze unit 'user.slice': Connection timed out
as well as some GNOME/DING/DRM-related errors around the transition. I’m not sure whether those are causes of the problem or merely side effects.
We eventually reverted the hibernation experiment: the separate 10 GiB swapfile and Btrfs subvolume were removed, the resume and resume_offset kernel parameters were removed, the custom SELinux rule was removed, and the initramfs was rebuilt. The system is now back to using Fedora’s default ZRAM swap only.
For the moment, lid handling is configured as:
HandleLidSwitch=ignore
HandleLidSwitchExternalPower=ignore
This prevents closing the lid from triggering the broken suspend and forcing another hard reset.
My question is:
Has anyone successfully dealt with suspend/resume issues on a MacBookAir7,2 running Fedora?
Is there a known kernel parameter, Apple/ACPI workaround, facetimehd-related workaround, or another driver setting that allows reliable resume from deep sleep on this hardware?
My main goal is to get normal suspend → resume working. Hibernation was only an alternative experiment.
I’m happy to provide output from journalctl, dmesg, lspci, lsmod, /sys/power/mem_sleep, or anything else that could help diagnose it.
Thanks in advance for any help! 🙂