Skip to content

omarchy webcam picker offers unusable IPU6 raw Bayer node alongside real capture device #5722

Description

@oren

Summary

On Intel IPU6 laptops (most 11th-gen+ Intel hardware), omarchy-menu's
"With desktop + microphone audio + webcam" flow opens a webcam picker
that lists the IPU6's raw Bayer-only /dev/video0 alongside the actual
capture device (typically a v4l2loopback node fed by v4l2-relayd +
icamerasrc). Picking /dev/video0 produces a black overlay or
STREAMON: Link severed because that node only advertises raw sensor
formats. Users have to know which entry is the real camera.

Reproduction

On an IPU6/IPU7 laptop with the Intel camera HAL stack installed
(intel-ipu6-camera-bin, intel-ipu6ep-camera-hal-git, icamerasrc-git,
v4l2loopback-dkms, v4l2-relayd), v4l2-ctl --list-devices returns
two camera groups:

ipu6 (PCI:0000:00:05.0):
        /dev/video0
        /dev/video1
        ...
        /dev/video31
        /dev/media0

Built-in Camera (platform:v4l2loopback-042):
        /dev/video42

get_webcam_list collapses each group to its first device, so the
picker shows two entries:

/dev/video0   ipu6 (PCI:0000:00:05.0)
/dev/video42  Built-in Camera (platform:v4l2loopback-042)

Picking /dev/video0 opens ffplay against an output-only / raw-Bayer
node and yields a black overlay; only /dev/video42 works.

Related: omarchy-capture-screenrecording auto-detect

The auto-detect path in omarchy-capture-screenrecording's
start_webcam_overlay (around line 54) is also affected, and arguably
worse - it does:

WEBCAM_DEVICE=$(v4l2-ctl --list-devices 2>/dev/null \
  | grep -m1 "^[[:space:]]*/dev/video" | tr -d '\t')

which always picks /dev/video0 on this hardware (the first
indented /dev/video* line in the output). So --with-webcam without
--webcam-device always lands on the broken IPU6 raw node. The user
gets a black overlay with no error.

Suggested fix

Filter both paths to entries whose Device Caps include Video Capture.
Either parse v4l2-ctl --device=$dev --info, or check the udev
ID_V4L_CAPABILITIES property - IPU6 ISP nodes report Video Output /
I/O MC only, while the v4l2loopback node reports Video Capture.

On a clean IPU6 + loopback setup this collapses the picker list to a
single entry (/dev/video42) and the existing count == 1 auto-pick
path takes over. On a UVC-only laptop (current behavior), the single
/dev/video0 entry still passes the filter. No UX changes for non-IPU6
users.

Environment

  • Omarchy 3.8.0
  • Intel Core i7-1370P (Raptor Lake-P, IPU6EP)
  • Driver/HAL: intel-ipu6-dkms-git, intel-ipu6-camera-bin, intel-ipu6ep-camera-hal-git, icamerasrc-git
  • Camera surfaced via v4l2-relayd to /dev/video42 (v4l2loopback)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions