Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.

Inbox
ReportR-5051GitHub issuePublicFixed

Hybrid laptops: LIBVA_DRIVER_NAME=nvidia breaks all hardware video decoding when the compositor renders on the iGPU

Reported by Johary-hub · filed Sep 12, 2026Closed upstream on 2026-09-20 by bjarneo via an automated message, as a duplicate of #8215 (R-1472). GitHub close reason: completed.

Received and recorded verbatim. Nothing has been checked yet.

At a glance

1 · What is claimed?
Only the report text below — no validator has restated it as checkable claims yet.
2 · What does it affect?
Not yet mapped to any requirement or component.
3 · Is it reproducible?
No validation has been run yet.
4 · What remains unclear?
  • Not validated yet: no claims, no reproducer.
5 · What happens next?
Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. No decision has been recorded yet.

Original report

Hybrid laptops: LIBVA_DRIVER_NAME=nvidia breaks all hardware video decoding when the compositor renders on the iGPUrevision 1 · captured 2026-10-04 12:10 UTC via poll

What happens

On a hybrid laptop (AMD iGPU + NVIDIA dGPU) where Hyprland renders on the AMD iGPU, every browser video plays with audio but a permanently black picture. Any VA-API client hangs forever instead of decoding.

default/hypr/nvidia.lua sets LIBVA_DRIVER_NAME=nvidia as soon as an NVIDIA GPU with GSP is present:

if o.shell_succeeds(o.shell_quote(nvidia)) then
  if o.shell_succeeds(o.shell_quote(nvidia_gsp)) then
    hl.env("NVD_BACKEND", "direct")
    hl.env("LIBVA_DRIVER_NAME", "nvidia")

But presence is not the same as being the rendering GPU. On this machine aquamarine picks the AMD card as primary:

drm: Starting backend for /dev/dri/card2, with driver amdgpu
drm: gpu /dev/dri/card2 becomes primary drm
drm: Starting backend for /dev/dri/card1, with driver nvidia-drm with primary /dev/dri/card2
CDRMRenderer(drm): Using device /dev/dri/card2

Forcing every VA-API client onto nvidia_drv_video.so then wedges decoding. The decoder never returns a frame; audio keeps playing on the CPU, so the symptom reads as "video is black, sound is fine" — which sends users hunting for a codec or browser problem.

Expected

Hardware video decoding should use the GPU that actually renders the session, or be left to libva's per-device autodetection.

Reproduce

Hybrid laptop, Hyprland rendering on the iGPU, libva-nvidia-driver installed. Play any hardware-decoded video in Chromium/Brave: audio plays, picture stays black.

Reduced to one command, no browser involved:

ffmpeg -f lavfi -i testsrc2=size=640x360:rate=25:duration=3 -c:v libx264 -pix_fmt yuv420p t.mp4

# hangs forever (Omarchy's default environment)
LIBVA_DRIVER_NAME=nvidia   ffmpeg -hwaccel vaapi -vaapi_device /dev/dri/renderD129 -i t.mp4 -f null -

# decodes fine
LIBVA_DRIVER_NAME=radeonsi ffmpeg -hwaccel vaapi -vaapi_device /dev/dri/renderD129 -i t.mp4 -f null -

# also fine (libva autodetection)
env -u LIBVA_DRIVER_NAME  ffmpeg -hwaccel vaapi -vaapi_device /dev/dri/renderD129 -i t.mp4 -f null -

renderD129 is the AMD node here. VA-API initialisation succeeds on both nodes; only decoding hangs. H.264, HEVC and VP9 all decode correctly once the driver is radeonsi. No kernel errors, no GPU reset, nothing in the journal — the ring simply never completes, which makes this hard to diagnose from logs.

Workaround

Override in the user config, which loads after the defaults:

hl.env("LIBVA_DRIVER_NAME", "radeonsi")

Suggested fix

Gate the LIBVA_DRIVER_NAME=nvidia line on the NVIDIA card actually being the rendering GPU rather than merely present. NVD_BACKEND and __GLX_VENDOR_LIBRARY_NAME are separate concerns and can stay as they are.

Second, related symptom

On the same machine the external monitor is wired to the NVIDIA card while the desktop renders on AMD, so the hardware cursor has to be blitted across GPUs and fails continuously — 10362 occurrences in a single session:

ERR: EGL (blit): glCheckFramebufferStatus failed: 1282
ERR: drm: Backend requires blit, but cursor blit failed

cursor { no_hardware_cursors = true } silences it. Worth considering as a default when aquamarine reports more than one GPU with outputs on a non-primary card.

