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 kernel detection
      • Check the selected default
      • Inspect mixer state
      • Check device access
      • Separate application failures
      • Avoid speculative device hints
      • Primary references

      Diagnose audio output or input

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

      Synopsis #

      An audio failure can occur at several layers: the kernel did not attach a sound device, the wrong pcm unit became the default, a mixer channel is muted, the login cannot open the device, or an application selected another output or input. Diagnose those layers in order.

      Several audio devices are normal on systems with analog sound, an internal microphone, USB audio, and HDMI or DisplayPort outputs. Do not load every sound driver or add device hints merely because pcm0 is not the desired output.

      Confirm kernel detection #

      List attached audio devices and their boot messages:

      $ cat /dev/sndstat
      $ dmesg | grep pcm
      $ kldstat | grep snd
      

      /dev/sndstat identifies each pcm unit and marks the current default. The dmesg output helps distinguish analog, microphone, USB, HDMI, and DisplayPort paths.

      If no pcm unit appears, identify the audio controller first:

      $ pciconf -lv | grep -A4 -B3 multimedia
      

      Consult sound(4) and the manual page for the attached controller. As a temporary diagnostic, the documented metadriver can load available sound drivers:

      # kldload snd_driver
      $ cat /dev/sndstat
      

      If this discovers the device, identify the specific driver and configure that driver rather than making snd_driver the permanent first choice. Loading every sound driver increases ambiguity and is not evidence that the hardware is fully working.

      Check the selected default #

      Read the default unit and compare it with /dev/sndstat:

      $ sysctl hw.snd.default_unit
      $ cat /dev/sndstat
      

      Graphics devices often attach several HDMI or DisplayPort outputs before the analog codec. To test a different known unit temporarily, substitute its pcm number:

      # sysctl hw.snd.default_unit=4
      

      Repeat the application test. If the unit is correct, make the tested sysctl persistent through /etc/sysctl.conf as described in the persistent settings guide . Do not persist a unit number until it has been checked after reboot; USB attachment order can change.

      An application can select a non-default device explicitly. Inspect its audio settings even when the base-system default is correct.

      Inspect mixer state #

      Display the controls for the default mixer:

      $ mixer
      

      Check playback volume and mute state for output problems. For microphone problems, check the recording source, recording level, and mute state. Control names vary by driver and codec, so do not copy a mixer channel name that the local mixer output does not contain.

      Change one control at a time with the syntax documented by mixer(8) , then repeat the same playback or recording test. A desktop volume widget can add another policy layer; establish whether the base mixer works before resetting desktop audio configuration.

      Check device access #

      Inspect the default and numbered DSP nodes:

      $ ls -l /dev/dsp /dev/dsp* /dev/mixer /dev/mixer*
      $ id
      

      Do not solve an access error with mode 0666. Determine which service, group, or application owns the expected access policy. The USB permissions guide explains why hotplug device modes must be scoped and persistent.

      Use fstat to see which processes already hold sound devices:

      # fstat | grep '/dev/dsp'
      

      This can reveal an audio server or application using a device unexpectedly. It does not by itself mean that concurrent access is impossible; FreeBSD virtual channels can mix multiple streams.

      Separate application failures #

      Test in increasing order of complexity:

      1. A base-system or small local playback test.
      2. The desktop’s audio control and a local media player.
      3. A browser playing ordinary unprotected media.
      4. Microphone recording in a local application.
      5. Browser microphone permission and the meeting site.

      If local audio works but a browser does not, preserve the browser’s terminal output and inspect its selected device and site permission. Reinstalling the kernel sound driver is unlikely to correct a site-level permission denial.

      After suspend and resume, repeat /dev/sndstat, the default-unit check, and a local test. A device that disappears only after resume belongs in the laptop resume evidence, not in a generic mixer workaround.

      Avoid speculative device hints #

      Audio codec pin assignments can be changed through device.hints, but the values are machine-specific and an incorrect assignment can remove working paths. Collect verbose driver information and consult snd_hda(4) before changing pins. Keep console access and a copy of the previous file.

      Do not publish another machine’s nid, cad, or pin configuration as a general fix.

      Primary references #

      • FreeBSD Handbook: Setting up sound
      • sound(4)
      • snd_hda(4)
      • mixer(8)
      • fstat(1)
      • sysctl(8)

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

      Report a bug
      • Synopsis
      • Confirm kernel detection
      • Check the selected default
      • Inspect mixer state
      • Check device access
      • Separate application failures
      • Avoid speculative device hints
      • Primary references