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
      • Identify every GPU
      • Select one driver family
      • Install and enable the selected module
      • Verify kernel attachment before starting a desktop
      • Diagnose one layer at a time
      • Avoid premature configuration
      • Primary references

      Choose and check a graphics driver

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

      Synopsis #

      Desktop graphics depend first on a kernel driver for the actual GPU. Xorg, a Wayland compositor, and a desktop environment are later layers. Installing several display drivers or generating a large Xorg configuration before the kernel driver works makes failures harder to isolate.

      This guide identifies the GPU, selects the driver family, and verifies kernel attachment. It does not promise that every GPU generation or hybrid-graphics arrangement works with one recipe. Complete the hardware preflight first when an installation decision depends on graphics support.

      Identify every GPU #

      List PCI display controllers:

      $ pciconf -lv | grep -B3 display
      

      Record the vendor, device description, and numeric identifiers. A laptop may contain an integrated GPU and a discrete GPU. Determine which controller drives the internal display before disabling a device or configuring PRIME offload.

      Check whether the machine booted through UEFI or BIOS on platforms that expose this sysctl:

      $ sysctl machdep.bootmethod
      

      This matters when falling back to a system-console framebuffer: the FreeBSD Handbook directs UEFI systems to SCFB and BIOS systems to VESA. Those fallback drivers do not provide the same acceleration or Wayland capabilities as a maintained KMS driver.

      Select one driver family #

      Use the current FreeBSD graphics chapter and the device generation to choose the package and module:

      Hardware familyCurrent package familyTypical KMS moduleDecision boundary
      Intel integrated graphicsdrm-kmodi915kmsConfirm that the GPU generation appears in the current DRM support information
      AMD graphicsdrm-kmodamdgpu or radeonkmsUse the FreeBSD AMD support matrix to select between current and legacy hardware
      Current supported NVIDIA graphicsnvidia-drm-kmodnvidia-drmConfirm the exact GPU in NVIDIA’s supported-product list
      Older NVIDIA graphicsVersioned nvidia-driver packageDriver-generation dependentUse the version table in the current FreeBSD graphics chapter
      Console framebuffer fallbackxf86-video-scfb or xf86-video-vesaNot a modern DRM pathUse only after confirming boot mode and the absence of a suitable KMS driver

      Do not infer an AMD or NVIDIA legacy package from the card’s age alone. Support tables change, and a package that installs successfully can still be the wrong driver for the device.

      Install and enable the selected module #

      For a supported Intel GPU, the current documented package and startup setting are:

      # pkg install drm-kmod
      # sysrc kld_list+=i915kms
      

      For a supported current-generation AMD GPU whose support table specifies amdgpu:

      # pkg install drm-kmod
      # sysrc kld_list+=amdgpu
      

      For an NVIDIA GPU confirmed to use the current DRM package:

      # pkg install nvidia-drm-kmod
      # sysrc kld_list+=nvidia-drm
      

      The current FreeBSD procedure also enables kernel modesetting for this module in /boot/loader.conf:

      hw.nvidiadrm.modeset="1"
      

      PRIME and Wayland require that KMS path. Older NVIDIA driver generations use different modules and do not accept this line as a substitute for selecting the correct versioned package.

      These are alternatives, not a combined block. A hybrid system may need more deliberate configuration than loading all three. Follow the current official procedure for that layout.

      Reboot after enabling the selected module. Loading a graphics module into an active console can be useful during diagnosis, but a clean boot gives better evidence about startup order and firmware loading.

      Verify kernel attachment before starting a desktop #

      After reboot, confirm the release, loaded modules, DRM nodes, and boot messages:

      $ freebsd-version -kru
      $ kldstat
      $ ls -l /dev/dri
      $ dmesg | grep -Ei 'drm|i915|amdgpu|radeon|nvidia|vgapci|firmware'
      

      The expected module names depend on the selected driver. Modern DRM operation normally creates nodes beneath /dev/dri. An empty or absent directory, a firmware error, or a driver attach failure should be resolved before installing multiple desktop environments.

      Confirm that the login belongs to the video group when the selected display stack requires direct device access:

      $ id
      

      Add the login if needed, substituting its real name, then start a new login session:

      # pw groupmod video -m loginname
      

      Existing sessions do not acquire new supplementary groups automatically.

      Diagnose one layer at a time #

      Use this order when the screen remains blank or a graphical session exits:

      1. Confirm that pciconf reports the expected GPU and driver attachment.
      2. Confirm that the intended kernel module loaded and created the expected device nodes.
      3. Read the boot messages for missing firmware, unsupported device identifiers, and attach failures.
      4. Confirm video group membership in a fresh login session.
      5. Start a minimal display stack from a virtual terminal and save its complete error output.
      6. Add a display manager only after a manual session starts reliably.

      For Xorg, inspect both /var/log/Xorg.0.log and $HOME/.local/share/xorg/Xorg.0.log; the location depends on how the server was started. Lines marked (EE) are errors, while (WW) lines need to be correlated with the actual failure.

      For Wayland, collect the compositor’s terminal output or its documented log. A compositor failure is not automatically a kernel-driver failure. The Xorg or Wayland decision guide describes the different boundaries.

      Avoid premature configuration #

      Modern Xorg normally discovers the KMS device without a generated /etc/X11/xorg.conf. Create a small file under /usr/local/etc/X11/xorg.conf.d/ only when the Xorg log and official driver documentation identify a specific ambiguity.

      Do not make graphics power tunables, experimental PRIME settings, or device hints the first response to a blank screen. They can hide the original failure and create a boot-time dependency. Establish the default driver path first, then make one measured change at a time.

      After the driver works, continue with a maintainable desktop baseline . Laptop installations should also complete the suspend and Wi-Fi preflight before enabling lid-triggered suspend.

      Primary references #

      • FreeBSD Handbook: Graphics drivers
      • FreeBSD Handbook: Xorg configuration
      • FreeBSD Handbook: Wayland
      • FreeBSD AMD graphics support matrix
      • pciconf(8)
      • kldstat(8)
      • sysrc(8)
      • Xorg(1)

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

      Report a bug
      • Synopsis
      • Identify every GPU
      • Select one driver family
      • Install and enable the selected module
      • Verify kernel attachment before starting a desktop
      • Diagnose one layer at a time
      • Avoid premature configuration
      • Primary references