概述
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
再重启即可。
最后
以上就是难过柚子为你收集整理的启用NVIDIA GPU驱动后每次Linux内核更新后图形界面进不去的问题的全部内容,希望文章能够帮你解决启用NVIDIA GPU驱动后每次Linux内核更新后图形界面进不去的问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复