Skip to content

fix(linux): disable WebKitGTK compositing in VMs to fix black iframes#441

Merged
koala73 merged 1 commit intomainfrom
fix/linux-vm-black-iframes
Feb 26, 2026
Merged

fix(linux): disable WebKitGTK compositing in VMs to fix black iframes#441
koala73 merged 1 commit intomainfrom
fix/linux-vm-black-iframes

Conversation

@koala73
Copy link
Owner

@koala73 koala73 commented Feb 26, 2026

Summary

  • Detect VM environments via /proc/cpuinfo hypervisor flag and /sys/class/dmi/id/sys_vendor strings
  • Set WEBKIT_DISABLE_COMPOSITING_MODE=1 to force software rendering for all content including iframes
  • Set LIBGL_ALWAYS_SOFTWARE=1 to ensure consistent Mesa llvmpipe rendering
  • Native Linux machines with real GPUs are unaffected

Why

WebKitGTK promotes iframes, <video>, and canvas elements to GPU-textured compositing layers (separate from the main page's software-tiled rendering). In VMs (Apple Virtualization.framework, QEMU/KVM, VMware, etc.) the virtio-gpu driver only supports 2D or limited GL — GBM buffer allocation for these compositing layers fails silently, rendering iframe/video content as black while the main page works fine.

This explains why Live News (YouTube), Live Webcams, and other iframe-embedded content shows black boxes while all other panels render correctly.

Test plan

  • Run AppImage in Apple Silicon VM (UTM/Parallels) — Live News + Webcams should render
  • Run AppImage on native Linux — verify no performance regression
  • Check stderr for [tauri] VM detected; disabled WebKitGTK accelerated compositing message in VM
  • Manual workaround to validate: WEBKIT_DISABLE_COMPOSITING_MODE=1 LIBGL_ALWAYS_SOFTWARE=1 ./WorldMonitor.AppImage

WebKitGTK promotes iframes, <video>, and canvas elements to GPU-textured
compositing layers. In VMs (Apple Virtualization.framework, QEMU, VMware,
etc.) the virtio-gpu driver often only supports 2D or limited GL, so GBM
buffer allocation for compositing layers fails silently — rendering
iframe/video content as black while the main page works fine.

Detect VM environments via /proc/cpuinfo hypervisor flag and sys_vendor
strings, then set WEBKIT_DISABLE_COMPOSITING_MODE=1 and
LIBGL_ALWAYS_SOFTWARE=1 to force software rendering for all content.
Native Linux machines with real GPUs are unaffected.
@chatgpt-codex-connector
Copy link

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@vercel
Copy link

vercel bot commented Feb 26, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
worldmonitor Building Building Preview, Comment Feb 26, 2026 7:24pm
worldmonitor-finance Building Building Preview, Comment Feb 26, 2026 7:24pm
worldmonitor-happy Building Building Preview, Comment Feb 26, 2026 7:24pm
worldmonitor-startup Building Building Preview, Comment Feb 26, 2026 7:24pm

Request Review

@koala73 koala73 merged commit e12a6bb into main Feb 26, 2026
6 checks passed
This was referenced Feb 26, 2026
facusturla pushed a commit to facusturla/worldmonitor that referenced this pull request Feb 27, 2026
…koala73#441)

WebKitGTK promotes iframes, <video>, and canvas elements to GPU-textured
compositing layers. In VMs (Apple Virtualization.framework, QEMU, VMware,
etc.) the virtio-gpu driver often only supports 2D or limited GL, so GBM
buffer allocation for compositing layers fails silently — rendering
iframe/video content as black while the main page works fine.

Detect VM environments via /proc/cpuinfo hypervisor flag and sys_vendor
strings, then set WEBKIT_DISABLE_COMPOSITING_MODE=1 and
LIBGL_ALWAYS_SOFTWARE=1 to force software rendering for all content.
Native Linux machines with real GPUs are unaffected.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant