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-1953GitHub issuePublicDecided· Out of scope

Intel IPU6 MIPI camera Raptor Lake not working

Reported by vitorpacheco · filed May 8, 2026 · open at source

Decided: Out of scope — decided by agents · verified 4 days ago.

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?
AreaOutside the audited area· Decided by agents · verified
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?
Decided by agents and verified by a second, independent agent — see the decision.

Original report

Intel IPU6 MIPI camera Raptor Lake not workingrevision 1 · captured 2026-09-28 21:29 UTC via poll

System details

  • CPU: Intel Raptor Lake (13th Gen) — also affects Tiger Lake (11th Gen) and Alder Lake (12th Gen)
  • Sensor: OmniVision OV02C10 (ACPI ID: OVTI02C1) — also likely affects OV01A10, OV08X40, HM11B1 and other IPU6 sensors
  • OS: Arch Linux / Omarchy (latest)
  • Kernel: 6.x with ipu6-drivers out-of-tree modules

What's wrong?

Built-in MIPI camera on Intel IPU6 hardware is completely broken out of the box in Omarchy:

  • Camera not visible in Chromium (Discord, Google Meet show "No camera found")
  • Camera not visible in Firefox/Zen Browser without extra config
  • wireplumber crashes (segfault in libgallium) on camera access attempts

Root causes discovered (after extensive debugging)

1. Missing AUR packages

IPU6 cameras require packages not installed by Omarchy:

intel-ipu6-camera-hal-git   # Intel HAL (AUR)
libcamera-ipu6              # libcamera fork with IPU6 support (AUR)
libcamera-ipu6-ipa          # IPA algorithms (AUR)
gst-plugin-libcamera-ipu6   # GStreamer plugin (AUR)
pipewire-libcamera          # PipeWire ↔ libcamera bridge (extra)

2. Wrong pipeline selected

libcamera defaults to the broken ipu6 HAL pipeline. Must force the simple pipeline (software ISP):

`~/.config/systemd/user/wireplumber.service.d/20-egl-vendor.conf`:

[Service]
Environment=LIBCAMERA_PIPELINES_MATCH_LIST=simple,uvcvideo
Environment=LIBCAMERA_SOFTISP_MODE=cpu
Environment=__EGL_VENDOR_LIBRARY_FILENAMES=/usr/share/glvnd/egl_vendor.d/50_mesa.json

Why each variable:
- LIBCAMERA_PIPELINES_MATCH_LIST=simple,uvcvideo — skips the broken ipu6 HAL, uses SoftwareISP
- LIBCAMERA_SOFTISP_MODE=cpu — critical for Chromium: GPU (EGL) debayering produces DMA-BUF with stride=2048 that Chromium's PipeWire buffer allocator rejects (stride mismatch vs expected 1920 → EINVAL). CPU debayering produces system memory DMA-BUF with correct compact stride.
- __EGL_VENDOR_LIBRARY_FILENAMES — forces Mesa EGL over NVIDIA EGL to prevent cross-device DMA-BUF crash in libgallium on NVIDIA+Intel hybrid systems.

3. Missing video group membership

User must be in the video group to open /dev/dri/renderD128:

sudo usermod -aG video $USER

Without this: wireplumber segfaults in DebayerEGL::debayerGPU() → libgallium crash when NVIDIA EGL tries to import Intel DMA-BUF across devices.

4. Chromium does not use PipeWire camera by default

Must add to ~/.config/chromium-flags.conf:

--enable-features=...,WebRtcPipeWireCamera
--disable-gpu-sandbox

WebRtcPipeWireCamera enables the portal camera path. --disable-gpu-sandbox is needed for the portal flow to work correctly.

5. Firefox/Zen Browser needs explicit PipeWire camera pref

`~/.config/zen/<profile>/user.js` (or Firefox user.js):

user_pref("media.webrtc.camera.allow-pipewire", true);

6. xdg-desktop-portal loses PipeWire connection on restart

After any wireplumber restart the portal shows connection error. Fix with a drop-in:

`~/.config/systemd/user/xdg-desktop-portal.service.d/auto-restart.conf`:

[Unit]
BindsTo=pipewire.service
After=pipewire.service

7. Missing sensor calibration file

libcamera falls back to uncalibrated.yaml without /usr/share/libcamera/ipa/simple/ov02c10.yaml. A minimal file based on the ov01a10 (same OmniVision family) helps:

sudo tee /usr/share/libcamera/ipa/simple/ov02c10.yaml << 'EOF'
# SPDX-License-Identifier: CC0-1.0
%YAML 1.1
---
version: 1
algorithms:
  - BlackLevel:
      black: 16
  - Awb:
  - Adjust:
  - Agc:
...
EOF

Current state after all fixes

✅ Camera visible and working in Chromium (Discord, Google Meet)
✅ Camera visible and working in Zen Browser / Firefox
✅ No more wireplumber crashes
⚠️ Image quality is poor — see below

Known remaining limitation: image quality

The OV02C10 sensor has no upstream calibration data in libcamera (intel/ipu6-drivers#431). The software ISP runs without tuned CCM, AWB convergence is unreliable in low light (hardcoded 4.0× max gain causes strong color casts). This is an upstream libcamera limitation that cannot be fixed in Omarchy config.

Help wanted

Looking for others with IPU6 hardware who have:
1. Found better ov02c10.yaml / CCM tuning values
2. Tested on other IPU6 sensors (OV01A10, OV08X40, HM11B1)
3. Ideas for packaging these fixes cleanly in Omarchy (install script, migration)
4. Experience with the hardware ISP path (intel-ipu6-camera-hal-git) that could give better image quality

Check if affected: grep -r "OVTI\|INTC\|HM11" /sys/bus/acpi/devices/*/hid 2>/dev/null

View raw text
## System details

- **CPU**: Intel Raptor Lake (13th Gen) — also affects Tiger Lake (11th Gen) and Alder Lake (12th Gen)
- **Sensor**: OmniVision OV02C10 (ACPI ID: OVTI02C1) — also likely affects OV01A10, OV08X40, HM11B1 and other IPU6 sensors
- **OS**: Arch Linux / Omarchy (latest)
- **Kernel**: 6.x with `ipu6-drivers` out-of-tree modules

## What's wrong?

Built-in MIPI camera on Intel IPU6 hardware is completely broken out of the box in Omarchy:

- Camera not visible in **Chromium** (Discord, Google Meet show "No camera found")
- Camera not visible in **Firefox/Zen Browser** without extra config
- **wireplumber crashes** (segfault in `libgallium`) on camera access attempts

## Root causes discovered (after extensive debugging)

### 1. Missing AUR packages

IPU6 cameras require packages not installed by Omarchy:

```
intel-ipu6-camera-hal-git   # Intel HAL (AUR)
libcamera-ipu6              # libcamera fork with IPU6 support (AUR)
libcamera-ipu6-ipa          # IPA algorithms (AUR)
gst-plugin-libcamera-ipu6   # GStreamer plugin (AUR)
pipewire-libcamera          # PipeWire ↔ libcamera bridge (extra)
```

### 2. Wrong pipeline selected

libcamera defaults to the broken `ipu6` HAL pipeline. Must force the `simple` pipeline (software ISP):

**`~/.config/systemd/user/wireplumber.service.d/20-egl-vendor.conf`:**
```ini
[Service]
Environment=LIBCAMERA_PIPELINES_MATCH_LIST=simple,uvcvideo
Environment=LIBCAMERA_SOFTISP_MODE=cpu
Environment=__EGL_VENDOR_LIBRARY_FILENAMES=/usr/share/glvnd/egl_vendor.d/50_mesa.json
```

Why each variable:
- `LIBCAMERA_PIPELINES_MATCH_LIST=simple,uvcvideo` — skips the broken ipu6 HAL, uses SoftwareISP
- `LIBCAMERA_SOFTISP_MODE=cpu` — **critical for Chromium**: GPU (EGL) debayering produces DMA-BUF with stride=2048 that Chromium's PipeWire buffer allocator rejects (stride mismatch vs expected 1920 → `EINVAL`). CPU debayering produces system memory DMA-BUF with correct compact stride.
- `__EGL_VENDOR_LIBRARY_FILENAMES` — forces Mesa EGL over NVIDIA EGL to prevent cross-device DMA-BUF crash in `libgallium` on NVIDIA+Intel hybrid systems.

### 3. Missing `video` group membership

User must be in the `video` group to open `/dev/dri/renderD128`:

```bash
sudo usermod -aG video $USER
```

Without this: wireplumber segfaults in `DebayerEGL::debayerGPU()` → `libgallium` crash when NVIDIA EGL tries to import Intel DMA-BUF across devices.

### 4. Chromium does not use PipeWire camera by default

Must add to `~/.config/chromium-flags.conf`:
```
--enable-features=...,WebRtcPipeWireCamera
--disable-gpu-sandbox
```

`WebRtcPipeWireCamera` enables the portal camera path. `--disable-gpu-sandbox` is needed for the portal flow to work correctly.

### 5. Firefox/Zen Browser needs explicit PipeWire camera pref

**`~/.config/zen/<profile>/user.js`** (or Firefox `user.js`):
```javascript
user_pref("media.webrtc.camera.allow-pipewire", true);
```

### 6. xdg-desktop-portal loses PipeWire connection on restart

After any wireplumber restart the portal shows `connection error`. Fix with a drop-in:

**`~/.config/systemd/user/xdg-desktop-portal.service.d/auto-restart.conf`:**
```ini
[Unit]
BindsTo=pipewire.service
After=pipewire.service
```

### 7. Missing sensor calibration file

libcamera falls back to `uncalibrated.yaml` without `/usr/share/libcamera/ipa/simple/ov02c10.yaml`. A minimal file based on the ov01a10 (same OmniVision family) helps:

```bash
sudo tee /usr/share/libcamera/ipa/simple/ov02c10.yaml << 'EOF'
# SPDX-License-Identifier: CC0-1.0
%YAML 1.1
---
version: 1
algorithms:
  - BlackLevel:
      black: 16
  - Awb:
  - Adjust:
  - Agc:
...
EOF
```

## Current state after all fixes

✅ Camera visible and working in Chromium (Discord, Google Meet)  
✅ Camera visible and working in Zen Browser / Firefox  
✅ No more wireplumber crashes  
⚠️ **Image quality is poor** — see below

## Known remaining limitation: image quality

The OV02C10 sensor has **no upstream calibration data** in libcamera ([intel/ipu6-drivers#431](https://github.com/intel/ipu6-drivers/issues/431)). The software ISP runs without tuned CCM, AWB convergence is unreliable in low light (hardcoded 4.0× max gain causes strong color casts). This is an upstream libcamera limitation that cannot be fixed in Omarchy config.

## Help wanted

Looking for others with IPU6 hardware who have:
1. Found better `ov02c10.yaml` / CCM tuning values
2. Tested on other IPU6 sensors (OV01A10, OV08X40, HM11B1)
3. Ideas for packaging these fixes cleanly in Omarchy (install script, migration)
4. Experience with the hardware ISP path (`intel-ipu6-camera-hal-git`) that could give better image quality

Check if affected: `grep -r "OVTI\|INTC\|HM11" /sys/bus/acpi/devices/*/hid 2>/dev/null`

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

Not linked to any known issue, other report or change yet.

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.

  • Out of scopeDecided by agents · verified · 2026-10-09 02:55 UTC