红联Linux门户
Linux帮助

Fedora 21安装Nvidia驱动以及失败后的补救方法

发布时间:2015-03-30 09:26:09来源:linux.cn作者:京山游侠

阅读目录

安装Nvidia驱动的三种方法
方法1:到Nvidia官网下载驱动并安装
安装NVIDIA官方驱动失败后的补救办法
方法2:安装第三方软件源中的软件包(rpmfusion源中的akmod-nvidia)
安装akmod-nvidia失败后的补救办法
方法3:安装Bumblebee
安装Bumblebee失败后的补救办法
Fedora 21和Nvidia驱动不对付,究竟问题出在哪里呢?


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

安装Nvidia驱动的三种方法

在Fedora中安装Nvidia显卡驱动可谓方法众多,我这次采用了三种方法,它们分别是:
到Nvidia官网下载官方驱动并安装。
使用第三方源中的软件包,我这里使用了rpmfusion中的akmod-nvidia软件包。
使用Bumblebee,Bumblebee是为解决双显卡切换问题而存在的一个开源产品,在前两个方法失败后,我以为失败的原因是我的笔记本电脑上有Nvidia GT 720M显卡和Intel集显共存,结果使用Bumblebee后,仍然出现同样的结局。


方法1:到Nvidia官网下载驱动并安装

直接访问Nvidia的官网www.nvidia.com,找到驱动程序下载的页面,然后选择自己的硬件和软件平台,以便搜索合适的驱动,如下图:
Fedora 21安装Nvidia驱动以及失败后的补救方法

选择最新的346.47版进行下载,带BETA字样的当然不考虑,如下图:
Fedora 21安装Nvidia驱动以及失败后的补救方法

下载完以后是一个NVIDIA-Linux-x86_64.346.47.run文件,可以这样运行它:
Fedora 21安装Nvidia驱动以及失败后的补救方法

运行Nvidia官方的这个安装程序需要相当强的心理素质,因为它会依次出现以下错误界面。

出错提示1:
Fedora 21安装Nvidia驱动以及失败后的补救方法

出错提示2:
Fedora 21安装Nvidia驱动以及失败后的补救方法

出错提示3:
Fedora 21安装Nvidia驱动以及失败后的补救方法

出错提示4:
Fedora 21安装Nvidia驱动以及失败后的补救方法

出错提示5:
Fedora 21安装Nvidia驱动以及失败后的补救方法


还好我的内心足够强大,我居然耐着性子一遍一遍运行这个安装程序,直到把所有的这些问题都解决。第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命令,如下图:
Fedora 21安装Nvidia驱动以及失败后的补救方法

本以为进入字符界面安装该驱动就一帆风顺了,结果发现我还是太天真。果然,第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安装Nvidia驱动以及失败后的补救方法

我怎么知道Fedora 21中更新initramfs的命令是dracut呢?这就是另外一个话题了,方法还是《玩转Linux系统的方法论》中写的方法。首先猜想建立initramfs文件或initrd文件的命令可能是mkinitramfs或者mkinitrd,然后再使用which命令找出这系统中是否有这两个命令,再然后找出它属于哪个软件包,最后再找出这个软件包的文档即可。下面看看 Ubuntu 和 Fedora 21 要重建initramfs,分别用什么工具:
Fedora 21安装Nvidia驱动以及失败后的补救方法

Fedora 21安装Nvidia驱动以及失败后的补救方法

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

显卡驱动属于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回来,重启一下就行了。如下图:
Fedora 21安装Nvidia驱动以及失败后的补救方法


方法2:安装第三方软件源中的软件包(rpmfusion源中的akmod-nvidia)

其实玩Linux,除了使用发行版官方的软件源之外,偶尔也要用用第三方的软件源,特别是对一些闭源的软件更是如此,比如各种音频、视频解码啊,Flash播放啊什么的。当然,显卡驱动也是第三方源经常收录的重量级软件了。比较出名的第三方源是fusion,这里我们使用rpmfusion,到其官方网站http://fpmfusion.org看一下,如下图:
Fedora 21安装Nvidia驱动以及失败后的补救方法

使用第三方源之前,使用yum list命令找不到和Nvidia相关的驱动,然后添加rpmfusion源,如下图:
Fedora 21安装Nvidia驱动以及失败后的补救方法

再次使用yum list搜索Nvidia的驱动,得到的结果如下图:
Fedora 21安装Nvidia驱动以及失败后的补救方法

最后,使用yum install akmod-nvidia进行安装即可。

这里说一下akmod,前面提到过,对于内核模块来说,每一次升级内核,内核模块都需要重新编译,如果每一次都手动操作的话工作量就太大了,所以需要一个自动化的工具,akmod就是这样一个工具。和akmod功能相同的工具还有dkms,这个工具我们之前见过,在Ubuntu中安装显卡驱动时就会自动安装dkms,VirtualBox虚拟机也会使用dkms管理它的内核模块。详见《Linux入门学习教程:虚拟机体验之VirtualBox篇》。

本以为使用第三方源的软件包应该可以成功的,因为软件源里面的软件往往经过测试,是比较成熟的。但是很不幸,还是失败了。


安装akmod-nvidia失败后的补救办法

这个就比较简单了,按Ctrl+Alt+F2进入另一个控制台,以root用户登录,将相应的软件包删除即可。不过需要注意的是,不仅要删除akmod-nvidia,还要删除xorg-x11-drv-nvidia。命令为yum erase akmod-nvidia xorg-x11-drv-nvidia,运行效果如下图:
Fedora 21安装Nvidia驱动以及失败后的补救方法


方法3:安装Bumblebee

连续使用两种办法安装Nvidia的驱动都失败了,我实在是不知道原因。我想,可能是因为笔记本中的双显卡吧,网络上似乎有人提到过这个问题。所以我的第3个方法就是从双显卡切换这个切入点去解决问题。

我是从Fedora的Wiki上知道Bumblebee的,不要看这个词很难拼写,如果你知道它的意思是大黄蜂你肯定就过目难忘了,之所以用这个名字是因为Nvidia官方的双显卡切换技术叫Optimus,也就是擎天柱的意思。变形金刚迷还真多啊。Bumblebee的安装过程见如下Wiki:
Fedora 21安装Nvidia驱动以及失败后的补救方法

注:以上图片上传到红联Linux系统教程频道中。

很不幸,最终还是失败了。


安装Bumblebee失败后的补救办法

这个和上一个错误的补救措施相同,按Ctrl+Alt+F2进入另一个控制台,以root用户登录,将相应的软件包删除即可。命令为yum erase bumblebee。我就不截图了。


Fedora 21和Nvidia驱动不对付,究竟问题出在哪里呢?

在网上搜索一下,发现很多人使用Fedora 21安装Nvidia的驱动都没有成功。那么错误的原因究竟是什么呢?是双显卡的问题吗?还是Linux的内核太新?或者是Nvidia驱动的版本太新?再或者,是Xorg的问题还是Gnome的问题?这些问题我没有答案。在此将我的折腾过程晒出来,欢迎大家探讨。