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)
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/video0alongside the actualcapture device (typically a
v4l2loopbacknode fed byv4l2-relayd+icamerasrc). Picking/dev/video0produces a black overlay orSTREAMON: Link severedbecause that node only advertises raw sensorformats. 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-devicesreturnstwo camera groups:
get_webcam_listcollapses each group to its first device, so thepicker shows two entries:
Picking
/dev/video0opens ffplay against an output-only / raw-Bayernode and yields a black overlay; only
/dev/video42works.Related:
omarchy-capture-screenrecordingauto-detectThe auto-detect path in
omarchy-capture-screenrecording'sstart_webcam_overlay(around line 54) is also affected, and arguablyworse - it does:
which always picks
/dev/video0on this hardware (the firstindented
/dev/video*line in the output). So--with-webcamwithout--webcam-devicealways lands on the broken IPU6 raw node. The usergets a black overlay with no error.
Suggested fix
Filter both paths to entries whose
Device CapsincludeVideo Capture.Either parse
v4l2-ctl --device=$dev --info, or check the udevID_V4L_CAPABILITIESproperty - IPU6 ISP nodes reportVideo Output/I/O MConly, while the v4l2loopback node reportsVideo Capture.On a clean IPU6 + loopback setup this collapses the picker list to a
single entry (
/dev/video42) and the existingcount == 1auto-pickpath takes over. On a UVC-only laptop (current behavior), the single
/dev/video0entry still passes the filter. No UX changes for non-IPU6users.
Environment
intel-ipu6-dkms-git,intel-ipu6-camera-bin,intel-ipu6ep-camera-hal-git,icamerasrc-gitv4l2-relaydto/dev/video42(v4l2loopback)