How to check the information of current installed video drivers?
My CPU usage is high when I do trivial things such as scrolling through a PDF file. So I think my video driver is not properly installed. I want to confirm that by checking the information of my currently installed video driver, such as if there’s a driver installed and what version it is. Then I could decide whether to install a new one if it is not up to date. On Windows, I could use the device manager, how to do that on Ubuntu Linux? I don’t expect a GUI solution for this. Command line will be just good enough.
7 Answers 7
In Linux, there is two parts for the video driver, the kernel part and the X server part.
- Let’s identify your hardware first. By typing lspci | grep VGA in a terminal, you should see a line with you graphic card description (even if not configured at all).
- Let’s check the correct kernel driver is loaded find /dev -group video .
- Let’s check the correct X driver is loaded glxinfo | grep -i vendor .
If you want more help, I would like the result of following commands: (Remember, never trust command line that people ask you to execute without knowing what it does.)
lspci | grep VGA lsmod | grep "kms\|drm" find /dev -group video cat /proc/cmdline find /etc/modprobe.d/ cat /etc/modprobe.d/*kms* ls /etc/X11/xorg.conf glxinfo | grep -i "vendor\|rendering" grep LoadModule /var/log/Xorg.0.log
If you copy-paste the last 4 lines in a terminal and add the result at the end of your question (edit), it will be easier to answer your question. But remember not to execute untrusted commands. Perhaps some stackoverflow trusted users could proof read them and acknowledge in comments.
The easiest way is to run
lspci -k | grep -EA3 'VGA|3D|Display'
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 530 (rev 06) Subsystem: ASUSTeK Computer Inc. HD Graphics 530 Kernel driver in use: i915 Kernel modules: i915 -- 01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 950M] (rev a2) Subsystem: ASUSTeK Computer Inc. GM107M [GeForce GTX 950M] Kernel driver in use: nvidia Kernel modules: nvidiafb, nouveau, nvidia_375_drm, nvidia_375
This command will show all video PCI devices and kernel modules installed and in use.
Only VGA is not good enough, because Nvidia mobile adapters are shown as 3D and some AMD adapters are shown as Display .
Thanks! I run command, it showed two controllers as in your example. Now how to find out what driver does what?
@Martian2020 It is unclear what you are asking. You see all drivers and which is used. You can ask a new question if you are more specific.
I meant what driver controls display output at the moment. I’ve understood glxinfo | grep «OpenGL» could be used for that.
I use this command to see what Xorg is currently using:
egrep -i " connected|card detect|primary dev|Setting driver" /var/log/Xorg.0.log
Here is an easier solution, using GUI instead of command line. on the Ubuntu desktop, choose:
System Settings > Software and updates (in the bottom) -> Other drivers (the right most tab).
This is a list of your video driver’s information.
For nvidia drivers at least, I usually use the following command in the terminal:
cat /proc/driver/nvidia/version
Which will output something similar to the following:
NVRM version: NVIDIA UNIX x86_64 Kernel Module 346.96 Sun Aug 23 22:29:21 PDT 2015
I’m running a 64bit Ubuntu 10.04 here. Here’s what I found out:
lspci will give you a list of found devices. Usually the video card is listed as «VGA controller» or somesuch, on my system it says:
01:00.0 VGA compatible controller: nVidia Corporation G92 [GeForce 9800 GTX] (rev a2)
If you meant X.org’s video driver, see /etc/X11/xorg.conf and look for Driver in Section «Device» (there might be multiple):
Section "Device" Identifier "Device0" Driver "nvidia" VendorName "NVIDIA Corporation" BoardName "GeForce 9800 GTX/9800 GTX+" EndSection Section "Device" Identifier "Device1" Driver "nvidia" VendorName "NVIDIA Corporation" BoardName "GeForce 9800 GTX/9800 GTX+" BusID "PCI:1:0:0" Screen 1 EndSection
If you need to find out the specific location of driver-file and version X.org’s using, try cat /var/log/Xorg.0.log and look for line which says something like LoadModule «‘Driver in the Device-section of xorg.conf’, in my case:
(II) LoadModule: "nvidia" (II) Loading /usr/lib/xorg/extra-modules/nvidia_drv.so (II) Module nvidia: vendor="NVIDIA Corporation" compiled for 4.0.2, module version = 1.0.0 Module class: X.Org Video Driver (II) NVIDIA dlloader X Driver 195.36.24 Thu Apr 22 19:18:54 PDT 2010 (II) NVIDIA Unified Driver for all Supported NVIDIA GPUs (II) Primary Device is: PCI 01@00:00:0
This answer only applies to older distros. The newer versions appear to have moved away from xorg.conf
X.org auto-probes everything these days so there is no xorg.conf configuration file (unless you’ve explicitly made one). *However the part about inspecting the X server log is still perfectly valid: less /var/log/Xorg.0.log
This should work with any unix-like operating system.
First to list all PCI devices, run:
-nn flag tells lspci to show PCI vendor and device codes as both numbers and names.
00:00.0 Host bridge [0600]: Advanced Micro Devices, Inc. [AMD/ATI] RS400 Host Bridge [1002:5a33] (rev 01) 00:02.0 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD/ATI] RS4xx PCI Express Port [ext gfx] [1002:5a34] 00:11.0 IDE interface [0101]: Advanced Micro Devices, Inc. [AMD/ATI] IXP SB400 Serial ATA Controller [1002:437a] (rev 80) 00:12.0 IDE interface [0101]: Advanced Micro Devices, Inc. [AMD/ATI] IXP SB4x0 Serial ATA Controller [1002:4379] (rev 80) 00:13.0 USB controller [0c03]: Advanced Micro Devices, Inc. [AMD/ATI] IXP SB4x0 USB Host Controller [1002:4375] (rev 80) 00:13.2 USB controller [0c03]: Advanced Micro Devices, Inc. [AMD/ATI] IXP SB4x0 USB2 Host Controller [1002:4373] (rev 80) 00:14.0 SMBus [0c05]: Advanced Micro Devices, Inc. [AMD/ATI] IXP SB4x0 SMBus Controller [1002:4372] (rev 81) 00:14.1 IDE interface [0101]: Advanced Micro Devices, Inc. [AMD/ATI] IXP SB4x0 IDE Controller [1002:4376] (rev 80) 00:14.2 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] IXP SB4x0 High Definition Audio Controller [1002:437b] (rev 01) 00:14.3 ISA bridge [0601]: Advanced Micro Devices, Inc. [AMD/ATI] IXP SB4x0 PCI-PCI Bridge [1002:4371] (rev 80) 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation G96 [GeForce 9500 GT] [10de:0640] (rev a1) 02:02.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL-8100/8101L/8139 PCI Fast Ethernet Adapter [10ec:8139] (rev 10)
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation G96 [GeForce 9500 GT] [10de:0640] (rev a1)
Finally run
sudo lspci -vvv -d 10de:0640
sudo and -vvv make it more verbose and helps display everything that it is able to parse. -d is for device in the format []:[]
The final command will list out all the possible capabilities and the kernel driver in use.
How to install a device driver on Linux
One of the most daunting challenges for people switching from a familiar Windows or MacOS system to Linux is installing and configuring a driver. This is understandable, as Windows and MacOS have mechanisms that make this process user-friendly. For example, when you plug in a new piece of hardware, Windows automatically detects it and shows a pop-up window asking if you want to continue with the driver’s installation. You can also download a driver from the internet, then just double-click it to run a wizard or import the driver through Device Manager.
This process isn’t as easy on a Linux operating system. For one reason, Linux is an open source operating system, so there are hundreds of Linux distribution variations. This means it’s impossible to create one how-to guide that works for all Linux distros. Each Linux operating system handles the driver installation process a different way.
Second, most default Linux drivers are open source and integrated into the system, which makes installing any drivers that are not included quite complicated, even though most hardware devices can be automatically detected. Third, license policies vary among the different Linux distributions. For example, Fedora prohibits including drivers that are proprietary, legally encumbered, or that violate US laws. And Ubuntu asks users to avoid using proprietary or closed hardware.
To learn more about how Linux drivers work, I recommend reading An Introduction to Device Drivers in the book Linux Device Drivers.
Two approaches to finding drivers
1. User interfaces
If you are new to Linux and coming from the Windows or MacOS world, you’ll be glad to know that Linux offers ways to see whether a driver is available through wizard-like programs. Ubuntu offers the Additional Drivers option. Other Linux distributions provide helper programs, like Package Manager for GNOME, that you can check for available drivers.
2. Command line
What if you can’t find a driver through your nice user interface application? Or you only have access through the shell with no graphic interface whatsoever? Maybe you’ve even decided to expand your skills by using a console. You have two options:
Check if a driver is already installed
Before jumping further into installing a driver in Linux, let’s look at some commands that will determine whether the driver is already available on your system.
The lspci command shows detailed information about all PCI buses and devices on the system:
Or with grep:
$ lscpci | grep SOME_DRIVER_KEYWORD
For example, you can type lspci | grep SAMSUNG if you want to know if a Samsung driver is installed.
The dmesg command shows all device drivers recognized by the kernel:
Or with grep:
$ dmesg | grep SOME_DRIVER_KEYWORD
Any driver that’s recognized will show in the results.
If nothing is recognized by the dmesg or lscpi commands, try these two commands to see if the driver is at least loaded on the disk:
Tip: As with lspci or dmesg, append | grep to either command above to filter the results.
If a driver is recognized by those commands but not by lscpi or dmesg, it means the driver is on the disk but not in the kernel. In this case, load the module with the modprobe command:
$ sudo modprobe MODULE_NAME
Run as this command as sudo since this module must be installed as a root user.
Add the repository and install
There are different ways to add the repository through yum, dnf, and apt-get; describing them all is beyond the scope of this article. To make it simple, this example will use apt-get, but the idea is similar for the other options.
1. Delete the existing repository, if it exists.
$ sudo apt-get purge NAME_OF_DRIVER*
where NAME_OF_DRIVER is the probable name of your driver. You can also add pattern match to your regular expression to filter further.
2. Add the repository to the repolist, which should be specified in the driver guide.
$ sudo add-apt-repository REPOLIST_OF_DRIVER
where REPOLIST_OF_DRIVER should be specified from the driver documentation (e.g., epel-list).
3. Update the repository list.
4. Install the package.
$ sudo apt-get install NAME_OF_DRIVER
5. Check the installation.
Run the lscpi command (as above) to check that the driver was installed successfully.