When configuring hardware acceleration, diagnosing missing Wi-Fi interfaces, or verifying whether proprietary GPU drivers (such as NVIDIA) have superseded open-source drivers (such as Nouveau) in Ubuntu, you must confirm which Linux kernel driver is actively managing your physical hardware. Physical PCI and PCIe devices communicate with the Linux kernel through dedicated loadable kernel modules (LKMs).
The standard tool for querying PCI bus architecture and associated kernel drivers in Linux is the lspci utility. By leveraging specific flags, you can quickly determine both the driver actively controlling a device and all alternative modules compiled into your system.
Using the lspci -k Flag to Reveal Kernel Drivers
By default, running lspci displays basic device vendor and model strings. Adding the -k (kernel) flag instructs the utility to display the driver and kernel module bindings beneath each peripheral:
- Open your terminal by pressing Ctrl + Alt + T.
- Execute the command:
lspci -k
For each hardware device connected to your motherboard, lspci will print three distinct lines of information:
- Device Identifier & Name: Shows the bus address, vendor name, and chipset model.
- Kernel driver in use: The specific driver currently bound to the device by the running Linux kernel. If this line is missing, the kernel has no active driver controlling the hardware (often indicating missing firmware or uninstalled proprietary packages).
- Kernel modules: All available drivers compiled into the kernel or installed in
/lib/modules/that declare support for that hardware’s PCI vendor and device ID.
Filtering Specific Hardware Subsystems
Because modern computers contain dozens of PCI bridges, host controllers, and system timers, piping lspci -k into grep allows you to focus immediately on critical hardware components:
1. Check Graphics Card (GPU) Drivers
To inspect your display adapter and check whether NVIDIA, AMDGPU, or Intel i915 drivers are active, run:
lspci -k | grep -EA3 'VGA|3D|Display'
Example output for an NVIDIA discrete GPU:
01:00.0 VGA compatible controller: NVIDIA Corporation GA106 [GeForce RTX 3060] (rev a1)
Subsystem: Micro-Star International Co., Ltd. [MSI] Device 3971
Kernel driver in use: nvidia
Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia
In this example, Kernel driver in use: nvidia confirms that the official proprietary NVIDIA driver is actively driving the GPU, while nouveau remains unattached.
2. Check Wireless (Wi-Fi) and Ethernet Adapters
If network connectivity is failing or you need to verify Intel or Realtek wireless firmware binding:
lspci -k | grep -EA3 'Network|Ethernet'
Example output for an Intel Wi-Fi card:
00:14.3 Network controller: Intel Corporation Alder Lake-P PCH CNVi WiFi (rev 01)
Subsystem: Intel Corporation Wi-Fi 6E AX211 160MHz
Kernel driver in use: iwlwifi
Kernel modules: iwlwifi
3. Check Audio Controllers
To inspect sound card driver bindings when troubleshooting missing microphone or speaker output:
lspci -k | grep -EA3 'Audio'
Inspecting Driver Details with modinfo
Once you identify the name from the Kernel driver in use: line, you can query detailed module metadata, such as its version, author, file path, license, and configurable parameters, using the modinfo command:
modinfo iwlwifi
This outputs the exact .ko module file path, firmware dependencies, and runtime parameters that can be passed via /etc/modprobe.d/.
Using lspci -k gives you rapid, conclusive hardware verification without parsing system log files or installing external diagnostic tools on Ubuntu.