Skip to content

macOS: Sunshine.app does not request microphone permission when running as standalone app, causing no audio in Moonlight #5259

@hauntek

Description

@hauntek

Is there an existing issue for this?

  • I have searched the existing issues

Is your issue described in the documentation?

  • I have read the documentation

Is your issue present in the latest beta/pre-release?

This issue is present in the latest pre-release

Describe the Bug

When Sunshine.app is launched as a standalone application (double-click) on macOS, audio does NOT stream to Moonlight clients, even though all permissions are granted. However, when launched from terminal (/Applications/Sunshine.app/Contents/MacOS/Sunshine), audio works perfectly.

Expected Behavior

When Sunshine.app is launched as a standalone application (double-click) on macOS, it should:

When I double-click Sunshine.app to launch it, I expect Sunshine to automatically pop up a system dialog requesting microphone permission (just like it does for screen recording permission). After I click Allow, audio should stream to Moonlight clients normally, exactly the same way it does when I launch Sunshine from the terminal.

Additional Context

Environment:

macOS Version: 14.5 (23F79) - also reproducible on 15.0
Architecture: ARM64 (Apple Silicon M1 Pro)
BlackHole version: 0.6.1
Sunshine version: 2026.415.34134
What I have tried:

Granted all permissions manually in System Settings (Screen Recording, Microphone, Audio Capture) - no effect
Reinstalled BlackHole and rebooted macOS - no effect
Reinstalled Sunshine - no effect
Launched Sunshine via terminal (/Applications/Sunshine.app/Contents/MacOS/Sunshine) - audio works perfectly
Launched Sunshine by double-clicking Sunshine.app - no audio
The issue is not about missing permissions. The issue is that Sunshine.app never requests microphone permission at runtime, causing audio capture to silently fail when run as a standalone application.

Host Operating System

macOS

Operating System Version

macOS Tahoe 26.5 (25F71)

Architecture

arm64/aarch64

Package

macOS - dmg

GPU Type

Apple Silicon

GPU Model

Apple M2 Max

GPU Driver/Mesa Version

metal 4

Capture Method

AVCaptureScreen (macOS)

Apps

{
  "env": {
    "PATH": "$(PATH):$(HOME)/.local/bin"
  },
  "apps": [
    {
      "name": "Desktop",
      "image-path": "desktop.png"
    },
    {
      "name": "Steam Big Picture",
      "detached": [
        "open steam://open/bigpicture"
      ],
      "prep-cmd": [
        {
          "do": "",
          "undo": "open steam://close/bigpicture"
        }
      ],
      "image-path": "steam.png"
    }
  ]
}

Log output

