Operating System Guide
Test Your Webcam on Linux
Run the browser test below, then use the command-line checks underneath. On Linux the useful diagnostic sequence is different: confirm the kernel bound the device, confirm your user can read it, then confirm the browser can open it.
Live Readout
Live Linux Webcam Diagnostic Readout
- Camera:—
- Resolution:—
- Frame Rate:—
- Aspect Ratio:—
- Microphone Detected:—
These are the values your browser negotiated with the camera just now, not the numbers on the box. A difference between the two is exactly what the guidance below is for.
Confirm the kernel sees the camera
Check the device nodeRun ls -l /dev/video*. A camera bound correctly by the UVC driver appears here. Note that many cameras create two nodes — the second is usually a metadata device, not a second camera.
Check the driver bindingRun lsmod | grep uvcvideo to confirm the USB Video Class driver is loaded, and dmesg | grep -i uvc to see what the kernel reported when the device was attached.
Enumerate real capabilitiesInstall v4l-utils and run v4l2-ctl --list-devices then v4l2-ctl -d /dev/video0 --list-formats-ext. This prints every resolution and frame rate the camera genuinely supports, which is the authoritative answer when a browser reports something lower.
Permissions and group membership
The video groupDevice nodes are typically owned by the video group. Run groups to check your membership, and sudo usermod -aG video $USER to add yourself. You must log out and back in for the change to take effect.
Snap and Flatpak confinementBrowsers installed as Snap or Flatpak packages run confined and need camera access granted explicitly. For Flatpak, flatpak override --device=all for the browser resolves it; Snap uses snap connect for the camera interface.
Test outside the browser firstffplay /dev/video0, guvcview or Cheese will confirm the camera works at system level. If those fail too, the problem is below the browser and no browser setting will fix it.
Browser-specific behaviour
FirefoxCamera permission is per-site under the padlock icon, with a global list at about:preferences#privacy. Firefox on Wayland has historically had more camera edge cases than on X11, so that is worth noting if you hit unexplained failures.
Chromium and ChromePermissions live at chrome://settings/content/camera. Chromium builds from distribution repositories occasionally lack proprietary codec support, which affects recording rather than live preview.
Format negotiationSome cameras only offer high resolutions in MJPEG rather than raw YUYV. If a browser reports a low maximum, compare it against the v4l2-ctl output above to see whether the camera is being asked for the wrong format.
FAQ
Frequently Asked Questions
How do I list webcam resolutions on Linux?Install v4l-utils, then run v4l2-ctl -d /dev/video0 --list-formats-ext. This prints every format, resolution and frame rate the device actually supports, which is more reliable than what any application reports.
Why does /dev/video0 exist but the browser cannot use it?Usually a permission or confinement issue. Confirm you are in the video group with the groups command, and if your browser is a Snap or Flatpak package, grant it camera access explicitly through snap connect or flatpak override.
Why do I have two /dev/video nodes for one camera?Many UVC cameras expose a second node for metadata rather than video. Test each with v4l2-ctl or ffplay to find which one carries the actual stream.
Does my webcam need a special driver on Linux?Most webcams are USB Video Class devices handled by the in-kernel uvcvideo driver with no installation required. Confirm it is loaded with lsmod | grep uvcvideo.
Related Testing Tools
Once the camera is working, these check the things a basic preview cannot: the full diagnostics bench, microphone and room acoustics, and a ranked fix plan built from your results.
Other platforms: Windows 11 · Windows 10 · Mac · a Chromebook · iPhone Camera · Android Camera · iPad Camera