在 Linux 桌面系统下玩了这么久,大部分时间都是使用 Ubuntu,偶尔使用一下 Fedora。我的电脑中安装有多个 Linux 发行版,见这里《在同一个硬盘上安装多个Linux发行版及Fedora 21初体验》。在 Ubuntu 桌面系统中,安装 Nvidia 显卡驱动是分分钟的事,使用起来也一直很顺畅,见这里《桌面美化那点事儿》。然而到了 Fedora 中,则一直是好事多磨。特别是对于 Fedora 21 Workstation 版,在我的笔记本电脑上安装 Nvidia 驱动就没有一次获得好的结果。不管用哪一种方法,过程都很顺利,但是结果总是失败,总是进不了图形界面,总是出现这样的界面:

安装 Nvidia 驱动的三种方法

  在 Fedora 中安装 Nvidia 显卡驱动可谓方法众多,我这次采用了三种方法,它们分别是:

  1. 到 Nvidia 官网下载官方驱动并安装。
  2. 使用第三方源中的软件包,我这里使用了 rpmfusion 中的 akmod-nvidia 软件包。
  3. 使用 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,分别用什么工具:

  虽然最终的结局是无法进入图形界面,但是仍然可以对该安装过程进行一些总结,如下:

  1. 显卡驱动属于 Linux 内核的内核模块,安装内核模块需要懂一点内核知识;
  2. 下载 Nvidia 的驱动;
  3. 需要退出图形界面,进入字符界面,命令为systemctl set-default multi-user.target,然后重启系统;
  4. 需要安装 gcc,命令为yum install gcc
  5. 需要内核源代码,命令为yum install kernel-devel,而且每一次升级内核,都需要重新编译驱动;
  6. 禁止启动时载入 nouveau 模块,方法为修改/etc/modprobe.d目录下的配置文件;
  7. 更新 initramfs,命令为dracut --force
  8. 再次设置启动系统时进入图形界面,命令为systemctl set-default graphical.target
  9. 重启系统,命令为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 驱动以及失败后的补救方法的更多相关文章

  1. [转]Fedora 下安装NVIDIA显卡驱动(使用后无法进入图形界面)

    http://www.linuxidc.com/Linux/2014-04/100689.htm rpmfusion安装法: 相对于ATi,在Linux下安装NVIDIA就简单得多.只需要一个命令即可 ...

  2. Fedora一键安装NVIDIA显卡驱动Fedora28+

    这是一篇以前写的文章,写在CSDN的,现在不想使用CSDN了,就把笔记写在了博客源,后续考虑建立自己的博客,每一个CRUD程序员都想建立自己的博客吧,我猜是的 进入正题 rpm fusion源包含Nv ...

  3. 【科研民工笔记2】Ubuntu 16.04 安装nvidia驱动

    我的主机是2060的显卡,用的是安装在U盘中的Ubuntu,开机进入后,因为没有安装驱动,所以界面看以来比较大. 通过手动方式,成功安装驱动,最终成功的方案使用的是run文件安装的方式. 1.手动下载 ...

  4. Ubuntu16安装Nvidia驱动(GTX1060显卡)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  5. ubuntu安装nVidia驱动,遇到终端闪砾问题并解决

    安装nvidia的官方驱动之后,比起nouvean来说感觉速度快了不少. 安装该驱动很简单,但选择哪个驱动是要注意的.因为今天我试了nvidia的多个驱动后都在ubuntu下用起来并不好. 我现在的环 ...

  6. Ubuntu16.04安装NVIDIA驱动时的一些坑与解决方案

    这几天在新购置的笔记本上部署工作环境,在安装NVIDIA驱动的时候遇到了不少坑,重装了很多次,在Ubuntu论坛以及其他资料源看了很多大牛的分析,最终终于解决了一个又一个问题,过程比较艰辛,所以决定写 ...

  7. Ubuntu16笔记本双显卡安装NVIDIA驱动

    blockquote { direction: ltr; color: rgb(0, 0, 0) } blockquote.western { font-family: "Liberatio ...

  8. centos7.3安装nvidia驱动和cuda9

    一, 挂载本地源镜像 1) 下载操作系统镜像 所有服务器操作系统必须统一,本平台只支持 CentOS 7.3 1611,镜像下载地址. 2) 上传镜像到服务器 ,假设上传在 root 下 3) 建立挂 ...

  9. Linux Mint 18.1安装nvidia驱动

    硬件环境:Dell Inspiron 7557笔记本(i7,8G,GTX960M) 软件环境:Linux Mint 18.1(基于Ubuntu 16.04) 问题描述: Linux Mint 18.1 ...

随机推荐

  1. react-router 组件式配置与对象式配置小区别

    1. react-router 对象式配置 和 组件式配置    组件式配置(Redirect) ----对应---- 对象式配置(onEnter钩子) IndexRedirect -----对应-- ...

  2. Tesseract-OCR字符识别简介

    OCR(Optical Character Recognition):光学字符识别,是指对图片文件中的文字进行分析识别,获取的过程.Tesseract:开源的OCR识别引擎,初期Tesseract引擎 ...

  3. JQuery(2)

    JQuery下拉框操作: 取值赋值操作 body代码: <select id="sel"> <option value="北京">北京& ...

  4. 重新认识了下Entity Framework

    什么是Entity Framework Entity Framework是一个对象关系映射O/RM框架. Entity Framework让开发者可以像操作领域对象(domain-specific o ...

  5. 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)

    前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...

  6. android 事件分发机制详解(OnTouchListener,OnClick)

    昨天做东西做到触摸事件冲突,以前也经常碰到事件冲突,想到要研究一下Android的事件冲突机制,于是从昨天开始到今天整整一天时间都要了解这方面的知识,这才懂了安卓的触摸和点击事件的机制.探究如下: 首 ...

  7. arcgis api for js入门开发系列八聚合效果(含源代码)

    上一篇实现了demo的图层控制模块,本篇新增聚合效果,截图如下(源代码见文章底部): 聚合效果实现的思路如下: 1.map.html引用聚合包,项目已经包含进来了的聚合文件夹: <script ...

  8. SNMP简单网络管理协议

    声明:以下内容是学习谌玺老师视频整理出来(http://edu.51cto.com/course/course_id-861.html) SNMP(Simple Network Management ...

  9. Android中常见的图片加载框架

    图片加载涉及到图片的缓存.图片的处理.图片的显示等.而随着市面上手机设备的硬件水平飞速发展,对图片的显示要求越来越高,稍微处理不好就会造成内存溢出等问题.很多软件厂家的通用做法就是借用第三方的框架进行 ...

  10. GSD_WeiXin(高仿微信)应用源码

    高仿微信计划:已经实现功能 1.微信首页(cell侧滑编辑.下拉眼睛动画.下拉拍短视频.点击进入聊天详情界面) 2.通讯录(联系人字母排序.搜索界面) 3.发现(朋友圈) 4.我(界面) 待实现功能( ...