ubuntu安装驱动后黑屏

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ubuntu安装驱动后黑屏相关的知识,希望对你有一定的参考价值。

强制关机,然后重新开机,在Ubuntu登录粉色界面上,选择第二个,然后进去以后选择一个括号里面带recovery的项,然后自动黑屏,然后弹出一个选择框,选择root:

接着在屏幕下部分可以看到命令行,按回车进入到自己的用户名下,输入命令卸载安装的驱动(示例为nvidia显卡)

sudo apt-get remove --purge nvidia*
sudo reboot

重启电脑,就正常了。

参考技术A 我电脑显卡是Nvidia显卡~

重启之后屏幕显示“输入不支持”,这是因为ubuntu对显卡的支持有关,需要手动添加显卡选项:nomodeset,使其支持Nvidia系列显卡

方法一

进入安装时,光标移动到"install ubuntu",按"e"进入编辑模式,进入命令行模式,找到''quite splash''然后去掉"--"后,添加“nomodeset”(依照不同显卡进行不同显卡驱动选项的添加,我们使用的是Nvidia显卡,添加nomodeset)F10安装

方法二

当安装结束后,启动系统出现黑屏

开机时按住shift不放,出现grub画面,按'''e''' 进入编辑开机指令的模式(或者开机直接按“e”), 同样找到'''quitesplash''' 并在后面加上“nomodeset”,按''F10''启动系统

方法三

开机按shift,选择“recovery model”,进入系统之后打开终端

sudo vi /etc/default/grub

按‘ℹ’进入vim的编辑模式

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
#修改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"

按“esc”,输入“ :wq! ” (有冒号) 保存退出,更新grub

sudo update-grub
在重启之前,我们发现电脑屏幕分辨率不是最佳(如果分辨率正常,则不用)

点击右上角“系统设置—>软件和更新—>附加驱动”选择使用Nvidia驱动

重启电脑。

Ubuntu16.04安装完成。

彻底解决ubuntu循环登录和显卡驱动问题

什么是循环登录

开机/重启后的登录界面,分辨率变得很低,并且输入密码后黑屏一闪而过又重新回到输入密码的界面,如此循环无法跳出,俗称“循环登录”。

为什么会循环登录

造成循环登录有多种可能的原因:

1. 显卡驱动相关原因,导致循环登录

最常见的是,内核版本和显卡驱动版本不兼容导致循环登录。 例如内核升级但没有配置支持显卡驱动。这是本文重点关注的一类原因。

也有比较少见的,独显和集显共存问题,nvidia-prime切换后可以使用:

2. 改配置文件时系统环境变量被改坏,导致循环登录

例如/etc/profile/etc/environment~/.profile~/.bashrc, ~/.bash_profile等文件中配置PATH,原本希望append一个路径,但却设置成了PATH只等于这一个路径。通常是Linux菜鸟或粗心导致。

3. 磁盘空间不足,导致循环登录

例如/var/log或/home满了。df -h可查看磁盘使用情况。

4. 输入法冲突导致

例如多个输入法共存时可能触发。

Ubuntu 登录循环问题 这篇提到fcitx和搜狗输入法的设定不正确导致的。

5. 其他

诸如检查~/.Xauthority~/.gconf等配置文件,检查和修改权限,或者干脆删除。

再例如检查~/.xsession-errors文件,检查/var/log/Xorg.0.log文件。

这类方法基本上不管用,偶尔管用也并不能让人知道先前为什么循环登录,有瞎搞的嫌疑。

还有提到“用adduser命令新建一个用户,看能不能登录进去”:
ubuntu登陆无限循环

此方法确实能够验证先前用户home目录下配置文件有问题,不过迁移用户数据也是比较不可取的。

正确的配置显卡驱动

显卡驱动和内核的关系

原理上,显卡是硬件,需要显卡驱动的正确配置,才能够被操作系统所管理使用;操作系统识别显卡驱动后,对用户态提供显卡的使用接口。

具体到Ubuntu系统,它用的是linux内核。有意或无意的更新linux内核后,重启的机器会默认加载新版内核,而如果内核与显卡驱动不兼容,就导致了循环登录

最常见的解决思路:卸载并重新安装显卡驱动。新装的驱动可以和原来版本相同,也可以是新版。然而这种做法并没有从根本上解决问题:为什么我的内核会更新?我好象并没有更新过内核?

一个合格的Linux用户,应当会查看系统日志、定位报错,并解决问题。查看了/var/log/apt/history.log,我发现了关键:

Start-Date: 2020-05-03  16:51:58
Commandline: /usr/bin/unattended-upgrade                                                                                    
Install: linux-modules-extra-4.15.0-99-generic:amd64 (4.15.0-99.100~16.04.1, automatic), linux-headers-4.15.0-99:amd64 (4.  15.0-99.100~16.04.1, automatic), linux-modules-4.15.0-99-generic:amd64 (4.15.0-99.100~16.04.1, automatic), linux-headers-4. 15.0-99-generic:amd64 (4.15.0-99.100~16.04.1, automatic), linux-image-4.15.0-99-generic:amd64 (4.15.0-99.100~16.04.1,       automatic)

没错,unattended-upgrade,这家伙意思是自动升级,在5月3日 16:51:58悄悄的安装了新版内核(4.15.0-99)

有没有办法关掉unattended-upgrade呢?有,后文介绍。

如果保持unattended-upgrade打开,能不能让显卡驱动自动适配新内核?能,而且是推荐的方式(DKMS),不过也需要一番设置。

