首頁 > 軟體

Linux系統入門教學:Fedora 21安裝Nvidia驅動以及失敗後的補救方法

2020-06-16 18:03:07

在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管理它的核心模組。詳見《Linux入門學習教學:虛擬機器體驗之VirtualBox篇》。

  本以為使用第三方源的軟體包應該可以成功的,因為軟體源裡面的軟體往往經過測試,是比較成熟的。但是很不幸,還是失敗了。

安裝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的問題?這些問題我沒有答案。在此將我的折騰過程曬出來,歡迎大家探討。


IT145.com E-mail:sddin#qq.com