I recently installed CachyOS on my 2020 Intel MacBook Pro. Almost everything worked surprisingly well. Then I closed the lid.
The Mac went to sleep, the screen turned black, and it never came back. The Touch Bar sometimes lit up, but the display, keyboard, trackpad and network stayed dead. The only option was holding the power button and forcing a reboot.
This MacBook is a MacBookPro16,2 with Apple's T2 chip. Linux support is much better than it used to be, but suspend is still complicated.
What I tried
I tested both sleep modes available on the machine:
deeps2idle
Both failed.
I then tried the older T2Linux workaround that unloads apple_bce before sleep and reloads it after resume. It did not help.
My CachyOS kernel already included the newer apple_bce no-state suspend implementation, so I removed the old workaround and tested the native path with pm_async=off. This was promising because other MacBookPro16,2 users reported successful resume with it.
Mine still froze.
Trying t2bce
The most interesting modern option is t2bce, a new replacement for the old apple_bce driver.
I built version 0.06 directly against the CachyOS kernel. Because CachyOS uses a Clang/LTO kernel, I had to build it with:
make LLVM=1
I installed its four modules and created a one-time GRUB entry that disabled apple_bce. This gave me a safe fallback if the experimental boot failed.
The result was impressive at first. CachyOS booted normally and t2bce restored everything:
- Internal keyboard and trackpad
- Touch Bar
- Audio
- Wi-Fi
Unfortunately, real deep suspend still failed to resume and required another forced reboot.
Hibernate did not save me
My next idea was hibernation.
I created a dedicated 20 GB Btrfs swapfile, configured the correct resume offset, and verified that systemd could detect it. The Mac went dark, but did not wake normally. After a forced reboot, Linux reported that no valid hibernation image could be restored.
I also tried systemd's test_resume mode. That froze too.
At that point, suspend and hibernate had both exhausted enough of my patience.
What actually works
I stopped trying to make the Mac sleep.
My final lid configuration is simple:
- Closing the lid locks KDE
- The display turns off after five seconds
- Automatic suspend is disabled
- Opening the lid immediately shows the locked session
I also added a systemd-logind fallback:
[Login]HandleLidSwitch=lockHandleLidSwitchExternalPower=lockHandleLidSwitchDocked=ignore
Plasma's PowerDevil normally handles the lid event, but this ensures that logind never falls back to suspend when the desktop session is unavailable.
It is not real sleep, so it still uses battery. But it is predictable, instant and does not corrupt my session with forced shutdowns.
The conclusion
Linux on a T2 MacBook is now good enough to use every day, but sleep remains very dependent on the exact model, firmware and kernel.
t2bce is promising and I will keep watching it. For now, the reliable solution on my MacBookPro16,2 is not another suspend patch. It is accepting that the machine should stay awake when the lid is closed.
Not perfect, but it works every time.
Syntax highlighting provided by torchlight.dev.