-
Notifications
You must be signed in to change notification settings - Fork 115
Suspend working with Linux Mint 22.3 on 2016 Macbook (no touch bar) #207
Description
MacBook Pro 2016 (13,1) Linux Suspend/Resume Fix Guide
This guide provides a comprehensive solution for fixing common suspend/resume issues on MacBook Pro 2016 (specifically the 13,1 model) running Linux Mint 22.3 (or similar Ubuntu-based distributions).
1. System Specifications
- Hardware: MacBook Pro 13,1 (2016, No Touchbar)
- OS: Linux Mint 22.3
- Kernel: 6.17.0-14-generic
- CPU: Intel Core i5
- GPU: Intel Iris Graphics 540
2. Issues Addressed
- Black Screen on Wake: System enters "Deep Sleep" (S3) but fails to wake the NVMe or display.
- Instant Wake (Lid Jitter): Lid sensor incorrectly reports "open" immediately after closing, causing the system to wake instantly.
- Thunderbolt Delays: Thunderbolt driver causes 2-3 minute delays during the resume process.
- NVMe Power Management: Kernel struggles with NVMe power states on this hardware.
3. The Solution
Step 1: Kernel Boot Parameters
Add these parameters to /etc/default/grub (then run sudo update-grub):
button.lid_init_state=open nvme_core.default_ps_max_latency_us=0 nvme.noacpi=1 pci=noaer i915.enable_dc=0 i915.enable_fbc=0 i915.enable_psr=0
Step 2: Disable Thunderbolt (if not used)
Create /etc/modprobe.d/disable-thunderbolt.conf:
blacklist thunderbolt
install thunderbolt /bin/trueThen run: sudo update-initramfs -u
Step 3: Configure Sleep State
The MacBook Pro 13,1 is more stable using s2idle (Modern Standby) than deep sleep.
In /etc/systemd/sleep.conf, ensure the following is set:
[Sleep]
SuspendState=s2idleStep 4: Create the Suspend Fix Script
Create /usr/local/bin/tm-suspend-fix.sh:
#!/usr/bin/env bash
# 1. Disable d3cold for NVMe stability
find /sys/devices/ -name d3cold_allowed -exec sh -c 'echo 0 > "$1" 2>/dev/null' _ {} \;
# 2. Disable noisy wakeup sources to prevent "jitter" wakes
for device in LID0 XHC1 ARPT RP01 RP09 RP10; do
if grep -q "$device.*enabled" /proc/acpi/wakeup; then
echo "$device" > /proc/acpi/wakeup
fi
done
# 3. Ensure Keyboard (SPIT) is enabled for wake
if grep -q "SPIT.*disabled" /proc/acpi/wakeup; then
echo "SPIT" > /proc/acpi/wakeup
fisudo chmod +x /usr/local/bin/tm-suspend-fix.sh
Step 5: Create the Systemd Hook
Create /lib/systemd/system-sleep/tm-suspend-fix:
#!/usr/bin/env bash
case $1 in
pre)
/usr/local/bin/tm-suspend-fix.sh
;;
post)
echo "$(date) Resume complete." >> /tmp/suspend.log
;;
esacsudo chmod +x /lib/systemd/system-sleep/tm-suspend-fix
4. How the Fix Works
- s2idle: Keeps the system in a "shallow" sleep that the MacBook hardware can reliably wake from.
- d3cold=0: Prevents the NVMe from entering a deep power-saving state that usually crashes the system on wake.
- Wake Triggers: Disables the Lid sensor (LID0) as a wake source to prevent "jitter" wakes. To wake the laptop, press a key or the power button.
- No Thunderbolt: Prevents hardware "hunting" for Thunderbolt devices during resume.
Created on 2026-03-12 for the Linux MacBook Community.