MY WEBCAM TEST GUIDE

Webcam Not Working on Ubuntu: Diagnose Device Access

Webcam not working on Ubuntu or showing a camera busy error? Check detection, device access, app permissions and which process holds the camera, in order.

When a webcam stops working on Ubuntu, the cause usually sits in one of four layers: the system doesn't detect the camera, your user or app isn't allowed to open it, another program already has it open, or the app is pointed at the wrong video device. A "camera busy" or "device or resource busy" error points to the third layer. Something else is holding the camera, and closing that program usually fixes it. The checks below go from hardware detection up to the application, so each result tells you which layer to look at next.

The short answer

First confirm that Ubuntu sees the camera at all. Then check whether any process is already using it, and finally check the permissions of the specific app that fails. If the camera works in a basic camera app but not in a browser or video-call app, the problem is that app's permissions or input selection, not the camera. If the camera doesn't show up anywhere, look at the physical connection, the privacy controls or the driver.

Two conditions change this order. First, Snap and Flatpak apps run in a sandbox and need their own camera permission, separate from the system. On recent Ubuntu releases, Firefox is installed as a Snap by default. Second, some newer laptops use built-in MIPI cameras connected through an image processor, such as Intel's IPU6, instead of a standard USB (UVC) camera. These can fail to appear in the usual tools and may need vendor-specific support.

This guide covers video capture only. A headset or webcam microphone is a separate audio device. It is detected, permitted and selected through the sound system, not the video device nodes. A working microphone doesn't prove the camera works, and the reverse is also true.

Check 1: Physical controls and connection

Look for a physical privacy shutter, a camera on/off key or a function-key toggle. Some laptops also let you disable the camera in the firmware setup (BIOS/UEFI). For an external USB webcam, unplug it, plug it into a different port directly on the computer instead of a hub, and try again. These checks rule out the simplest causes. They don't tell you anything about software access.

Check 2: Does Ubuntu detect the camera?

Open a terminal and run the commands below. lsusb lists connected USB devices. The video device nodes are the files apps open to capture video. v4l2-ctl comes from the v4l-utils package, which you may need to install first.

lsusb
ls -l /dev/video*
sudo apt install v4l-utils
v4l2-ctl --list-devices

The results point in different directions. A camera listed in lsusb with at least one /dev/video node means the system detects it and the problem is higher up. A camera listed in lsusb with no /dev/video node suggests a driver issue, so check the kernel log next. A USB webcam missing from lsusb even after changing ports points to the cable, port or camera hardware. A built-in laptop camera may not appear in lsusb at all if it is a MIPI camera, so a missing entry there doesn't prove the hardware is faulty.

Many USB cameras create more than one /dev/video node, typically one for capture and one for metadata. If an app lets you choose between several devices with similar names, try each one. Selecting the metadata node gives no picture even though the camera is fine.

To see kernel messages about the camera, run:

sudo dmesg | grep -i -E 'uvc|video|camera'

Errors here, such as repeated disconnects or failures to set up the device, point to a driver, power or hardware problem. A clean log doesn't rule those out completely, but it does make access or application causes more likely.

Check 3: Is another program holding the camera?

This is the check for camera busy errors. A video device generally allows only one program to stream from it at a time. If a video-call app, a browser tab or a background process already has it open, the next app may get a busy error or a black preview. Replace /dev/video0 with your device from Check 2:

sudo fuser -v /dev/video0
sudo lsof /dev/video0

Both commands list processes that currently have the device open. If you see a video-call app, a browser or a camera app you forgot about, close it normally and retry. If the camera works afterwards, you've found the cause.

On releases where PipeWire manages cameras, you may also see PipeWire or WirePlumber listed. They are system services, not necessarily the program blocking your app. Don't kill them as a first step. Close your own apps first, and log out and back in if the busy error persists.

If no process is listed and the error continues, the cause is more likely permissions, a sandbox restriction or the app selecting the wrong device.

Check 4: Does your user have access to the device?

On a standard Ubuntu desktop, the logged-in user at the local session is normally given access to camera devices automatically. Membership in the video group is usually not required. You can check the device's permissions with:

ls -l /dev/video0
getfacl /dev/video0
groups

If the access list (ACL) includes your username, or your groups include video, system-level access is fine. If neither is true, for example in a remote or non-standard session, adding your user to the video group grants access after you log out and back in:

