[ArchLinux] 安装nvidia显卡驱动

Linux安装显卡驱动一直是一个很麻烦的事,这篇文章是一个经验贴,安装nvdia驱动,并且安装cuda

1.前言

安装Linux的时候我已经做好不打游戏的打算了,nvidia 的驱动安装起来真的麻烦。最近要安装 nvidia 驱动的原因是,开始搞机器学习了。这坎还是要过的。安装过程太痛苦了,踩了很多坑,这篇博文收集了网络上的各种安装驱动的资讯,记录安装过程。

本机的系统是 ArchLinux,显卡为 NVIDIA GeForce MX250,窗体管理器为 LightDM。

命令主要都由sudo运行,或者可以直接全程以root用户执行。

2.主要参考的博客

感谢这些博客积累下来的经验

Archlinux安装NVIDIA1050Ti显卡驱动
ivo Blog - archlinux 笔记本安装nvidia显卡驱动与intel显卡驱动
gorquan’s Blog - Ubuntu下NVIDIA显卡驱动处理
依云’s Blog - NVIDIA PRIME 配置笔记

3.一些准备

3.1.关闭桌面环境

为了防止不必要的麻烦,先关闭图形界面,先按Ctrl + Alt + F2进入 tty2,然后执行

1
sudo systemctl stop lightdm

执行完后桌面服务会被关闭

3.2.禁用开源 nouveau 驱动

编辑/etc/modprobe.d/nouveau_blacklist.conf
加入

1
2
blacklist nouveau
options nouveau modeset=0

4.安装驱动

执行

1
sudo pacman -S nvidia nvidia-libgl xorg-xrandr nvidia-utils nvidia-settings nvidia-prime

其中

nvidia: nvidia 的驱动
nvidia-libgl: OpenGL的库
xorg-xrandr: 用于显示设置
nvidia-utils: NVIDIA drivers utilities
nvidia-settings: 用于配置显卡
nvidia-prime: 用于显卡的切换

5.配置

!配置的步骤比较重要,配置不当会导致黑屏,lightdm无法启动等问题

5.1.查看显卡的BusID

1
lspci | grep -E "VGA|3D"

执行此命令后会出现

1
2
00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 620 (rev 07)
01:00.0 3D controller: NVIDIA Corporation GP108BM [GeForce MX250] (rev a1)

记住00:02.001:00.0这两串数字(读者显卡的BusID可能不一样),分别是intel集显和NVIDIA独显的BusID。待会会用到。

5.2.编辑xorg.conf文件

编辑/etc/X11/xorg.conf文件,如果没有的话使用

1
sudo nvidia-xconfig

生成此文件

开始编辑文件,用习惯的文本编辑器。

1
sudo vim /etc/X11/xorg.conf

要往文件中追加这些内容

1
2
3
4
5
6
7
8
9
10
Section "Module"
Load "modesetting"
EndSection

Section "Device"
Identifier "nvidia"
Driver "nvidia"
BusID "PCI:1:0:0" #!!!这句是要改的
Option "AllowEmptyInitialConfiguration"
EndSection

BusId是根据上面用lspci指令读到的NVIDIA显卡的ID而定,比如我的是01:00.0,那就写成 "PCI:1:0:0",读者可以根据此格式更改。

5.3.配置lightdm

!如果不是使用lightdm,可以参考上面所列举的博客

编辑/etc/lightdm/display_setup.sh文件,这个文件是需要手动创建的

1
sudo vim /etc/lightdm/display_setup.sh

往文件中写入
1
2
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto

编辑/etc/lightdm/lightdm.conf文件
1
sudo vim /etc/lightdm/lightdm.conf

找到display-setup-script所在行,把注释取消,改为
1
display-setup-script=/etc/lightdm/display_setup.sh

vim用户可以使用
/display-setup-script
指令来找到这行

6.重启

1
shutdown -r now

理论上重启就能用了,如果没有进入桌面,按 Ctrl + Alt + F2进入tty2
编辑/etc/X11/xorg.conf.d/intel.conf,这个文件也是要手动创建的

1
sudo vim /etc/X11/xorg.conf.d/intel.conf

加入:
1
2
3
4
5
Section "Device"
Identifier "intel"
Driver "modesetting"
BusID "PCI:0:2:0" #!!!这句需要更改
EndSection

将集显的BusID用相应格式更改,然后重启。

7.检验

使用

1
nvidia-smi

如果出现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.100 Driver Version: 440.100 CUDA Version: 10.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce MX250 Off | 00000000:01:00.0 Off | N/A |
| N/A 37C P8 N/A / N/A | 14MiB / 2002MiB | 0% Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 732 G /usr/lib/Xorg 14MiB |
+-----------------------------------------------------------------------------+

说明驱动已经成功安装,并且正在用NVIDIA显卡运行桌面。

8.用 NVIDIA 显卡运行程序

由于系统默认使用集显运行程序,所以运行程序时还需要配置一些变量:

1
2
__NV_PRIME_RENDER_OFFLOAD=1
__GLX_VENDOR_LIBRARY_NAME=nvidia

用这些变量可以指定用 NVIDIA 显卡运行程序
为了方便起见,使用
1
alias nvrun="__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia"

这样以来就可以使用nvrun运行程序了。

比如要运行 minecraft 就可以使用

1
nvrun minecraft-launcher

进入 minecraft 后按F3可以打开调试信息,看到显卡信息为 NVIDIA Corporation,说明此时正在用独显运行。