The Handbook

    Theme
    • Guides
        • Check a system before installing FreeBSD
        • Orient a Linux administrator on FreeBSD
        • Supported FreeBSD releases
        • Choose a FreeBSD documentation and support channel
        • Move files safely without GNU mv -t
        • Update, upgrade, or update packages?
        • Upgrade 14.4 or 15.0 to FreeBSD 15.1
        • Choose packages, ports, or poudriere
        • Choose the quarterly or latest package branch
        • Choose a FreeBSD download or package mirror
        • Make a system setting persistent
        • Configure locale, keyboard, and time zone
        • Configure a serial console for recovery
        • Choose a custom kernel, module, or loader setting
        • Run a Linux binary with the compatibility layer
        • Check desktop and laptop hardware before installation
        • Choose and check a graphics driver
        • Choose Xorg or Wayland
        • Build a maintainable desktop baseline
        • Install and check a desktop browser
        • Check laptop Wi-Fi, power, and suspend
        • Check multimedia readiness
        • Choose and configure a printing stack
        • Run Windows applications with Wine
        • Snapshot and replicate a ZFS dataset
        • Choose a filesystem and storage layout
        • Operate ZFS without losing the recovery path
        • Restore files from a ZFS snapshot
        • Read ZFS pool health and run a scrub
        • Replace a failed device in a ZFS mirror
        • Replicate a ZFS dataset over SSH
        • Change PF safely on a remote host
        • Configure a narrow WireGuard tunnel
        • Plan a FreeBSD home server
        • Choose a mail server or an outgoing relay
        • Publish a network service safely
        • Choose a jail network model
        • Choose native jails or a jail manager
        • Choose a jail or a bhyve virtual machine
        • Establish a FreeBSD security baseline
        • Choose a MAC policy
        • Audit security-relevant activity
        • Start a DTrace performance investigation
    • Integrations
        • Create a first jail with Bastille
        • Compare jail managers and OCI tooling
        • Publish a Bastille service through PF
        • Mount a ZFS dataset in a Bastille jail
        • Update and upgrade Bastille jails
        • Back up and restore a Bastille jail
        • Prepare bhyve and vm-bhyve
        • Choose NFS or Samba for file sharing
        • Choose ZFS backup automation
        • Operate a signed poudriere repository
        • Manage FreeBSD configuration with Ansible or Salt
        • Run Motion with webcamd on FreeBSD
        • Design a reverse proxy, certificates, and monitoring
    • FAQ
      • Troubleshooting
          • Recover an interrupted freebsd-update run
          • Resolve a package repository or ABI mismatch
          • Diagnose the FreeBSD boot path
          • Recover with a ZFS boot environment
          • Diagnose DNS, routing, and firewall paths
          • Diagnose network mbuf exhaustion
          • Bind a service to a low port without running it as root
          • Diagnose audio output or input
          • Diagnose webcamd, cuse, and a webcam
          • Fix USB device permissions without opening every device
      • About this handbook
      • Synopsis
      • Confirm USB attachment
      • Install the diagnostic tools
      • Identify the camera through webcamd
      • Grant the intended login access
      • Start and verify the service
      • Test outside the browser
      • Recheck after topology changes
      • Primary references

      Diagnose webcamd, cuse, and a webcam

      Last reviewed
      13 August 2026
      Applies to
      15.1-RELEASE, 15.0-RELEASE, 14.4-RELEASE

      Synopsis #

      Many USB webcams reach FreeBSD applications through webcamd. The USB device must attach, webcamd must recognize it, the cuse kernel module must be loaded, a /dev/video* node must be created, and the login must have access. A browser permission prompt is a later layer.

      Test the camera with a local viewer before diagnosing a meeting site. Close the viewer before testing the browser because some devices or formats cannot be used concurrently.

      Confirm USB attachment #

      Connect the camera and list USB devices and recent kernel messages:

      $ usbconfig list
      $ dmesg | tail -100
      

      For an external camera, compare output before and after attachment. For an internal laptop camera, check firmware privacy settings and any physical shutter. If the camera does not appear as a USB device, webcamd configuration cannot create it.

      If another driver or process claims the device, record that attachment before changing anything.

      Install the diagnostic tools #

      Install webcamd and the small pwcview viewer:

      # pkg install webcamd pwcview
      

      Enable webcamd and arrange for cuse to load at startup:

      # sysrc webcamd_enable=YES
      # sysrc kld_list+=cuse
      

      Load cuse for the current boot:

      # kldload cuse
      $ kldstat | grep cuse
      

      Adding the same module name to kld_list more than once is unnecessary. Inspect the saved value with sysrc kld_list when a module already loads at boot.

      Identify the camera through webcamd #

      List the devices recognized by webcamd:

      # webcamd -l
      

      Use the exact name and serial information from this output for persistent selection. A USB bus and address such as ugen1.3 can change after reboot or after moving the camera to another port.

      Set the documented webcamd_0_flags with a unique name and, where available, serial number. This schematic value must be replaced with the exact options shown by webcamd -l:

      # sysrc webcamd_0_flags="-N Camera-name -S Camera-serial"
      

      When the device has no useful serial number, the name may be the best available match. If several identical cameras are present without serial numbers, persistent selection requires additional operational care.

      Grant the intended login access #

      The package creates a webcamd group. Add the desktop login, substituting its real name:

      # pw groupmod webcamd -m loginname
      

      End the graphical login session and log in again, then confirm membership:

      $ id
      

      Do not replace the group policy with world-writable video devices. A camera is a privacy-sensitive input device.

      Start and verify the service #

      Restart webcamd and inspect the resulting nodes:

      # service webcamd restart
      # service webcamd status
      $ ls -l /dev/video*
      

      If no /dev/video* node appears, check:

      1. cuse is loaded.
      2. webcamd -l still reports the intended device.
      3. The saved flags match its current name or serial.
      4. Service output and system logs contain no claim or format error.
      5. Another process has not claimed the device.

      Use the USB device permission guide if the node exists but its owner and group do not match the package policy.

      Test outside the browser #

      Run the documented local viewer as the desktop login:

      $ pwcview -f 30 -s vga
      

      A local image establishes that USB attachment, webcamd, cuse, the video node, permissions, and one supported format work together. It does not prove that every resolution or browser capture format works.

      Close pwcview, then open the browser and select the same camera. If the browser cannot see it, inspect:

      • the browser’s operating-system device access;
      • the browser’s saved camera choice;
      • site-specific camera permission;
      • whether another application still holds the device;
      • browser terminal output.

      The browser guide treats provider compatibility and protected capabilities as separate requirements.

      When the local camera path is stable and the goal is event recording rather than conferencing, continue with Motion and webcamd .

      Recheck after topology changes #

      Moving an external camera to another USB port can change its bus address. Re-run webcamd -l after moving it, adding another identical camera, or changing a dock. Prefer a unique name and serial match over a transient -d ugen argument.

      After a FreeBSD or webcamd update, test the local viewer before the next required meeting. Keep the webcam model, USB identifiers, webcamd package version, saved flags, and service output with any correction report.

      Primary references #

      • FreeBSD Handbook: Setting up a webcam
      • webcamd(8)
      • cuse(3)
      • usbconfig(8)
      • pw(8)

      Independent documentation. Not affiliated with or endorsed by the FreeBSD Project or the FreeBSD Foundation.

      Report a bug
      • Synopsis
      • Confirm USB attachment
      • Install the diagnostic tools
      • Identify the camera through webcamd
      • Grant the intended login access
      • Start and verify the service
      • Test outside the browser
      • Recheck after topology changes
      • Primary references