Fedora 21 安装 Nvidia 驱动以及失败后的补救方法
在 Linux 桌面系统下玩了这么久,大部分时间都是使用 Ubuntu,偶尔使用一下 Fedora。我的电脑中安装有多个 Linux 发行版,见这里《在同一个硬盘上安装多个Linux发行版及Fedora 21初体验》。在 Ubuntu 桌面系统中,安装 Nvidia 显卡驱动是分分钟的事,使用起来也一直很顺畅,见这里《桌面美化那点事儿》。然而到了 Fedora 中,则一直是好事多磨。特别是对于 Fedora 21 Workstation 版,在我的笔记本电脑上安装 Nvidia 驱动就没有一次获得好的结果。不管用哪一种方法,过程都很顺利,但是结果总是失败,总是进不了图形界面,总是出现这样的界面:
安装 Nvidia 驱动的三种方法
在 Fedora 中安装 Nvidia 显卡驱动可谓方法众多,我这次采用了三种方法,它们分别是:
- 到 Nvidia 官网下载官方驱动并安装。
- 使用第三方源中的软件包,我这里使用了 rpmfusion 中的 akmod-nvidia 软件包。
- 使用 Bumblebee,Bumblebee 是为解决双显卡切换问题而存在的一个开源产品,在前两个方法失败后,我以为失败的原因是我的笔记本电脑上有 Nvidia GT 720M 显卡和 Intel 集显共存,结果使用 Bumblebee 后,仍然出现同样的结局。
方法1:到 Nvidia 官网下载驱动并安装
直接访问 Nvidia 的官网 www.nvidia.com,找到驱动程序下载的页面,然后选择自己的硬件和软件平台,以便搜索合适的驱动,如下图:
选择最新的 346.47 版进行下载,带 BETA 字样的当然不考虑,如下图:
下载完以后是一个 NVIDIA-Linux-x86_64.346.47.run 文件,可以这样运行它:
运行 Nvidia 官方的这个安装程序需要相当强的心理素质,因为它会依次出现以下错误界面。
出错提示1:
出错提示2:
出错提示3:
出错提示4:
出错提示5:
还好我的内心足够强大,我居然耐着性子一遍一遍运行这个安装程序,直到把所有的这些问题都解决。第 1 个出错提示是说该安装程序必须以 root 权限运行,解决这个问题比较简单,使用sudo ./NVIDIA-Linux-x86_64.346.47.run
命令运行该程序或使用su
命令先切换到 root 用户再运行该程序均可。第 2 个出错提示是说不能在图形界面下安装 Nvidia 的显卡驱动,必须退出 X Server 才行。那么怎么样才能让 Fedora 21 开机后进入字符界面呢?这个问题我在该系列博文的第一篇《玩转Linux系统的方法论》中就有过探讨。不同的 Linux 发行版进入字符界面的方式不一样,Fedora 21 使用的 init 程序是 systemd,所以其进入字符界面的方法是以 root 用户运行systemctl set-default multi-user.target
命令,如下图:
本以为进入字符界面安装该驱动就一帆风顺了,结果发现我还是太天真。果然,第 3 个出错提示很快就出现了,它告诉我们安装这个驱动还要先安装 gcc。这个问题好解决,yum install gcc
搞定。然后再运行安装程序,结果第 4 个出错提示就出来了。太 TM 让人伤心了,该提示是说要安装该驱动必须得有 Linux 内核的源代码。解决这个问题花了我一点时间,本以为yum install kernel-devel
就可以解决问题,结果发现安装的 kernel-devel 的版本和系统本来的 kernel 版本不一致,只好再来一个yum update kernel
才解决问题。
然后,该安装程序顺利运行了,成功的对 Nvidia 驱动进行了编译,产生了相应的内核模块。本以为要大功告成了,结果第 5 条错误提示来了。我勒个去!该错误提示的意思是说 nvidia.ko 模块无法成功加载,那是因为 nouveau 模块还在。要禁掉 nouveau 模块,只需要在 /etc/modprobe.d 目录下建立一个 .conf 文件,在里面写上 blacklist nouveau 即可,这件事 Nvidia 驱动的安装程序已经帮我们做了,但是依然无法阻止 nouveau 模块的加载。为什么呢?那是因为 Linux 启动时会先加载 initramfs 中的模块,如果不更新 initramfs 的话,单纯写 /etc/modprobe.d 目录下的配置文件也没有什么用。在 Fedora 21 中更新 initramfs 使用这个命令dracut --force
。
最后,使用systemctl set-default graphical.target
命令设置让系统开机时进入图形界面,然后reboot
命令重启。如下图:
我怎么知道 Fedora 21 中更新 initramfs 的命令是 dracut 呢?这就是另外一个话题了,方法还是《玩转Linux系统的方法论》中写的方法。首先猜想建立 initramfs 文件或 initrd 文件的命令可能是mkinitramfs
或者mkinitrd
,然后再使用which
命令找出这系统中是否有这两个命令,再然后找出它属于哪个软件包,最后再找出这个软件包的文档即可。下面看看 Ubuntu 和 Fedora 21 要重建 initramfs,分别用什么工具:
虽然最终的结局是无法进入图形界面,但是仍然可以对该安装过程进行一些总结,如下:
- 显卡驱动属于 Linux 内核的内核模块,安装内核模块需要懂一点内核知识;
- 下载 Nvidia 的驱动;
- 需要退出图形界面,进入字符界面,命令为
systemctl set-default multi-user.target
,然后重启系统; - 需要安装 gcc,命令为
yum install gcc
; - 需要内核源代码,命令为
yum install kernel-devel
,而且每一次升级内核,都需要重新编译驱动; - 禁止启动时载入 nouveau 模块,方法为修改
/etc/modprobe.d
目录下的配置文件; - 更新 initramfs,命令为
dracut --force
; - 再次设置启动系统时进入图形界面,命令为
systemctl set-default graphical.target
; - 重启系统,命令为
reboot
;
以上命令都以 root 用户的权限运行。遵循该流程,你将成功得到本文开头所示的那个错误界面。恭喜你,Fedora 21 和 Nvidia 搭配,就是这个结局。
安装NVIDIA官方驱动失败后的补救办法
本次折腾最大的收获就是如何从错误中恢复,再也不是像以前那样一遇到进不了图形界面就重装系统了。方法是这样的,首先,按 Ctrl+Alt+F2 进入另一个控制台,以 root 用户登录。然后,我觉得 Linux 下的程序往往都会提供一点帮助,所以我用NVIDIA-Linux-x86_64-346.47.run -h
(也就是带 -h 选项)运行了一下,果然,该安装程序给出了一个帮助信息。在该帮助信息里面说,如果用 -x
选项运行该程序,就可以对该文件进行解压。然后,我就解压了,进去看了一下,然后就发现更多的帮助信息了。最后,通过运行解压目录中的nvidia-installer --uninstall
命令,我成功将 Nvidia 的驱动删除了。最后,dracut --force
一下让 nouveau 回来,重启一下就行了。如下图:
方法2:安装第三方软件源中的软件包(rpmfusion 源中的 akmod-nvidia)
其实玩 Linux,除了使用发行版官方的软件源之外,偶尔也要用用第三方的软件源,特别是对一些闭源的软件更是如此,比如各种音频、视频解码啊,Flash 播放啊什么的。当然,显卡驱动也是第三方源经常收录的重量级软件了。比较出名的第三方源是 fusion,这里我们使用 rpmfusion,到其官方网站 http://fpmfusion.org 看一下,如下图:
使用第三方源之前,使用yum list
命令找不到和 Nvidia 相关的驱动,然后添加 rpmfusion 源,如下图:
再次使用yum list
搜索 Nvidia 的驱动,得到的结果如下图:
最后,使用yum install akmod-nvidia
进行安装即可。
这里说一下 akmod,前面提到过,对于内核模块来说,每一次升级内核,内核模块都需要重新编译,如果每一次都手动操作的话工作量就太大了,所以需要一个自动化的工具,akmod 就是这样一个工具。和 akmod 功能相同的工具还有 dkms,这个工具我们之前见过,在 Ubuntu 中安装显卡驱动时就会自动安装 dkms,VirtualBox 虚拟机也会使用 dkms 管理它的内核模块。详见《虚拟机体验之VirtualBox篇——性能强大的经典架构》。
安装玩 akmod-nvidia 之后,依然需要在 /etc/modprobe.d 中增加一个文件,在里面写上 blacklist nouveau 来禁止加载 nouveau 驱动,然后使用 dracut --force
重建 initramfs。否则 nvidia 驱动无法加载。
本以为使用第三方源的软件包应该可以成功的,因为软件源里面的软件往往经过测试,是比较成熟的。但是很不幸,还是失败了。
安装 akmod-nvidia 失败后的补救办法
这个就比较简单了,按 Ctrl+Alt+F2 进入另一个控制台,以 root 用户登录,将相应的软件包删除即可。不过需要注意的是,不仅要删除 akmod-nvidia,还要删除 xorg-x11-drv-nvidia。命令为yum erase akmod-nvidia xorg-x11-drv-nvidia
,运行效果如下图:
方法3:安装 Bumblebee
连续使用两种办法安装 Nvidia 的驱动都失败了,我实在是不知道原因。我想,可能是因为笔记本中的双显卡吧,网络上似乎有人提到过这个问题。所以我的第 3 个方法就是从双显卡切换这个切入点去解决问题。
我是从 Fedora 的 Wiki 上知道 Bumblebee 的,不要看这个词很难拼写,如果你知道它的意思是大黄蜂你肯定就过目难忘了,之所以用这个名字是因为 Nvidia 官方的双显卡切换技术叫 Optimus,也就是擎天柱的意思。变形金刚迷还真多啊。Bumblebee 的安装过程见如下 Wiki:
很不幸,最终还是失败了。
安装 Bumblebee 失败后的补救办法
这个和上一个错误的补救措施相同,按 Ctrl+Alt+F2 进入另一个控制台,以 root 用户登录,将相应的软件包删除即可。命令为yum erase bumblebee
。我就不截图了。
Fedora 21 和 Nvidia 驱动不对付,究竟问题出在哪里呢?
在网上搜索一下,发现很多人使用 Fedora 21 安装 Nvidia 的驱动都没有成功。那么错误的原因究竟是什么呢?是双显卡的问题吗?还是 Linux 的内核太新?或者是 Nvidia 驱动的版本太新?再或者,是 Xorg 的问题还是 Gnome 的问题?这些问题我没有答案。在此将我的折腾过程晒出来,欢迎大家探讨。
(京山游侠于2015-03-29发布于博客园,转载请注明出处。)
最新进展
从 Fedora 23 开始,终于可以正常安装使用 Nvidia 驱动了。使用第一种方法从官网下载安装可以成功,使用第二种方法从 rpmfusion 安装 akmod-nvidia 也可以。不管使用哪种安装方式,都需要在 /etc/modprobe.d
中增加一个文件,在里面写上 blacklist nouveau
来禁止加载 nouveau 驱动,然后使用 dracut --force
重建 initramfs。从官网下载安装驱动成功后,可以看到 Nvidia X Sever Settings 程序,而从 rpmfusion 安装 akmod-nvidia 后没有 Nvidia X Server Settings 程序,但是通过 lsmod
命令可以看到确实是成功使用 Nvidia 驱动的。
下图是我在 Fedora 24 中的截图,证明确实可以成功安装 Nvidia 驱动。
然而,并不能证明使用 Nvidia 驱动比使用 Nouveau 驱动有更高的效率,如下两图:
glxgears 的帧率是一样的。而且,使用 nouveau 驱动的时候是可以开启 framebuffer 的,使用 Nvidia 驱动就不行。还有,使用 nouveau 驱动时可以使用基于 Wayland 的 Gnome,使用 Nvidia 就不行。其实,从 Fedora 21 开始就可以使用 Wayland,但是当时运行不是很流畅,有的应用还会崩溃。现在在 Fedora 24 中,我使用 Wayland 是很顺畅的。只是没有办法来检验究竟是使用 Xorg 效率高还是 Wayland 效率高。从下图 pstree
的命令可以看出,Wayland 代替 Xorg:
(京山游侠于2016-08-19更新于博客园,转载请注明出处。)
Fedora 21 安装 Nvidia 驱动以及失败后的补救方法的更多相关文章
- [转]Fedora 下安装NVIDIA显卡驱动(使用后无法进入图形界面)
http://www.linuxidc.com/Linux/2014-04/100689.htm rpmfusion安装法: 相对于ATi,在Linux下安装NVIDIA就简单得多.只需要一个命令即可 ...
- Fedora一键安装NVIDIA显卡驱动Fedora28+
这是一篇以前写的文章,写在CSDN的,现在不想使用CSDN了,就把笔记写在了博客源,后续考虑建立自己的博客,每一个CRUD程序员都想建立自己的博客吧,我猜是的 进入正题 rpm fusion源包含Nv ...
- 【科研民工笔记2】Ubuntu 16.04 安装nvidia驱动
我的主机是2060的显卡,用的是安装在U盘中的Ubuntu,开机进入后,因为没有安装驱动,所以界面看以来比较大. 通过手动方式,成功安装驱动,最终成功的方案使用的是run文件安装的方式. 1.手动下载 ...
- Ubuntu16安装Nvidia驱动(GTX1060显卡)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- ubuntu安装nVidia驱动,遇到终端闪砾问题并解决
安装nvidia的官方驱动之后,比起nouvean来说感觉速度快了不少. 安装该驱动很简单,但选择哪个驱动是要注意的.因为今天我试了nvidia的多个驱动后都在ubuntu下用起来并不好. 我现在的环 ...
- Ubuntu16.04安装NVIDIA驱动时的一些坑与解决方案
这几天在新购置的笔记本上部署工作环境,在安装NVIDIA驱动的时候遇到了不少坑,重装了很多次,在Ubuntu论坛以及其他资料源看了很多大牛的分析,最终终于解决了一个又一个问题,过程比较艰辛,所以决定写 ...
- Ubuntu16笔记本双显卡安装NVIDIA驱动
blockquote { direction: ltr; color: rgb(0, 0, 0) } blockquote.western { font-family: "Liberatio ...
- centos7.3安装nvidia驱动和cuda9
一, 挂载本地源镜像 1) 下载操作系统镜像 所有服务器操作系统必须统一,本平台只支持 CentOS 7.3 1611,镜像下载地址. 2) 上传镜像到服务器 ,假设上传在 root 下 3) 建立挂 ...
- Linux Mint 18.1安装nvidia驱动
硬件环境:Dell Inspiron 7557笔记本(i7,8G,GTX960M) 软件环境:Linux Mint 18.1(基于Ubuntu 16.04) 问题描述: Linux Mint 18.1 ...
随机推荐
- react-router 组件式配置与对象式配置小区别
1. react-router 对象式配置 和 组件式配置 组件式配置(Redirect) ----对应---- 对象式配置(onEnter钩子) IndexRedirect -----对应-- ...
- Tesseract-OCR字符识别简介
OCR(Optical Character Recognition):光学字符识别,是指对图片文件中的文字进行分析识别,获取的过程.Tesseract:开源的OCR识别引擎,初期Tesseract引擎 ...
- JQuery(2)
JQuery下拉框操作: 取值赋值操作 body代码: <select id="sel"> <option value="北京">北京& ...
- 重新认识了下Entity Framework
什么是Entity Framework Entity Framework是一个对象关系映射O/RM框架. Entity Framework让开发者可以像操作领域对象(domain-specific o ...
- 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)
前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...
- android 事件分发机制详解(OnTouchListener,OnClick)
昨天做东西做到触摸事件冲突,以前也经常碰到事件冲突,想到要研究一下Android的事件冲突机制,于是从昨天开始到今天整整一天时间都要了解这方面的知识,这才懂了安卓的触摸和点击事件的机制.探究如下: 首 ...
- arcgis api for js入门开发系列八聚合效果(含源代码)
上一篇实现了demo的图层控制模块,本篇新增聚合效果,截图如下(源代码见文章底部): 聚合效果实现的思路如下: 1.map.html引用聚合包,项目已经包含进来了的聚合文件夹: <script ...
- SNMP简单网络管理协议
声明:以下内容是学习谌玺老师视频整理出来(http://edu.51cto.com/course/course_id-861.html) SNMP(Simple Network Management ...
- Android中常见的图片加载框架
图片加载涉及到图片的缓存.图片的处理.图片的显示等.而随着市面上手机设备的硬件水平飞速发展,对图片的显示要求越来越高,稍微处理不好就会造成内存溢出等问题.很多软件厂家的通用做法就是借用第三方的框架进行 ...
- GSD_WeiXin(高仿微信)应用源码
高仿微信计划:已经实现功能 1.微信首页(cell侧滑编辑.下拉眼睛动画.下拉拍短视频.点击进入聊天详情界面) 2.通讯录(联系人字母排序.搜索界面) 3.发现(朋友圈) 4.我(界面) 待实现功能( ...