提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
问题描述
Ubuntu20.04 重启之后,界面显示的分辨率不对,查看显卡信息出如下错误:
> nvidia-smi
NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver
重启之前没有对显卡驱动做任何操作,只是使用sudo apt-get upgrade 做了一下系统更新。
问题分析以及解决
1 分析
首先确定显卡驱动好好的没有动,且也没有更换显卡等相关硬件。然后在重启之前的针对系统的操作,仅仅是使用sudo apt-get upgrade 更新了一下系统中的相关软件。因此猜测,更新的时候更新了系统内核,而新的系统内核可能和当前的显卡驱动不匹配。使用如下命令,查看当前系统的内核和当前系统存在的所有版本的内核:
> uname -r
5.4.0-77-generic
> grep menuentry /boot/grub/grub.cfg
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
menuentry_id_option=""
export menuentry_id_option
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-fb3b617b-7620-428a-83de-08de34328e80' {
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-fb3b617b-7620-428a-83de-08de34328e80' {
menuentry 'Ubuntu, with Linux 5.4.0-77-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-77-generic-advanced-fb3b617b-7620-428a-83de-08de34328e80' {
menuentry 'Ubuntu, with Linux 5.4.0-77-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-77-generic-recovery-fb3b617b-7620-428a-83de-08de34328e80' {
menuentry 'Ubuntu, with Linux 5.4.0-74-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-74-generic-advanced-fb3b617b-7620-428a-83de-08de34328e80' {
menuentry 'Ubuntu, with Linux 5.4.0-74-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-74-generic-recovery-fb3b617b-7620-428a-83de-08de34328e80' {
menuentry 'Windows Boot Manager (on /dev/sda3)' --class windows --class os $menuentry_id_option 'osprober-efi-14CC-72D3' {
menuentry 'UEFI Firmware Settings' $menuentry_id_option 'uefi-firmware' {
发现除了当前所在的内核还有另外一个版本(相对旧一点的)的内核:5.4.0-74-generic。
因此为了验证是否和内核更新相关,重启系统在grub启动界面选择Ubuntu Advance Option,并以低版本的内核启动。结果重启后界面的分辨率恢复正常,nvidia-smi 也能查到显卡驱动相关信息。
2 解决
确定了问题所在,那么解决方法主要是两种:- 删除卸载老版本的显卡驱动,并在新内核的基础上重新安装显卡驱动
- 继续使用安装显卡驱动时的内核版本5.4.0-74-generic,卸载新更新的内核版本5.4.0-77-generic,然后禁止内核更新,一直保持当前内核
> # sudo vim /etc/default/grub
# 查看当前已安装的内核
> dpkg --get-selections| grep linux-image
linux-image-5.4.0-74-generic install
linux-image-5.4.0-77-generic install
linux-image-generic install
# 卸载相应内核
> sudo apt-get remove linux-image-5.4.0-77-generic
# 禁止内核更新,保持当前内核不更新
> sudo apt-mark hold linux-image-5.4.0-74-generic
> sudo apt-mark hold linux-headers-5.4.0-74-generic
> sudo apt-mark hold linux-modules-extra-5.4.0-74-generic