启用NVIDIA GPU驱动后每次Linux内核更新后图形界面进不去的问题

      Ubuntu的内核更新比较频繁,自动更新打开后,如果你disable掉了系统默认的nouveau驱动启用了NVIDIA GPU卡对应的驱动(具体步骤参见我的AI之路(10)--如何在Linux下安装CUDA和cuDNN),可能经常遇到内核更新后在机器重启后发现登录界面的字体和图标变得不正常地超大而且输入登录口令后屏幕一闪又回到了登录界面,这说明NVIDIA GPU的驱动没有被加载,系统仍然试图使用nouveau驱动(具体大致原因下面分析),可是nouveau驱动已经被禁止了,所以图形界面进不去了。

    Ubuntu16.04可以采取下面的步骤予以解决:

     (1) 按CTRL+ALT+F2进入文本模式,然后登录进入,然后以su身份编辑grub文件如下:

sudo vi /etc/default/grub

              #GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash”

              GRUB_CMDLINE_LINUX_DEFAULT=”text”

              GRUB_TERMINAL=console

            然后执行下面的命令更新/boot/grub/下的grub.cfg和grubenv

            sudo update-grub

    (2)执行下面的命令修改graphical.target为multi-user.target初始化模式:

             sudo systemctl set-default multi-user.target

      (3) 然后重启进入文本模式, 重新安装NVIDIA GPU对应的驱动即可(假设驱动安装程序./NVIDIA-LINUX-x86_64-410.93.run从nvidia网站上下载后保存在~/Download下):

             

           cd  ~/Download

           sudo ./NVIDIA-LINUX-x86_64-410.93.run  --no-opengl-files   

#当你机器上有集成显卡(Intel HD)和独立显卡(例如NVIDIA GForce之类)时,不要安装opengl文件(加参数项 --no-opengl-files),否则也会在重启动后进不了图形界面

     (4)然后把/etc/default/grub文件改回原样,并执行下面的命令切换回图形界面的初始化模式:

           update-grub

           sudo systemctl set-default graphical.target 

然后重启机器即可登录进入图形界面了。

      更新Linux内核后进入不了图形界面,原因应该是系统更新后默认加载使用nouveau驱动,因为把nouveau驱动disable掉的配置文件是不可能出现在官方的initrd.img.*  (Ubuntu的ram disk文件)或initramfs-*(Fedora的ram disk文件)中的,需要手工更新它们,上面的步骤中,进入文本界面后重装NVIDIA驱动时会重新编译Linux内核的用于GPU的kernel module并安装,并且编译内核最后make install会根据当前文件系统环境重新生成ram disk文件initrd.img.*或initramfs-* ,这样就实现了在新生成的ram disk文件系统里把nouveau给disable掉了,所以如果你已经安装过一次NVIDIA驱动(NVDIA-LINUX-*.run)不需要安装新版的NVIDIA驱动的话,那么每次解决内核更新后图形界面进不去的问题时,可执行安装NVIDIA驱动命令:

      sudo ./NVIDIA-LINUX-x86_64-410.93.run  --no-opengl-files -K

以-K或--kernel-module-only这样的模式安装只需重新安装GPU驱动的kernel module文件,不用重新安装GPU驱动了,可以更快完成安装。 

对于每次更新kernel后都需要重新安装NVIDIA GPU驱动才能正常使用图形界面这点确实很讨厌,有人试用了加--dkms选项来安装驱动企图解决这个问题:

    sudo ./NVIDIA-LINUX-x86_64-410.93.run  --no-opengl-files --dkms

 我觉得光这个选项还不能解决的原因是没有更新ram disk文件,所以,除了安装驱动时加--dkms选项以注册驱动的源码,以让每次kernel更新时能自动编译和安装NVIDIA GPU对于的kernel module外(对于不安装新版驱动时,这样做其实没有意义),还需执行命令更新ram disk file以让nouveau被disable掉的配置信息能被更新到initrd.img中:

   sudo update-initramfs -u

这样才能保证系统在启动时使用正确的NVIDIA GPU驱动。

关于--dkms的作用,驱动安装程序里是这么说明的:

     nvidia-installer can optionally register the NVIDIA kernel module sources, if installed, with DKMS, then build and
    install a kernel module using the DKMS-registered sources. This will allow the DKMS infrastructure to automatically
    build a new kernel module when changing kernels
.  During installation, if DKMS is detected, nvidia-installer will
    ask the user if they wish to register the module with DKMS; the default response is 'no'.  This option will bypass the
    detection of DKMS, and cause the installer to attempt a DKMS-based installation regardless of whether DKMS is present.

 

多说一下,安装NVIDIA驱动还可以用其他办法:

安装的方式还可以有以下三种:

  • 使用驱动管理器图形界面安装(图形化界面安装时无需手工disable掉nouveau)
  • sudo apt-get install nvidia*
  • 使用ubuntu-drivers安装   

但是安装前最好执行

    sudo apt-get remove --purge nvidia*

以卸载清理旧版本文件,上面的安装方式不能清理那些文件,另外如果GPU卡比较新,上面的仓库式安装方式可能会给你安装与GPU卡不匹配的的低版本驱动导致GPU用不了,所以手工去nvidia网上下载对应的驱动程序然后按照前面的步骤手工执行是最可靠的。