[2026-06-06 22:25:59.498]: Info: Sunshine version: 2026.415.34134 commit: a16c070a8feb509a55a434393690cf76447e9423
[2026-06-06 22:25:59.498]: Info: Package Publisher: LizardByte
[2026-06-06 22:25:59.498]: Info: Publisher Website: https://app.lizardbyte.dev
[2026-06-06 22:25:59.498]: Info: Get support: https://app.lizardbyte.dev/support
[2026-06-06 22:25:59.498]: Info: config: 'av1_mode' = 1
[2026-06-06 22:25:59.498]: Info: config: 'stream_audio' = true
[2026-06-06 22:25:59.498]: Info: config: 'hevc_mode' = 1
[2026-06-06 22:25:59.498]: Info: config: 'locale' = zh
[2026-06-06 22:25:59.498]: Info: config: 'encoder' = software
[2026-06-06 22:25:59.498]: Info: config: 'audio_sink' = BlackHole 2ch
[2026-06-06 22:25:59.498]: Info: config: 'address_family' = both
[2026-06-06 22:25:59.498]: Info: config: 'min_threads' = 6
[2026-06-06 22:25:59.523]: Warning: No gamepad input is available
[2026-06-06 22:25:59.523]: Info: Trying encoder [software]
[2026-06-06 22:25:59.534]: Info: Detecting displays
[2026-06-06 22:25:59.534]: Info: Detected display: 28E850 (id: 2) connected: true
[2026-06-06 22:25:59.534]: Info: Configuring selected display (2) to stream
[2026-06-06 22:25:59.538]: Info: Creating encoder [libx264]
[2026-06-06 22:25:59.538]: Info: Color coding: SDR (Rec. 601)
[2026-06-06 22:25:59.538]: Info: Color depth: 8-bit
[2026-06-06 22:25:59.538]: Info: Color range: JPEG
[2026-06-06 22:25:59.538]: Info: Streaming bitrate is 1000000
[2026-06-06 22:25:59.539]: Info: [libx264 @ 0x14165f270] using cpu capabilities: ARMv8 NEON DotProd I8MM
[2026-06-06 22:25:59.539]: Info: [libx264 @ 0x14165f270] profile High, level 4.2, 4:2:0, 8-bit
[2026-06-06 22:25:59.673]: Info: [libx264 @ 0x14165f270] frame I:1     Avg QP:51.00  size:  1279
[2026-06-06 22:25:59.673]: Info: [libx264 @ 0x14165f270] mb I  I16..4: 100.0%  0.0%  0.0%
[2026-06-06 22:25:59.673]: Info: [libx264 @ 0x14165f270] 8x8 transform intra:0.0%
[2026-06-06 22:25:59.673]: Info: [libx264 @ 0x14165f270] coded y,uvDC,uvAC intra: 0.0% 0.0% 0.0%
[2026-06-06 22:25:59.673]: Info: [libx264 @ 0x14165f270] i16 v,h,dc,p: 91%  0%  9%  0%
[2026-06-06 22:25:59.673]: Info: [libx264 @ 0x14165f270] i8c dc,h,v,p: 100%  0%  0%  0%
[2026-06-06 22:25:59.673]: Info: [libx264 @ 0x14165f270] kb/s:613.92
[2026-06-06 22:25:59.674]: Info: Creating encoder [libx264]
[2026-06-06 22:25:59.674]: Info: Color coding: SDR (Rec. 601)
[2026-06-06 22:25:59.674]: Info: Color depth: 8-bit
[2026-06-06 22:25:59.674]: Info: Color range: JPEG
[2026-06-06 22:25:59.674]: Error: Unsupported Pixel Format.
[2026-06-06 22:25:59.674]: Info: Detecting displays
[2026-06-06 22:25:59.674]: Info: Detected display: 28E850 (id: 2) connected: true
[2026-06-06 22:25:59.674]: Info: Configuring selected display (2) to stream
[2026-06-06 22:25:59.674]: Info: // Testing for available encoders, this may generate errors. You can safely ignore those errors. //
[2026-06-06 22:25:59.674]: Info: 
[2026-06-06 22:25:59.674]: Info: // Ignore any errors mentioned above, they are not relevant. //
[2026-06-06 22:25:59.674]: Info: 
[2026-06-06 22:25:59.674]: Info: Found H.264 encoder: libx264 [software]
[2026-06-06 22:25:59.675]: Info: Starting system tray
[2026-06-06 22:25:59.676]: Info: Configuration UI available at [https://localhost:47990]
[2026-06-06 22:25:59.704]: Info: System tray created
[2026-06-06 22:25:59.704]: Info: Starting main loop
[2026-06-06 22:26:00.391]: Info: Successfully registered DNS service.
[2026-06-06 22:26:18.659]: Info: Trying encoder [software]
[2026-06-06 22:26:18.659]: Info: Detecting displays
[2026-06-06 22:26:18.659]: Info: Detected display: 28E850 (id: 2) connected: true
[2026-06-06 22:26:18.659]: Info: Configuring selected display (2) to stream
[2026-06-06 22:26:18.659]: Info: Creating encoder [libx264]
[2026-06-06 22:26:18.659]: Info: Color coding: SDR (Rec. 601)
[2026-06-06 22:26:18.659]: Info: Color depth: 8-bit
[2026-06-06 22:26:18.659]: Info: Color range: JPEG
[2026-06-06 22:26:18.659]: Info: Streaming bitrate is 1000000
[2026-06-06 22:26:18.660]: Info: [libx264 @ 0x131a06580] using cpu capabilities: ARMv8 NEON DotProd I8MM
[2026-06-06 22:26:18.661]: Info: [libx264 @ 0x131a06580] profile High, level 4.2, 4:2:0, 8-bit
[2026-06-06 22:26:18.757]: Info: [libx264 @ 0x131a06580] frame I:1     Avg QP:51.00  size:  1279
[2026-06-06 22:26:18.757]: Info: [libx264 @ 0x131a06580] mb I  I16..4: 100.0%  0.0%  0.0%
[2026-06-06 22:26:18.757]: Info: [libx264 @ 0x131a06580] 8x8 transform intra:0.0%
[2026-06-06 22:26:18.757]: Info: [libx264 @ 0x131a06580] coded y,uvDC,uvAC intra: 0.0% 0.0% 0.0%
[2026-06-06 22:26:18.757]: Info: [libx264 @ 0x131a06580] i16 v,h,dc,p: 91%  0%  9%  0%
[2026-06-06 22:26:18.757]: Info: [libx264 @ 0x131a06580] i8c dc,h,v,p: 100%  0%  0%  0%
[2026-06-06 22:26:18.757]: Info: [libx264 @ 0x131a06580] kb/s:613.92
[2026-06-06 22:26:18.757]: Info: Creating encoder [libx264]
[2026-06-06 22:26:18.757]: Info: Color coding: SDR (Rec. 601)
[2026-06-06 22:26:18.757]: Info: Color depth: 8-bit
[2026-06-06 22:26:18.757]: Info: Color range: JPEG
[2026-06-06 22:26:18.757]: Error: Unsupported Pixel Format.
[2026-06-06 22:26:18.757]: Info: Detecting displays
[2026-06-06 22:26:18.757]: Info: Detected display: 28E850 (id: 2) connected: true
[2026-06-06 22:26:18.757]: Info: Configuring selected display (2) to stream
[2026-06-06 22:26:18.757]: Info: // Testing for available encoders, this may generate errors. You can safely ignore those errors. //
[2026-06-06 22:26:18.757]: Info: 
[2026-06-06 22:26:18.757]: Info: // Ignore any errors mentioned above, they are not relevant. //
[2026-06-06 22:26:18.757]: Info: 
[2026-06-06 22:26:18.757]: Info: Found H.264 encoder: libx264 [software]
[2026-06-06 22:26:18.757]: Info: Executing [Desktop]
[2026-06-06 22:26:18.835]: Info: New streaming session started [active sessions: 1]
[2026-06-06 22:26:18.835]: Info: ::ffff:192.168.11.15: Ping Timeout
[2026-06-06 22:26:18.866]: Info: CLIENT CONNECTED
[2026-06-06 22:26:18.932]: Info: Detecting displays
[2026-06-06 22:26:18.932]: Info: Detected display: 28E850 (id: 2) connected: true
[2026-06-06 22:26:18.932]: Info: Configuring selected display (2) to stream
[2026-06-06 22:26:18.932]: Info: Creating encoder [libx264]
[2026-06-06 22:26:18.933]: Info: Color coding: SDR (Rec. 709)
[2026-06-06 22:26:18.933]: Info: Color depth: 8-bit
[2026-06-06 22:26:18.933]: Info: Color range: MPEG
[2026-06-06 22:26:18.933]: Info: Streaming bitrate is 30988000
[2026-06-06 22:26:18.934]: Info: [libx264 @ 0x131a05e70] using cpu capabilities: ARMv8 NEON DotProd I8MM
[2026-06-06 22:26:18.934]: Info: [libx264 @ 0x131a05e70] profile High, level 5.2, 4:2:0, 8-bit
[2026-06-06 22:26:18.943]: Info: Minimum FPS target set to ~15fps (66.6667ms)
[2026-06-06 22:26:19.309]: Warning: audio_control_t::set_sink() unimplemented: BlackHole 2ch
[2026-06-06 22:26:19.309]: Info: Using configured audio sink BlackHole 2ch for capture.
[2026-06-06 22:26:19.371]: Info: Found microphone: BlackHole 2ch
[2026-06-06 22:26:19.371]: Info: Setting up microphone: BlackHole 2ch with 48000Hz, 240 frames, 2 channels
[2026-06-06 22:26:19.610]: Info: Audio capture session started successfully
[2026-06-06 22:26:19.611]: Info: Opus initialized: 48 kHz, 2 channels, 512 kbps (total), LOWDELAY
[2026-06-06 22:27:29.607]: Info: CLIENT DISCONNECTED
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] frame I:2     Avg QP:34.49  size:178153
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] frame P:2120  Avg QP:14.79  size: 50888
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] mb I  I16..4: 38.6% 53.4%  8.0%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] mb P  I16..4:  1.3%  2.2%  0.7%  P16..4: 12.1%  0.0%  0.0%  0.0%  0.0%    skip:83.7%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] 8x8 transform intra:52.5% inter:34.2%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] coded y,uvDC,uvAC intra: 50.4% 48.1% 23.2% inter: 5.1% 4.7% 1.3%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] i16 v,h,dc,p: 44% 34% 10% 13%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 13% 26% 20%  4%  7%  5%  9%  5% 10%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 19% 30% 15%  4%  8%  5%  7%  4%  8%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] i8c dc,h,v,p: 45% 27% 19%  9%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] Weighted P-Frames: Y:0.5% UV:0.0%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] kb/s:24483.95
[2026-06-06 22:27:29.638]: Warning: audio_control_t::set_sink() unimplemented: BlackHole 2ch

Online logs

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions