Linux

在我的舊筆記型電腦或台式機上,NVidia 驅動程序無法正常工作?

  • September 29, 2020

我有一台較舊的 PC,並在其上安裝了 Linux 以賦予它新的生命。它有一個遊戲 gpu,但它現在執行遊戲的速度幾乎沒有。因此,我讀到您需要專有的 nvidia 驅動程序,nouveau因為 nvidia 鎖定了他們的產品,因此該驅動程序無法快速執行 gpu。

我已經安裝了作業系統的nvidia-drivers軟體包,但現在連我的桌面都無法正常執行!

或者,在另一種情況下,我的電腦在安裝 nvidia 驅動程序後可以正常執行 linux,但是當我最近安裝更新時,它現在甚至不再執行桌面。發生了什麼?

問題:您必須在 Linux 上手動管理驅動程序版本

在 Windows 環境中,您可以使用 nvidia 自己的工具安裝驅動程序,或者讓 Windows 處理事情,這通常會自動選擇正確的版本。在 Linux 中,軟體包維護者創建了將各種版本的 Nvidia 驅動程序集成到核心中的軟體包(驅動程序是核心模組)。所以在這裡你需要自己選擇正確的版本。大多數發行版都有一個non-free儲存庫,其中包含用於其核心的預編譯 nvidia 驅動程序 blob,這就是該nvidia軟體包的內容。

所以,你安裝了錯誤的驅動程序。首先,我們必須拯救桌面。如果它不能在桌面上正常執行,你的機器可能仍然執行 VGA 模式,所以讓我們將系統的執行級別更改為 3。

如何更改執行級別和解除安裝

當您在引導過程中進入“grub”螢幕時,按箭頭鍵之一在選擇螢幕上停止。如果您有一個啟動速度非常快的系統,這可能會一閃而過。在這種情況下,您可以按住SHIFT此處。點擊e編輯命令。向下滾動到啟動 linux 核心的命令。通常這是一行以

linux vmlinuz-

它通常由一行開始initramfs。點擊 滾動到 linux 行的末尾End,然後添加一個空格,後跟數字3。這應該將您引導到控制台。使用包管理器 cli 解除安裝從該命令行安裝的包。例子;

sudo apt-get remove <package-name> && sudo apt-get autoremove
sudo yum remove <package-name>
sudo pacman -Rs <package-name>

或諮詢包管理器 Rosetta

如何安裝正確的版本

您將需要知道您的 GPU 版本。如果您已經知道這一點,請跳過此步驟。否則,執行

lspci -v | grep -i 'vga\|3d\|2d'

在一個終端。它應該輸出一個包含 GPU 模型的字元串。如果它不夠有用,您可以記下輸出開頭的數字(PCI 地址)並使用手動查詢

lspci -v -s 02:00.0 

(數字將根據電腦中的確切主機板以及連接方式而有所不同)。

接下來,在Nvidia 的 legacy list 中查找您需要的版本。下表還列出了一些常見的 gpu 版本(粗略地說,有些代包含更名,實際上是上一代的一部分,因此可能需要較舊的驅動程序)。然後檢查該版本是否仍受支持。截至目前(2020 年 9 月),該390.xx系列是最新支持的驅動程序。如果您的 gpu 需要較早的版本,您還需要具有較舊的核心和 X.org 版本才能正常工作。為什麼?因為核心會隨著每個新版本的發布而變化,而 NVidia 本質上會修補核心程式碼。因此,要保持其專有驅動程序正常執行,NVidia 必須不斷更新這些驅動程序。

請參閱下表。注意:帶有?標記的條目是基於發布日期的猜測,官方文件不可用,因此較新的版本可能會起作用。需要研究來檢查哪些版本將執行。

+----------------+----------------+---------------+-------------------------+
| Nvidia version | Kernel version | X.Org version |          GPUs           |
+----------------+----------------+---------------+-------------------------+
| 390.xx         | all            | all           | 3xx/4xx/5xx/6xx/7xx     |
| 340.xx         | 5.4            | 1.20          | 8xxx/9xxx/2xx/3xxM/405M |
| 304.xx         | 4.13           | 1.19          | 6xxx/7xxx               |
| 173.14.xx      | 4.2?           | 1.15          | 5xxx                    |
| 96.43.xx       | 2.6?           | 1.12          | 2MX/3/4                 |
| 71.86.xx       | 2.6?           | 1.12?         | Riva TNT/Geforce 1      |
+----------------+----------------+---------------+-------------------------+

您還可以在此處查看發布日期。嘗試使用早於該日期的核心,但在限制範圍內盡可能使用新核心。因此,如果圖形驅動程序在 2013 年 12 月發布了最新版本,請嘗試使用 2013 年幾個月前的核心。

如果您找到了正確的核心版本,現在我們要降級發行版:安裝與此核心版本匹配的正確發行版版本。或者,某些發行版允許安裝/保留軟體包。您希望將 X.org 和 linux 核心保留到列出的版本。通常還為特定的 X.org 和核心版本提供包。例如,一個X-1.19包,它保持最新1.19版本。

根據您的包管理器,這些名稱會有所不同。最後,使用包管理器安裝正確版本的 nvidia 驅動程序包。

直接安裝驅動

  1. 直接從 NVidia下載您需要的驅動程序版本。

確保版本匹配。還要確保架構匹配(如果您使用 32 位 linux,請下載不包含其中的版本64)。檢查下載啟動頁面上的“支持的產品”選項卡,並確保您的 GPU 已列出。

  1. 安裝dkms軟體包。
  2. 為您的發行版安裝核心標頭檔包。
  3. nouveau手動禁用。

編輯 grub 配置(典型位置:/etc/default/grub),更改的值GRUB_CMDLINE_LINUX並附 nouveau.modeset=0加到引用的變數。然後執行:

BIOS系統

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

UEFI系統

輸出文件位置因分佈而異。(在拱門中,它甚至是完全任意的)。通常在 下找到/boot/efi,並且通常稱為grub.cfg。您可以通過執行找到查找位置

efibootmgr -v

並檢查輸出。此輸出使用 DOS 表示法,因此反轉目錄路徑斜杠。然後執行,假設輸出條目包含File(\EFI\boot\bootx64.efi)

sudo grub2-mkconfig -o /EFI/boot/bootx64.efi
  1. 重新啟動到執行級別 3。(說明在上面)
  2. 執行下載的文件

執行以下命令,假設您已將 Nvidia 驅動程序下載到downloads您的目錄中$HOME

sudo bash /home/<username>/downloads/NVIDIA-linux-x86_64-<VERSION>

注意:在 32 位系統上,您將下載 32 位版本的庫

在 64 位系統上,它會詢問您有關 32 位兼容性庫的資訊。回答YESYES當它要求自動更新您的 X 配置文件時也要回答。

  1. 重新啟動系統(現在進入正常模式)。
  2. 可選擇執行nvidia-settings以調整性能。

引用自:https://gaming.stackexchange.com/questions/376160