Skip to content
macOS Tahoe: Black Wallpaper in Mission Control

macOS Tahoe: Black Wallpaper in Mission Control

A bug in macOS Tahoe (26.x) causes wallpapers to flash or remain black when transitioning between full-screen desktops via Mission Control.

Last checked: macOS 26.5.1 — still unfixed. A weekly cron job monitors for new fixes.

Symptoms

When using Mission Control (Ctrl+↑) and then sliding between full-screen desktops (Ctrl+←/→), the wallpaper turns solid black during the transition. It may return after the animation finishes, or stay black until you force a refresh.

Key triggers:

  • At least one app is in full-screen mode (green traffic light button)
  • Navigating spaces via Mission Control (not Ctrl+←/→ directly on the desktop level, though that can also trigger it)
  • More visible with Reduce Motion enabled (Accessibility > Display)

Scope

Detail
OS versionsmacOS Tahoe 26.0 through 26.5.1 (confirmed)
HardwareM1, M2, M3, M4 Macs (all Apple Silicon), also reported on Intel
First reportedSeptember 2025 (26.0 release)
Apple statusUnacknowledged — no official fix or KB article as of 26.5.1
Community volume~200 “Me Too” clicks on Apple Community, multiple Reddit threads, MacRumors discussions

Root Cause

Community analyst kramola reverse-engineered the issue. The summary:

  1. macOS Tahoe renders wallpapers through a separate WallpaperImageExtension process, which renders images into a pluginLayer via an OffscreenWindow
  2. A LayerMultiplexer manages these layers per space/display
  3. When pluginLayer becomes stale (after sleep, display changes, or simply over time), the LayerMultiplexer falls back to errorLayer — which is pure black
  4. WallpaperImageExtension then re-renders, producing a visible black flash
  5. With Reduce Motion ON, the transition is instant — no animation to mask the re-render. With animations ON, the ~0.5s slide hides it

WallpaperAgent invalidates the layer prematurely under certain conditions, logging: "Marking shared wallpaper as inactive. Will be purged in next resolution."

The root cause of the black flash is therefore a race condition in the wallpaper compositor pipeline — the layer goes stale and the fallback to black happens before the re-render completes.

Workarounds

1. Switch to a static wallpaper (most reliable)

Go to System Settings > Wallpaper and pick a still image instead of a dynamic/rotating wallpaper. This avoids the pluginLayer degradation entirely since static wallpapers don’t go through WallpaperImageExtension the same way.

Trade-off: you lose the dynamic wallpaper feature.

2. Disable Reduce Motion

System Settings > Accessibility > Display > Reduce Motion → OFF

The black flash still happens underneath, but the transition animation masks it visually. If you don’t mind the animations, this is a zero-effort fix.

Trade-off: you get the full Mission Control slide animations back, which may feel slower.

3. Hammerspoon auto-refresh (best for keeping dynamic wallpapers)

Install Hammerspoon — a free, open-source macOS automation tool that runs as a proper GUI app with full display session access:

brew install --cask hammerspoon

Add this config to ~/.hammerspoon/init.lua:

local wallpaperDir = "/Users/YOUR_USERNAME/Pictures/wallpapers"

local function setRandomWallpaper()
    local files = {}
    local handle = io.popen('find "' .. wallpaperDir .. '" -maxdepth 1 -type f \\( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.heic" \\)')
    for file in handle:lines() do
        table.insert(files, file)
    end
    handle:close()
    if #files == 0 then return end
    local randomFile = files[math.random(#files)]
    for _, screen in ipairs(hs.screen.allScreens()) do
        screen:desktopImageURL("file://" .. randomFile)
    end
end

setRandomWallpaper()                                -- set on launch
hs.timer.doEvery(900, setRandomWallpaper)           -- repeat every 15 min

Click Reload Config in the Hammerspoon menu bar icon, and add Hammerspoon to System Settings > General > Login Items.

This keeps the wallpaper layer fresh by periodically forcing a rotation, preventing the stale-layer → black fallback.

4. Mission Control desktop reset (temporary)

  1. Press Ctrl+↑ to enter Mission Control
  2. Hover over each desktop and click the to remove it
  3. Click the + icon to add new desktops
  4. Reassign your wallpaper

This works temporarily but the bug returns after sleep or prolonged use.

Why shell scripts can’t work around it

macOS Tahoe intentionally blocks background processes from accessing the display session:

Could not switch to audit session: Operation not permitted

This breaks all approaches via cron, launchd, or shell AppleScript that try to change wallpapers from a non-GUI context. Hammerspoon works because it’s a proper GUI app that stays in the correct audit session.

What was ruled out as broken:

ApproachResult
launchd + osascript (System Events)FSFindFolder error -43
cron + osascript (Finder)Audit session blocked
launchd + osascript (Finder)Audit session blocked
defaults write com.apple.desktopmacOS Tahoe ignores this plist (uses com.apple.wallpaper instead)
cron + Swift (NSWorkspace.setDesktopImageURL)Audit session blocked

Monitoring

A weekly automated check monitors Apple Community, Reddit, MacRumors, and tech press for either an official fix from Apple or new workarounds. Updates are delivered to this page if anything changes.

References