在 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. Java多线程基础学习(一)

    1. 创建线程    1.1 通过构造函数:public Thread(Runnable target, String name){}  或:public Thread(Runnable target ...

  2. EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

    前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...

  3. .Net 分布式云平台基础服务建设说明概要

    1)  背景 建设云平台的基础框架,用于支持各类云服务的业务的构建及发展. 2)  基础服务 根据目前对业务的理解和发展方向,总结抽象出以下几个基础服务,如图所示 3)  概要说明 基础服务的发展会根 ...

  4. Hawk 4.6 并行化

    并行化 Hawk支持单机并行化,也就是使用多线程获取数据.它可以控制目前所有任务的数量,为了不给网站造成过大的压力,仅当任务池中的任务数量小于一定值后,才会插入新的任务. 你可以在数据清洗的 执行面板 ...

  5. [.NET] C# 知识回顾 - 委托 delegate (续)

    C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回 ...

  6. C++随笔:.NET CoreCLR之GC探索(4)

    今天继续来 带大家讲解CoreCLR之GC,首先我们继续看这个GCSample,这篇文章是上一篇文章的继续,如果有不清楚的,还请翻到我写的上一篇随笔.下面我们继续: // Initialize fre ...

  7. AJAX实现登录界面

    使用php跳转界面和AJAX都可实现登录界面的跳转的登录失败对的提醒.但是,php跳转的方式 需要额外加载其他界面,用户体验差.AJAX可实现当前页面只刷新需要的数据,不对当前网页进行 重新加载或者是 ...

  8. JS魔法堂:不完全国际化&本地化手册 之 理論篇

    前言  最近加入到新项目组负责前端技术预研和选型,其中涉及到一个熟悉又陌生的需求--国际化&本地化.熟悉的是之前的项目也玩过,陌生的是之前的实现仅仅停留在"有"的阶段而已. ...

  9. PLSql Oracle配置

    1.安装Oracle客户端或者服务端 2.配置环境变量 <1>.一般如果安装了Oracle客户端或者服务端的话,在环境变种的Path中有Oracle的安装路径(计算机-属性-高级系统设置- ...

  10. 学习笔记:发现一个IE版本判断的好方法

    web开发就不得不面对浏览器兼容性问题,特别是IE的兼容问题.在前端代码中经常要处理一些兼容格式,为了解决这个问题网上找了找识别浏览器版本的方法.   常规js方法 找到一个方法,还不错,可以识别出各 ...