How-To:Linux 安裝 NVIDIA 顯示驅動程式

 

操作環境:

  • Fedora 30
  • NVIDIA graphics driver 440.82

 

有別於 Intel 或者 AMD 的產品,Linux 對於 NVIDIA 顯示卡的支援算是相對較複雜的情形。Linux 內核本身有提供開放原始碼的 nouveau 模組,為 NVIDIA 顯卡提供一定程度的支援。然而 nouveau 在支援能力上始終有其侷限性,包含效能及穩定性等層面均有不足。所以現實上的多數情形,其實是在 Linux 作業系統完成安裝後,隨即再安裝由 NVIDIA 官方自行維護的 Linux 顯示驅動程式,以確保桌面環境及應用程式能夠妥善運作。

 

本文流程係針對 Fedora 發行版,並且是利用由第三方套件庫所打包的安裝套件,而非使用 NVIDIA 官方發佈的安裝程式。這麼做的好處,除了使安裝流程更加簡易外,一旦驅動程式版本需要更新,也會是比較便利的。

 

主機板 UEFI 若有支援 Secure Boot,請先確認其為關閉狀態,否則 NVIDIA 的 Linux 驅動程式模組可能會需要經過簽署才能作用。而說實在話,DR 認為最直接的解決方案就是停用 Secure Boot,那不是我們一般在使用電腦時會需要的功能。

 

1. 確認所使用的顯示晶片及適用的驅動程式版本

不同的晶片世代所適用的驅動程式版本可能並不相同,因此若不清楚顯示晶片的型號,應該要先加以釐清,可用以下指令查詢:

  • lspci|grep VGA

 

在確認晶片型號後,接著便對照此頁面的資訊:Current graphics driver releases。以及其中的附錄(Appendix A)連結內,也有詳細的支援清單,會聲明各晶片型號所適用的驅動程式版本。藉此確認是否可適用於最新的驅動程式版本,或者是需要安裝較舊的版本(legacy releases)。倘若是較舊的晶片,一定得確認適用的驅動程式版本為何,否則驅動程式安裝後會是無法作用的。

 

2. 設定 DNF

DR 所使用的驅動程式套件,是來自 negativo17.orgfedora-multimedia 套件庫,因此請參照 DNF 套件庫的設定來啟用該套件庫。然而,由於該套件庫僅會收納最新的驅動程式版本,所以如果你的顯示晶片需要使用較舊的版本(例如 340xx),那麼請改為使用 RPM Fusion 套件庫,並參照其說明文件,進行驅動程式的安裝。

 

3. 安裝驅動程式

在啟用了 fedora-multimedia 套件庫後,執行以下指令便會安裝 NVIDIA 驅動程式:

  • sudo dnf install nvidia-driver nvidia-settings nvidia-driver-libs.i686

 

4. 驗證驅動程式是否順利啟用

完成前述安裝步驟後,重新開機。如果能夠順利進入桌面,那麼接著最直接的驗證方式,是執行 NVIDIA 所提供的設定工具。可以在應用程式集中找到,或者在命令列執行 nvidia-settings:

 

倘若 NVIDIA 設定工具的視窗正常彈出,未有任何錯誤,基本上就表示官方的驅動程式有順利安裝及啟用。至於其它的檢驗方式則是執行以下指令:

  • glxinfo|grep "direct rendering\|vendor"

 

若分別顯示「Yes」及「NVIDIA Corporation」,那麼也是表示驅動程式是正常運作的。

 

5. 解決畫面變換時的撕裂問題

如果螢幕在畫面變換時,容易出現上下不太連貫以致好像「撕裂」般的狀況,那麼可以在 nvidia-settings 的【X Server Display Configuration】→【Advanced...】裡,勾選【Force Full Composition Pipeline】選項,然後點選【Apply】進行套用後便會生效。

 

若是想要進行永久性的變更,則需要編輯 X11 的設定檔,最直接的方式是改用 root 權限來執行 nvidia-settings:

  • sudo nvidia-settings

 

接著在啟用該選項後,點選【Save to X Configuration File】,並將儲存路徑指向到「/etc/X11/xorg.conf」,儲存後該選項便會成為固定啟用的選項。

 

6. 重新安裝驅動程式

如果已安裝的 NVIDIA 驅動程式因不明因素而無法順利啟用(可透過先前的第四步驟加以檢驗),或許可以先單純嘗試看看將驅動程式完整移除,然後再重新安裝一次。可以使用以下指令來完成這些動作:

  • sudo dnf remove nvidia-driver
  • sudo dnf history undo last

 

7. 其它參考資料