# Black Screen Diagnostic Workflow When Sunshine, x11vnc, or any display capture tool shows a black screen, use this workflow to determine whether it's a capture/encoding problem or the GPU is genuinely outputting black pixels. ## Step 1: Take a hardware screenshot ```bash DISPLAY=:0 xwd -root -out /tmp/screen.xwd convert /tmp/screen.xwd /tmp/screen.png ls -la /tmp/screen.png ``` If the PNG is tiny (~1.3KB regardless of resolution), the framebuffer is all black. Verify with Python: ```python from PIL import Image img = Image.open('/tmp/screen.png') samples = [img.getpixel((x, y)) for y in range(0, img.height, 200) for x in range(0, img.width, 200)] unique = set(samples) # {0} means completely black — GPU is not rendering ``` ## Step 2: If framebuffer is black, check DRM connector state ```bash for c in /sys/class/drm/card*-HDMI-*/; do echo "$(basename $c): status=$(cat $c/status) enabled=$(cat $c/enabled) dpms=$(cat $c/dpms)" done ``` Normal output: ``` card1-HDMI-A-1: status=connected enabled=enabled dpms=On ``` Problem output (DPMS lockup): ``` card1-HDMI-A-1: status=connected enabled=disabled dpms=Off ``` ## Step 3: Cross-check with nvidia-settings ```bash nvidia-settings -q EnabledDisplays -q ConnectedDisplays ``` Healthy: `EnabledDisplays` matches `ConnectedDisplays` bitmask. Locked: `EnabledDisplays = 0x00000000` while `ConnectedDisplays` shows the port. ## Step 4: Cross-check X11 state ```bash DISPLAY=:0 xrandr | grep "HDMI-0" DISPLAY=:0 xset q | grep -i "monitor\|dpms" ``` X11 may report "Monitor is On" and show modes available even when the kernel connector is disabled. This is a driver-level mismatch — X11's DPMS state doesn't reflect the kernel's actual state. ## Resolution If `enabled=disabled` and `dpms=Off` at the kernel level: - `xset dpms force on` and `xrandr --output HDMI-0 --auto` will NOT fix it - Writing to `/sys/class/drm/card*-HDMI-*/dpms` returns Permission denied even as root (NVIDIA driver read-only) - The GPU display controller needs a full power cycle - Only a reboot reliably fixes this After reboot, X11 authorization is broken (LightDM's Xauthority is invalid for the user). See the main SKILL.md DPMS lockup pitfall for the Xauth merge fix. ## If framebuffer is NOT black (screenshot shows desktop) The problem is in the capture/streaming layer: - Sunshine: check `output_name`, `capture` method, `hw_cursor` - x11vnc: add `-noxdamage`, use `novnc_proxy` launcher - noVNC: check UFW allows the port, browser console for WebSocket errors