Webcam¶
For quite some time already, I work with Dell laptops that ship with Ubuntu pre-installed. Usually, everything works. But Dell supports an LTS release, and I want to upgrade to newer versions of Ubuntu.
That's where I end up in the messy world of open source, where many actors across the software stack all have different timelines of keeping things up-to-date.
My attempt to make sense of it all.
USB versus MIPI¶
The core of the problem is a difference between USB and MIPI webcams.
- USB
- A complete camera for the host. Provides a relatively standardised interface that provides a stream of images via a well-defined device. Image handling is done on the device. A web browser can access this directly.
- MIPI
- A set of components to be coordinated by the host. Provides a raw data stream to hardware that is handled by a Linux kernel module, and offered via a different API. Image handling is done through firmware modules on the laptop. A web browser needs to access this through a separate layer in the desktop OS.
In layers:
| USB | MIPI | MIPI |
|---|---|---|
| Browser | Browser | GNOME camera, Gstreamer |
| - | xdg-desktop-portal | - |
| PipeWire | Pipewire | - |
| - | WirePlumber (session manager) | - |
V4L2 source (/dev/video* device) |
PipeWire node (media controller, /dev/media* and /dev/video*) |
- |
| - | libspa-libcamera (PipeWire SPA plugin) | - |
| - | libcamera | libcamera |
| UVC driver | IPU6/Media drivers | IPU6/Media drivers |
| kernel | kernel | kernel |
- UVC: USB Video Class
Intel MIPI Camera Stack: Component Roles¶
2025-05-25
| Component | Purpose | Key Verification Command |
|---|---|---|
| Kernel Drivers | Low-level communication with IPU6/7 hardware (e.g., ipu6, ivsc) |
lsmod \| grep -E 'ipu6\|ivsc\|v4l2loopback' |
| Firmware | Microcode for camera signal processing | ls /lib/firmware/intel/ipu6/*.bin |
| libcamhal | Userspace HAL for format conversion and ISP tuning | apt policy libcamhal0 |
| v4l2-relayd | Bridges libcamhal output to v4l2loopback virtual device | systemctl status v4l2-relayd.service |
| v4l2loopback | Virtual video device for app compatibility (e.g., /dev/video0) |
v4l2-ctl --device=/dev/video0 --all |
| Browser/App Permissions | Grants access to virtual camera device | snap connections firefox \| grep camera |
History¶
Ever since I upgraded to Ubuntu 23.04, I have had problems with the MIPI webcam in my laptop. Sometimes I managed to get it working again, but not for 25.05 or 25.10. When I did, it usually took at least half a day of digging through forums and trying out things until I lost track of what I was doing.
In 2023, I used a separate package archive, ppa:oem-solutions-group/intel-ipu6, and managed to get it working. Back then, the IPU6 kernel driver required for the Intel MIPI webcam was "out-of-tree", and so not part of the regular Linux kernel.
Somewhere in 2025, this was supposedly resolved. But although I have my webcam partially working, I still loose track of how everything is supposed to work together. Search engines and AI platforms only offer very limited help: each web page, forum post, or AI answer addresses a slightly different combination of versions in the software stack, and actual developments are hard to map out.
It is inevitable to end up with a corpus of suggestions and advice that are often not accurate, not tailored to my situation, and not helping in creating insight.