unattended-upgrade是什么?能关闭吗?

通过man命令可以知道,unattended-upgrade在每天的cron任务(/etc/cron.daily/apt-compat)中被在随机的时间点触发使用,更新了内核。

对服务器而言,unattended-upgrade安装了新版内核,安全角度来看是一件好事因为修复了漏洞;但对于使用ubuntu做深度学习训练的人来说,这显得多此一举,帮了倒忙。即使不使用图形界面而只是用ssh远程连接使用,也会遭遇如下类似报错:

NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

而此条报错也很直白的表明了,内核版本和显卡驱动版本不兼容,显卡罢工了,深度学习训练暂停了。

关闭unattended-upgrade

对付暴力的唯一办法就是更加暴力。把unattended-upgrade关掉才能代表深度学习的正义:

sudo vim /etc/apt/apt.conf.d/10periodic

找到并修改它的取值为"0":

APT::Periodic::Unattended-Upgrade "0";

不过,关闭unattended-upgrade也只是杜绝了以后莫名其妙的被更新内核,当前已经被更新了内核而驱动版本不匹配,还是要搞一下显卡驱动。

CUDA和显卡驱动的关系

搞深度学习要用CUDA来加速训练,有时候也用来部署加速。

CUDA安装包里面带有兼容版本的显卡驱动。没错,必须搭配合适版本的显卡驱动,才能支持CUDA,否则装好的CUDA也永不上。

举例:*华公司的AI集群训练系统,物理机的显卡驱动迟迟不肯更新,导致训模师在2020年还只能用CUDA8这样落后的东西。*华的sa们都在忙什么?

说回CUDA安装包里的显卡驱动,个人不建议安装它。尽管它确实在多数情况下能让CUDA正常运行起来,但是这一版本的显卡驱动在安装的时候不会注册dkms模块,这就导致一旦更新了linux内核,重启机器后显卡驱动再次和内核不兼容,图形界面桌面进不去,CUDA用不了,深度学习训练推理都罢工。

而手动从nvidia官网下载的显卡驱动(standalone版本),是带有dkms注册支持功能的。在此倡议:Ubuntu系统下,请不要安装CUDA安装包里的显卡驱动,请到nvidia官网手动下载.run格式的显卡驱动,手动下载安装

有人会问:ppa:graphics-drivers/ppa这个仓库不香吗?用apt安装CUDA和显卡驱动不是更方便吗?

我觉得这类用户没有考虑过多个版本的CUDA共存的问题,他们也不曾遇到当急需用最近版CUDA而ppa源里的显卡驱动版本过低时的那种无奈。

正确安装显卡的姿势

获取内核相关包

sudo apt install linux-headers-$(uname -r)
sudo apt install linux-headers-generic

禁用开源驱动nouveau

新建/etc/modprobe.d/blacklist-nouveau.conf,内容:

blacklist nouveau
options nouveau modeset=0
sudo update-initramfs -u

正确的卸载显卡驱动

想要正确的安装显卡驱动,必须知道怎么正确的卸载显卡驱动。有时候使用的机器是别人之前维护的,而前任维护者也许配置的并不合理,需要先检查再按自己的风格配置:

  • .run文件安装的显卡驱动,卸载:sudo /usr/bin/nvidia-uninstall,或找到原始的.run文件,执行sudo bash ./xxx.run --uninstall

  • cuda安装包里的显卡驱动,卸载:sudo /usr/bin/nvidia-uninstall

  • apt repo下载安装的:

sudo aptitude search nvidia | grep ‘^i‘ #查看
sudo apt remove --purge nvidia-XXX #例如我是nvidia-384

正确的安装dkms依赖包

尽管standalone版本的nvidia显卡驱动已经内置了注册dkms的功能,但ubuntu16.04并不默认支持dkms。也就是说,虽然你满心欢喜的在安装显卡驱动时选择了dkms,但是某天因为unattended-upgrade更新了内核,显卡会再次罢工。

正确姿势:

sudo apt install dkms

查找和nvidia相关的dkms包:

aptitude show dkms | ag ‘nvidia‘
sudo apt install bbswitch-dkms

安装后,得到/usr/lib/dkms_autoinstaller这一可执行文件。

正确的获取显卡驱动

前面提到过,不要用CUDA安装包里的显卡驱动,它不带dkms支持会导致以后问题频发。请到官网自行下载适合版本的显卡驱动。

sudo init 3

sudo bash ./NVIDIA-Linux-x86_64-440.82.run

注意选择dkms支持,选择32位兼容。

正确的配置dkms

ls /var/lib/initramfs-tools | sudo xargs -n1 /usr/lib/dkms/dkms_autoinstaller start

这会把所有内核模块打入到所有内核中。然后重启系统即可。

如果不重启,无线网卡和CUDA可能无法使用。

参考

NVIDIA CUDA Installation Guide for Linux,全面,但不全都正确可用

解决Driver/library version mismatch,中文博客中比较深入的一篇

Command to rebuild all DKMS modules for all installed kernels?,启发了我找到dkms的正确配置方式

以上是关于ubuntu安装驱动后黑屏的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu20.04安装nvidia显卡驱动并解决重启后黑屏问题

ubuntu休眠后无法唤醒

ubuntu18登录后黑屏 按任何键无反应 只能强制关机

ubuntu 输入密码后黑屏

看这篇就够了——ubuntu扩展屏幕及装显卡驱动后黑屏问题

显卡驱动安装后黑屏怎么办?