System

  • Omarchy 4.0.2-1
  • Hyprland 0.56.2-1, aquamarine, Wayland
  • CPU: AMD Ryzen 7 8845HS (Radeon 780M / VCN 4.0)
  • GPUs: NVIDIA AD106M (RTX 4070 Max-Q, nvidia-open-dkms 610.57.04-1) + AMD HawkPoint1 (amdgpu)
  • Displays: internal eDP-1 on the AMD card, external HDMI-A-1 on the NVIDIA card
  • mesa 1:26.2.1-1, libva 2.24.1-1, libva-nvidia-driver 0.0.17-1, linux 7.1.9.arch1-2
View raw text
## What happens

On a hybrid laptop (AMD iGPU + NVIDIA dGPU) where Hyprland renders on the **AMD iGPU**, every browser video plays with audio but a permanently black picture. Any VA-API client hangs forever instead of decoding.

`default/hypr/nvidia.lua` sets `LIBVA_DRIVER_NAME=nvidia` as soon as an NVIDIA GPU with GSP is *present*:

```lua
if o.shell_succeeds(o.shell_quote(nvidia)) then
  if o.shell_succeeds(o.shell_quote(nvidia_gsp)) then
    hl.env("NVD_BACKEND", "direct")
    hl.env("LIBVA_DRIVER_NAME", "nvidia")
```

But presence is not the same as being the rendering GPU. On this machine aquamarine picks the AMD card as primary:

```
drm: Starting backend for /dev/dri/card2, with driver amdgpu
drm: gpu /dev/dri/card2 becomes primary drm
drm: Starting backend for /dev/dri/card1, with driver nvidia-drm with primary /dev/dri/card2
CDRMRenderer(drm): Using device /dev/dri/card2
```

Forcing every VA-API client onto `nvidia_drv_video.so` then wedges decoding. The decoder never returns a frame; audio keeps playing on the CPU, so the symptom reads as "video is black, sound is fine" — which sends users hunting for a codec or browser problem.

## Expected

Hardware video decoding should use the GPU that actually renders the session, or be left to libva's per-device autodetection.

## Reproduce

Hybrid laptop, Hyprland rendering on the iGPU, `libva-nvidia-driver` installed. Play any hardware-decoded video in Chromium/Brave: audio plays, picture stays black.

Reduced to one command, no browser involved:

```bash
ffmpeg -f lavfi -i testsrc2=size=640x360:rate=25:duration=3 -c:v libx264 -pix_fmt yuv420p t.mp4

# hangs forever (Omarchy's default environment)
LIBVA_DRIVER_NAME=nvidia   ffmpeg -hwaccel vaapi -vaapi_device /dev/dri/renderD129 -i t.mp4 -f null -

# decodes fine
LIBVA_DRIVER_NAME=radeonsi ffmpeg -hwaccel vaapi -vaapi_device /dev/dri/renderD129 -i t.mp4 -f null -

# also fine (libva autodetection)
env -u LIBVA_DRIVER_NAME  ffmpeg -hwaccel vaapi -vaapi_device /dev/dri/renderD129 -i t.mp4 -f null -
```

`renderD129` is the AMD node here. VA-API *initialisation* succeeds on both nodes; only decoding hangs. H.264, HEVC and VP9 all decode correctly once the driver is `radeonsi`. No kernel errors, no GPU reset, nothing in the journal — the ring simply never completes, which makes this hard to diagnose from logs.

## Workaround

Override in the user config, which loads after the defaults:

```lua
hl.env("LIBVA_DRIVER_NAME", "radeonsi")
```

## Suggested fix

Gate the `LIBVA_DRIVER_NAME=nvidia` line on the NVIDIA card actually being the rendering GPU rather than merely present. `NVD_BACKEND` and `__GLX_VENDOR_LIBRARY_NAME` are separate concerns and can stay as they are.

## Second, related symptom

On the same machine the external monitor is wired to the NVIDIA card while the desktop renders on AMD, so the hardware cursor has to be blitted across GPUs and fails continuously — 10362 occurrences in a single session:

```
ERR: EGL (blit): glCheckFramebufferStatus failed: 1282
ERR: drm: Backend requires blit, but cursor blit failed
```

`cursor { no_hardware_cursors = true }` silences it. Worth considering as a default when aquamarine reports more than one GPU with outputs on a non-primary card.

## System

- Omarchy 4.0.2-1
- Hyprland 0.56.2-1, aquamarine, Wayland
- CPU: AMD Ryzen 7 8845HS (Radeon 780M / VCN 4.0)
- GPUs: NVIDIA AD106M (RTX 4070 Max-Q, `nvidia-open-dkms` 610.57.04-1) + AMD HawkPoint1 (`amdgpu`)
- Displays: internal eDP-1 on the AMD card, external HDMI-A-1 on the NVIDIA card
- mesa 1:26.2.1-1, libva 2.24.1-1, libva-nvidia-driver 0.0.17-1, linux 7.1.9.arch1-2

Validation

Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.

Linked

  • Fixed bypr/9483· confirmed

Decision

Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.

No decision has been recorded yet.