Skip to content

Suspend working with Linux Mint 22.3 on 2016 Macbook (no touch bar) #207

@PiotrZadka

Description

@PiotrZadka

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

  1. Black Screen on Wake: System enters "Deep Sleep" (S3) but fails to wake the NVMe or display.
  2. Instant Wake (Lid Jitter): Lid sensor incorrectly reports "open" immediately after closing, causing the system to wake instantly.
  3. Thunderbolt Delays: Thunderbolt driver causes 2-3 minute delays during the resume process.
  4. 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/true

Then 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=s2idle

Step 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
fi

sudo 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
    ;;
esac

sudo 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions