阅读目录
在Linux桌面系统下玩了这么久,大部分时间都是使用Ubuntu,偶尔使用一下Fedora。我的电脑中安装有多个Linux发行版,见这里《在同一个硬盘上安装多个Linux发行版及Fedora 21初体验》。在Ubuntu桌面系统中,安装Nvidia显卡驱动是分分钟的事,使用起来也一直很顺畅,见这里《桌面美化那点事儿》。然而到了Fedora中,则一直是好事多磨。特别是对于Fedora 21 Workstation版,在我的笔记本电脑上安装Nvidia驱动就没有一次获得好的结果。不管用哪一种方法,过程都很顺利,但是结果总是失败,总是进不了图形界面,总是出现这样的界面:
在Fedora中安装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,分别用什么工具:
虽然最终的结局是无法进入图形界面,但是仍然可以对该安装过程进行一些总结,如下:
systemctl set-default multi-user.target
,然后重启系统;yum install gcc
;yum install kernel-devel
,而且每一次升级内核,都需要重新编译驱动;dracut --force
;systemctl set-default graphical.target
;reboot
;以上命令都以root用户的权限运行。遵循该流程,你将成功得到本文开头所示的那个错误界面。恭喜你,Fedora 21和Nvidia搭配,就是这个结局。
本次折腾最大的收获就是如何从错误中恢复,再也不是像以前那样一遇到进不了图形界面就重装系统了。方法是这样的,首先,按Ctrl+Alt+F2进入另一个控制台,以root用户登录。然后,我觉得Linux下的程序往往都会提供一点帮助,所以我用NVIDIA-Linux-x86_64-346.47.run -h
(也就是带 -h 选项)运行了一下,果然,该安装程序给出了一个帮助信息。在该帮助信息里面说,如果用 -x 选项运行该程序,就可以对该文件进行解压。然后,我就解压了,进去看了一下,然后就发现更多的帮助信息了。最后,通过运行解压目录中的nvidia-installer --uninstall
命令,我成功将Nvidia的驱动删除了。最后,dracut --force
一下让nouveau回来,重启一下就行了。如下图:
其实玩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管理它的内核模块。详见《Linux入门学习教程:虚拟机体验之VirtualBox篇》。
本以为使用第三方源的软件包应该可以成功的,因为软件源里面的软件往往经过测试,是比较成熟的。但是很不幸,还是失败了。
这个就比较简单了,按Ctrl+Alt+F2进入另一个控制台,以root用户登录,将相应的软件包删即可。不过需要注意的是,不仅要删除akmod-nvidia,还要删除xorg-x11-drv-nvidia。命令为yum erase akmod-nvidia xorg-x11-drv-nvidia
,运行效果如下图:
连续使用两种办法安装Nvidia的驱动都失败了,我实在是不知道原因。我想,可能是因为笔记本中的双显卡吧,网络上似乎有人提到过这个问题。所以我的第3个方法就是从双显卡切换这个切入点去解决问题。
我是从Fedora的Wiki上知道Bumblebee的,不要看这个词很难拼写,如果你知道它的意思是大黄蜂你肯定就过目难忘了,之所以用这个名字是因为Nvidia官方的双显卡切换技术叫Optimus,也就是擎天柱的意思。变形金刚迷还真多啊。Bumblebee的安装过程见如下Wiki:
很不幸,最终还是失败了。
这个和上一个错误的补救措施相同,按Ctrl+Alt+F2进入另一个控制台,以root用户登录,将相应的软件包删除即可。命令为yum erase bumblebee
。我就不截图了。
在网上搜索一下,发现很多人使用Fedora 21安装Nvidia的驱动都没有成功。那么错误的原因究竟是什么呢?是双显卡的问题吗?还是Linux的内核太新?或者是Nvidia驱动的版本太新?再或者,是Xorg的问题还是Gnome的问题?这些问题我没有答案。在此将我的折腾过程晒出来,欢迎大家探讨。
更多Fedora相关信息见Fedora 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=5
本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-03/115564.htm