Linux 作業系統安裝 Nvidia GPU 驅動,並且方便地切換開啟/關閉狀態的方法

KZ25T發表於2024-11-25

我的電腦有 Intel 核顯和 NVIDIA 獨顯,平時使用核顯來顯示螢幕。我只有在少數時候需要 NVIDIA 驅動(僅用於科學計算),但由於這個驅動比較耗電,導致我的膝上型電腦續航降低,所以大部分情況下我想把它關閉掉。以下是我探索的方法。

測試電池電量指令碼

如果你需要測試電池電量和功率,可以使用以下指令碼。如果不需要,請略過這一步。(感謝通義千問)

#!/bin/bash

# 設定電池裝置路徑
BATTERY_PATH=/sys/class/power_supply/
# 日誌檔案路徑
LOG_FILE=~/battery_log.csv
# 記錄間隔時間(秒),例如5分鐘
INTERVAL=10

# 設定語言環境,確保輸出一致
export LANG=C

# 檢查日誌檔案是否存在,如果不存在則建立並新增標題行
if [ ! -f $LOG_FILE ]; then
    echo "Timestamp,Percentage,Status" > $LOG_FILE
fi

# 捕獲中斷訊號,確保指令碼正常退出
trap exit_script SIGINT SIGTERM

exit_script() {
    echo "Exiting script..."
    exit
}

# 獲取電池裝置
batteries=$(upower -e | grep 'battery')

# 檢查是否有電池裝置
if [ -z "$batteries" ]; then
    echo "No battery found."
    exit 1
fi

# 迴圈記錄電量資訊
while true; do
    # 獲取當前時間戳
    timestamp=$(date +"%Y-%m-%d %H:%M:%S")
    # 獲取電量百分比
    percentage=$(upower -i $batteries | grep 'energy-rate' | awk '{print $2}')
    # 獲取充電狀態
    state=$(upower -i $batteries | grep 'state' | awk '{print $2}')
    # 記錄資料到日誌檔案
    echo "$timestamp, $percentage, $state" >> $LOG_FILE
    # 等待指定時間間隔
    sleep $INTERVAL
done

該指令碼會把電池電量放在 ~/battery_log.csv 裡以便檢視。

安裝 secure boot(必須)

參考我的另一篇部落格https://www.cnblogs.com/KZ25T/p/18528695

安裝驅動

有些發行版自帶安裝器,也有些人使用 sudo apt install nvidia-driver 成功安裝,但我的都不可行。以下是我的安裝方法:

確保已禁用 nouveau 和 secure boot

lsmod | grep nouveau 不輸出任何內容,接著執行 echo $? 發現錯誤碼為 1,表示已禁用。

開機時應關閉 secure boot,否則安裝驅動會出錯。如果你啟用了,請關機、關閉 secure boot 後重啟。

下載驅動

去官網下載:https://www.nvidia.com/en-us/drivers/unix,我選的是 Latest Production Branch Version,本文發稿時版本為 550.135;如您有其他需求(比如核心版本過於老舊)可以根據情況下載其他版本的驅動。

下載後使用 chmod 賦予可執行許可權。

安裝原始碼樹

sudo apt install linux-headers-amd64,如果你自己選擇使用了 rt 或 cloud 等核心(可以 ls /boot 看看有沒有這幾個字,而非常規核心),那麼需要下載對應的 headers 包。

停用桌面,進入命令列介面

sudo systemctl stop lightdm.service,使用 gdm、sddm 等其他 dm 的請使用對應命令。按下 ctrl+alt+F1 輸入賬戶名登入。如果 F1 不能登入,可以嘗試 F2~F7 登入。

執行安裝程式

sudo /path/to/NVIDIA-xxx.run --no-opengl-files --no-x-check --no-nouveau-check

  • --no-opengl-files 加上這個以防迴圈登入。
  • --no-x-check 不檢查 X 服務(似乎可以不加)
  • --no-nouveau-check 不檢查 nouveau(似乎可以不加)

安裝時,視窗問是否安裝 32 位庫,我選的不安裝;問是否安裝 dkms,我選的安裝。

重啟測試

在關閉 secure boot 的情況下重啟,開機後執行 nvidia-smi 可以顯示正常顯示卡資訊,lsmod | grep nvidia 可以顯示已載入 NVIDIA 驅動,可以進行 GPU 加速計算。

再開啟 secure boot,開機後執行 nvidia-smi 沒有顯示卡資訊,lsmod | grep nvidia 沒有 NVIDIA 驅動。使用本文前面的指令碼測試用電量,和未安裝時一致。

相關文章