sudo usermod -aG video $USER

This change is reversible: remove your user from the group with gpasswd -d $USER video. Passing this check only proves that a normal app could open the device. Sandboxed apps have a separate permission layer, covered next.

Check 5: Separate the camera from the app

Test the camera in a basic camera app. Depending on your Ubuntu release, that may be Cheese or GNOME Snapshot. From a terminal, you can also open a preview directly if you have ffmpeg installed:

ffplay /dev/video0

If the camera works here but not in your target app, the camera, driver and system access are working. Focus on that app's permissions and its camera selection. Keep in mind that a basic camera app may itself be a Snap or Flatpak, so check how it was installed before drawing conclusions about sandboxing.

Check 6: Sandbox and app permissions

For Snap apps, including Firefox and Chromium when installed as Snaps, check whether the camera interface is connected. Replace firefox with the app's snap name:

snap connections firefox | grep camera
sudo snap connect firefox:camera

For Flatpak apps, check which devices the app is allowed to use. Replace the ID with the app's Flatpak ID:

flatpak list --app
flatpak info --show-permissions com.example.App

Some Ubuntu releases with GNOME also include a Camera page under Settings, Privacy, which controls camera access for sandboxed apps that request it through the desktop portal. The layout varies between releases. If the page exists and the camera is turned off, or the app is switched off in its list, turn it on.

Within the app itself, check two more things. In browsers, look at the site permission for the camera; a previous "Block" choice is remembered for that site. In video-call apps, check which camera is selected in the video settings, especially if you have more than one camera or several /dev/video nodes.

What to change, based on what you found

Finding | Change | How to confirm it worked
Camera missing from lsusb (USB webcam) | Try another port and cable, remove hubs, test on another computer | Camera appears in lsusb and a /dev/video node exists
In lsusb but no /dev/video node, or errors in dmesg | Reload the driver (see below) or check driver support for your model | Node appears and the camera works in a basic camera app
fuser or lsof lists another app | Close that app or browser tab, or log out and back in | Original app opens the camera without a busy error
No user access in ACL or groups | Add user to video group, then log out and back in | getfacl or groups shows access and the basic camera app works
Works in basic app, fails in a Snap or Flatpak | Connect the camera interface or grant device permission | Target app shows the preview
Works in basic app, fails in a browser site | Reset that site's camera permission and reload | Site prompts for or shows the camera
Preview is black but no errors | Select a different camera device in the app | Picture appears with the other device selected

After each change, retest the original symptom in the original app, not just in a different tool. A fix that only works in a test app hasn't solved the problem you started with.

Reloading the USB camera driver

Most USB webcams use the kernel's uvcvideo driver. Unloading and reloading it resets the driver without a reboot:

sudo modprobe -r uvcvideo
sudo modprobe uvcvideo

This disconnects every UVC camera on the system, so close all apps using a camera first. The unload step fails if a program still has the device open. A reboot achieves the same reset and is equally safe. This step doesn't apply to MIPI laptop cameras that use a different driver stack.

Driver and firmware updates

Installing the standard Ubuntu updates is the safest way to get kernel driver fixes. Avoid third-party driver scripts unless your laptop or camera vendor documents them for your Ubuntu release. For built-in cameras on recent laptops, especially those using Intel IPU6 or similar image processors, check whether your model and Ubuntu release are supported. Look at the laptop manufacturer's Linux support information or Ubuntu's hardware certification listings. Some models need specific driver packages, and support differs by release. Firmware (BIOS/UEFI) updates come from the device manufacturer and can change camera behavior. Follow their instructions, because an interrupted firmware update can leave the system unusable.

When to stop and escalate

Escalate if a USB webcam doesn't appear in lsusb on any port, or on a second computer. That points to faulty hardware, so contact the camera's manufacturer. The same applies to a built-in camera that works in another operating system but has no working /dev/video node on Ubuntu after updates. In that case, report it as a kernel bug with ubuntu-bug linux, which collects system information for the report, or contact your laptop vendor if the model is sold with Linux support. Include the output of lsusb, v4l2-ctl --list-devices and the dmesg lines from the checks above.

Exact menu names, default apps and package availability vary by Ubuntu release and desktop environment, and this guide doesn't include tested results for specific releases or camera models. Verify those details for your own system.