对于Ubuntu18.04,非常简单,只需执行:

 sudo systemctl set-default multi-user.target

无需其他任何改动,然后重启后按照CUDA(CUDA10.1开始,安装方式有了变化,不再包含opengl,无需再加--no-opengl-files选项):

sudo ./NVIDIA-LINUX-x86_64-418.67.run

安装完后,执行

sudo systemctl set-default graphical.target 

再重启即可。

<think>好的,我现在需要帮助用户解决在Ubuntu系统中“软件和更新”里的“附加驱动”不显示NVIDIA显卡驱动问题。根据用户提供的引用内容,我需要先理解可能的原因,然后给出解决方案。首先,引用[1]提到安装驱动前需要检查系统硬件和显卡信息,这可能包括确认显卡型号和系统架构。引用[2]指出附加驱动更新驱动未生效的问题,可能涉及驱动版本兼容性、内核模块加载失败或Secure Boot的影响。 首先,用户的问题是附加驱动列表中没有显示NVIDIA驱动选项。常见原因可能包括:1. 系统未检测到兼容的NVIDIA显卡;2. 软件源未正确配置,导致无法获取驱动列表;3. 需要手动添加专有驱动仓库;4. Secure Boot启用导致驱动无法加载;5. 之前安装的驱动残留冲突。 接下来,我需要根据这些可能的原因,逐步提供解决方案。第一步是确认显卡是否被识别,使用lspci命令检查。如果显卡未被识别,可能是硬件问题。第二步是更新软件源,确保能够获取到驱动信息。第三步是添加专有驱动PPA,如Ubuntu默认源可能不包含最新驱动。第四步是检查Secure Boot状态,若启用则需要禁用或配置MOK。第五步是清除旧驱动残留,确保新驱动正确安装。最后,如果所有步骤失败,建议手动下载驱动安装。 需要注意命令的正确性,比如update-pciids可能需要安装pciutils,或者用户权限问题,比如使用sudo。另外,手动安装驱动时需要进入TTY模式,关闭图形界面,这可能对新手用户有难度,需要详细说明。同时,提醒用户Secure Boot的影响,避免驱动签名问题导致加载失败。 最后,生成相关问题需要考虑用户可能的后续疑问,比如如何验证驱动是否生效,如何切换不同版本驱动,如何解决安装后的黑屏问题,以及如何彻底卸载旧驱动等。这些相关问题可以帮助用户进一步解决问题,避免重复提问。</think>### 分步解决方案 #### 步骤1:确认显卡识别与系统兼容性 1. 打开终端,输入以下命令检查NVIDIA显卡是否被系统识别: ```bash lspci | grep -i nvidia ``` 如果无输出,可能是硬件连接问题或系统未正确识别显卡[^1]。 2. 检查系统架构和内核版本: ```bash uname -m # 确认是x86_64还是arm架构 uname -r # 查看当前内核版本 ``` #### 步骤2:更新软件源与系统组件 1. 更新软件包列表并升级系统: ```bash sudo apt update && sudo apt upgrade -y ``` 2. 安装必要的依赖: ```bash sudo apt install build-essential dkms linux-headers-$(uname -r) ``` #### 步骤3:手动添加专有驱动仓库 1. 添加官方显卡驱动PPA(适用于Ubuntu 22.04/24.04): ```bash sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt update ``` 2. 查看可用驱动列表: ```bash ubuntu-drivers devices ``` 如果此时仍无输出,尝试强制刷新PCI设备数据库: ```bash sudo update-pciids ``` #### 步骤4:处理Secure Boot冲突 1. 检查Secure Boot状态: ```bash mokutil --sb-state ``` 如果显示`SecureBoot enabled`,需执行: ```bash sudo apt install shim-signed sudo reboot # 重启时进入MOK管理界面注册密钥 #### 步骤5:清除旧驱动残留 1. 完全卸载现有NVIDIA组件: ```bash sudo apt purge *nvidia* *cuda* *cudnn* sudo apt autoremove ``` 2. 删除残留配置文件: ```bash sudo rm -rf /etc/X11/xorg.conf ``` #### 步骤6:强制安装推荐驱动 1. 通过命令行指定驱动安装: ```bash sudo ubuntu-drivers autoinstall ``` 2. 或手动选择版本(以525版本为例): ```bash sudo apt install nvidia-driver-525 ``` #### 步骤7:验证驱动加载 1. 重启后检查驱动状态: ```bash nvidia-smi # 应显示GPU信息 glxinfo | grep "OpenGL renderer" # 应显示NVIDIA型号 ``` 2. 检查内核模块加载: ```bash lsmod | grep nvidia ``` ### 终极方案:手动安装.run驱动 若上述步骤无效,从[NVIDIA官网](https://www.nvidia.com/Download/index.aspx)下载对应驱动: ```bash sudo telinit 3 # 进入TTY chmod +x NVIDIA-Linux-*.run sudo ./NVIDIA-Linux-*.run --no-opengl-files ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arnold-FY-Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值