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

本文提供了解决Ubuntu系统内核更新后无法进入图形界面的方法,涉及禁用nouveau驱动、修改grub配置、重装NVIDIA驱动等步骤,适用于Ubuntu16.04及18.04版本。
部署运行你感兴趣的模型镜像

      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 

再重启即可。

您可能感兴趣的与本文相关的镜像

Wan2.2-I2V-A14B

Wan2.2-I2V-A14B

图生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

<think> 我们面对的是NVIDIA驱动Linux内核版本不兼容的问题。根据引用[1][2][3][5]的描述,常见症状是更新内核后出现“NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver”错误。引用[2]提到一个具体案例:Linux内核5.4.0-42-generic需要NVIDIA驱动440以上版本。引用[3]则指出有时内核过高导致所有驱动版本都不适配。引用[4]提供了卸载命令。 解决方案思路: 1. 确定当前内核版本(uname -r) 2. 检查已安装NVIDIA驱动版本(若有) 3. 根据内核版本选择合适的驱动版本(通过ubuntu-drivers devices或NVIDIA官方文档) 4. 若现有驱动不兼容,卸载旧驱动(使用引用[4]的卸载命令) 5. 安装驱动(推荐使用PPA方式,或使用官方.run文件) 6. 处理Secure Boot等潜在问题 注意:如果内核版本过高而尚无适配驱动,可能需要降级内核(但这是最后手段,一般不推荐)。 下面是具体步骤: </think> ### 解决NVIDIA驱动Linux内核版本不兼容的方法 #### 问题原因分析 当Linux内核更新后,原有NVIDIA驱动可能因未适配新内核导致兼容性问题,主要表现有: 1. `nvidia-smi`报错:"NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver" [^5] 2. 图形界面异常或无法启动 3. CUDA加速失效 4. 系统日志中出现`NVRM`相关错误 --- ### 解决方案(分步操作) #### 步骤1:确认系统环境 ```bash # 查看当前内核版本 uname -r # 查看已安装NVIDIA驱动 dkms status | grep nvidia # 检查驱动加载状态 lsmod | grep nvidia # 若无输出表示驱动未加载 ``` #### 步骤2:卸载冲突驱动(关键步骤) ```bash # 彻底卸载现有驱动[^4] sudo apt purge nvidia-* libnvidia-* sudo /usr/bin/nvidia-uninstall # 若存在官方安装驱动 sudo rm -rf /etc/X11/xorg.conf # 删除可能冲突的配置文件 # 清理残留 sudo apt autoremove sudo update-initramfs -u ``` #### 步骤3:安装匹配的驱动版本 **方法A:通过官方PPA安装(推荐)** ```bash # 1. 添加显卡驱动PPA sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt update # 2. 检测可用驱动(自动匹配内核)[^2] ubuntu-drivers devices # 3. 安装recommended版本(示例) sudo apt install nvidia-driver-535 # 替换为推荐版本号 ``` **方法B:手动安装特定版本** ```bash # 1. 查询兼容版本(参考NVIDIA官方文档) https://www.nvidia.com/Download/index.aspx # 2. 安装指定版本(示例) sudo apt install nvidia-driver-470-server # 专为旧内核优化的版本 ``` #### 步骤4:重建内核模块 ```bash # 强制重建DKMS模块[^1] sudo dkms remove -m nvidia -v $(modinfo -F version nvidia) --all sudo dkms install -m nvidia -v $(apt list --installed | grep nvidia-driver | awk -F- '{print $3}') # 更新initramfs sudo update-initramfs -u ``` #### 步骤5:处理Secure Boot(如启用) ```bash # 生成签名密钥(需交互操作) sudo mokutil --import /var/lib/dkms/mok.key sudo reboot # 重启时按提示完成密钥注册 ``` #### 步骤6:验证修复 ```bash # 检查驱动加载 nvidia-smi # 应显示GPU信息 # 测试OpenGL glxinfo | grep "OpenGL renderer" # 应显示"NVIDIA" # 检查错误日志 dmesg | grep -i nvidia # 无报错即成功 ``` --- ### 特殊情况处理 1. **内核版本过高无适配驱动** [^3]: ```bash # 降级内核(示例) sudo apt install linux-image-5.15.0-78-generic linux-headers-5.15.0-78-generic sudo grub-set-default 'Advanced options for Ubuntu>Ubuntu, with Linux 5.15.0-78-generic' sudo update-grub ``` 2. **企业服务器环境**: ```bash # 安装长期支持版本 sudo apt install nvidia-driver-470-server # 支持5.x内核 ``` 3. **DKMS编译失败**: ```bash # 安装内核头文件 sudo apt install linux-headers-$(uname -r) ``` > **重要提示**:安装完成后避免随意升级内核,可通过以下命令锁定: > ```bash > sudo apt-mark hold linux-image-generic linux-headers-generic > ``` --- ### 预防措施 1. **内核更新前**: ```bash sudo apt install dkms sudo dkms autoinstall # 自动重建驱动模块 ``` 2. **使用LTS内核**: ```bash sudo apt install linux-generic # 默认安装LTS版本 ``` 3. **定期维护**: ```bash sudo apt update sudo apt install --only-upgrade nvidia-driver-XXX # 指定驱动升级 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Arnold-FY-Chen

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

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

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

打赏作者

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

抵扣说明:

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

余额充值