跳至內容

NVIDIA/故障排除

出自 Arch Linux 中文维基

啟動失敗

安裝驅動後系統無法啟動

如果安裝 NVIDIA 驅動後,系統在進入顯示管理器之前卡住,請嘗試內核級顯示模式設置#禁用 KMS。

Xorg 無法加載或出現紅屏死機

如果出現紅屏且使用 GRUB,請編輯 /etc/default/grub,取消 GRUB_TERMINAL_OUTPUT=console 的注釋,以禁用 GRUB 幀緩衝。詳情參見 GRUB/技巧和竅門#禁用 framebuffer。

啟動 X 時黑屏/關閉 X 時計算機斷電

如果更新 NVIDIA 驅動後啟動 Xorg 時屏幕保持黑屏,或者關閉 Xorg 會導致計算機斷電,請嘗試以下解決方法:

檢測到屏幕,但沒有可用的配置

有時 NVIDIA 驅動和 X 無法正確找到正在使用的屏幕。如果顯卡具有多個輸出埠,請嘗試將顯示器連接到其他埠。對於筆記本電腦,這可能是因為顯卡還具有 VGA/TV 輸出。Xorg.0.log 中會提供更多信息。

還可以嘗試在 Section "Device" 中添加一個無效的 Option "ConnectedMonitor",使 Xorg 報錯並提示正確配置方式。有關 ConnectedMonitor 選項的更多信息,請參閱官方文檔。

重新運行 X 後,查看 Xorg.0.log,獲取有效的 CRT-x、DFP-x 和 TV-x 值。

nvidia-xconfig --query-gpu-info 可能有所幫助。

X 啟動失敗並顯示「Failing initialization of X screen」

如果 /var/log/Xorg.0.log 顯示 X 伺服器未能初始化屏幕:

(EE) NVIDIA(G0): GPU screens are not yet supported by the NVIDIA driver
(EE) NVIDIA(G0): Failing initialization of X screen

並且 nvidia-smi 顯示 No running processes found,那麼請先更新到最新版 nvidia-utils包,然後將 /usr/share/X11/xorg.conf.d/ 下的 10-nvidia-drm-outputclass.conf 複製到 /etc/X11/xorg.conf.d/。編輯複製後的文件,添加 Option "PrimaryGPU" "yes",最後重啟計算機。此時問題應該已經解決。

Xorg 在啟動過程中失敗,但手動啟動正常

在啟動速度非常快的系統上,systemd 可能會在 NVIDIA 驅動完全初始化之前嘗試啟動顯示管理器。只有在開機階段運行 Xorg 時,日誌中才會出現類似以下內容:

/var/log/Xorg.0.log
[     1.807] (EE) NVIDIA(0): Failed to initialize the NVIDIA kernel module. Please see the
[     1.807] (EE) NVIDIA(0):     system's kernel log for additional error messages and
[     1.808] (EE) NVIDIA(0):     consult the NVIDIA README for details.
[     1.808] (EE) NVIDIA(0):  *** Aborting ***

這種情況下,需要建立顯示管理器對 DRI 設備的啟動順序依賴。首先創建一個新的 udev 規則文件,以便為 DRI 設備創建設備單元:

/etc/udev/rules.d/99-systemd-dri-devices.rules
ACTION=="add", KERNEL=="card*", SUBSYSTEM=="drm", TAG+="systemd"

然後讓顯示管理器依賴這些設備:

/etc/systemd/system/display-manager.service.d/10-wait-for-dri-devices.conf
[Unit]
Wants=dev-dri-card0.device
After=dev-dri-card0.device

如果桌面還需要其他顯卡,請將相應設備以空格分隔,添加到 Wants 和 After 中。

帶集成 GPU 的系統出現黑屏

如果系統具有集成 GPU(例如 Intel HD 4000、VIA VX820 Chrome 9 或 AMD Cezanne),並且安裝了 nvidia-580xx-dkmsAUR 或更早版本的軟體包,那麼在開機、切換虛擬終端或退出 X 會話時可能出現黑屏。這可能由顯卡模塊間的衝突引起。解決方法是將相關 GPU 模塊加入黑名單。創建 /etc/modprobe.d/blacklist.conf,阻止相關模塊在啟動時加載:

/etc/modprobe.d/blacklist.conf
install i915 /usr/bin/false
install intel_agp /usr/bin/false
install viafb /usr/bin/false
install radeon /usr/bin/false
install amdgpu /usr/bin/false

多 GPU 系統中 X 啟動失敗並顯示「no screens found」

當系統中存在多塊 GPU 時,X 可能啟動失敗,並顯示:

[ 76.633] (EE) No devices detected.
[ 76.633] Fatal server error:
[ 76.633] no screens found

此時需要在 X 配置中添加獨立顯卡的 BusID。擁有 Intel CPU 和集成 GPU 的系統,或安裝了多塊 NVIDIA 顯卡的系統,都可能遇到這種情況。首先查找 BusID:

# lspci -d ::03xx
00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller (rev 09)
01:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GTX 650] (rev a1)
08:00.0 3D controller: NVIDIA Corporation GM108GLM [Quadro K620M / Quadro M500M] (rev a2)

然後在 X 配置文件中顯卡的 Device 段添加 BusID。下面展示了配置段的示例(請替換為適合自己系統的值):

/etc/X11/xorg.conf.d/10-nvidia.conf
Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BusID          "PCI:1:0:0"
EndSection
注意:BusID 的格式非常重要!

在上例中,01:00.0 要寫成 1:0:0。不過,有時轉換更為複雜。lspci 輸出中的數字是十六進制,而配置文件中的 BusID 使用十進制!因此,BusID 大於 9 時需要轉換成十進制。例如,lspci 中的 5e:00.0 應寫為 PCI:94:0:0。

Linux 4.8 及更高版本中 modprobe 報錯「Could not insert 'nvidia': No such device」

在 Linux 4.8 中,嘗試使用獨立顯卡時可能出現以下錯誤:

# modprobe nvidia -vv
modprobe: INFO: custom logging function 0x409c10 registered
modprobe: INFO: Failed to insert module '/lib/modules/4.8.6-1-ARCH/extramodules/nvidia.ko.gz': No such device
modprobe: ERROR: could not insert 'nvidia': No such device
modprobe: INFO: context 0x24481e0 released
insmod /lib/modules/4.8.6-1-ARCH/extramodules/nvidia.ko.gz
# dmesg
...
NVRM: The NVIDIA GPU 0000:01:00.0 (PCI ID: 10de:139b)
NVRM: installed in this system is not supported by the 370.28
NVRM: NVIDIA Linux driver release.  Please see 'Appendix
NVRM: A - Supported NVIDIA GPU Products' in this release's
NVRM: README, available on the Linux driver download page
NVRM: at www.nvidia.com.
...

此問題由 Linux 內核中與 PCIe 電源管理有關的不正確提交引起(參見此 NVIDIA DevTalk 討論)。

解決方法是在內核參數中添加 pcie_port_pm=off。注意,這會禁用所有設備的 PCIe 電源管理。

系統無法從掛起狀態恢復

日誌中可能出現以下信息:

kernel: nvidia-modeset: ERROR: GPU:0: Failed detecting connected display devices
kernel: nvidia-modeset: ERROR: GPU:0: Failed detecting connected display devices
kernel: nvidia-modeset: WARNING: GPU:0: Failure processing EDID for display device DELL U2412M (DP-0).
kernel: nvidia-modeset: WARNING: GPU:0: Unable to read EDID for display device DELL U2412M (DP-0)
kernel: nvidia-modeset: ERROR: GPU:0: Failure reading maximum pixel clock value for display device DELL U2412M (DP-0).

根據此討論,一種可能的解決方法是:

運行以下命令獲取 version 字符串:

# strings /sys/firmware/acpi/tables/DSDT | grep -i 'windows ' | sort | tail -1

在引導加載程序配置中添加 acpi_osi=! "acpi_osi=version" 內核參數。

另一個可能的原因是使用了 nvidia-open包 軟體包,參見:

從掛起狀態恢復後黑屏

如果遇到黑屏問題,並且日誌包含:

archlinux kernel: NVRM: GPU at PCI:0000:08:00: GPU-926ecdb0-adb1-6ee9-2fad-52e7214c5011
archlinux kernel: NVRM: Xid (PCI:0000:08:00): 13, pid='<unknown>', name=<unknown>, Graphi>
archlinux kernel: NVRM: Xid (PCI:0000:08:00): 13, pid='<unknown>', name=<unknown>, Graphi>
archlinux kernel: NVRM: Xid (PCI:0000:08:00): 13, pid='<unknown>', name=<unknown>, Graphi>
archlinux kernel: NVRM: Xid (PCI:0000:08:00): 13, pid='<unknown>', name=<unknown>, Graphi>
archlinux kernel: NVRM: Xid (PCI:0000:08:00): 13, pid='<unknown>', name=<unknown>, Graphi>

需要按照 NVIDIA/提示和技巧#保留掛起後的顯存 中的說明啟用 NVIDIA 掛起、休眠及睡眠服務。

Xorg 多顯示器配置中一個或多個顯示器無法工作

如果一個或多個顯示器在 Xorg 中沒有任何輸出,並且在 nvidia-settings 控制面板中顯示為「Disabled」,則當前 Xorg 配置可能不兼容。 NVIDIA 專有驅動在正常工作時不應強制要求 X 配置文件。參見 NVIDIA#Xorg 配置。

只需移動或重命名 /etc/X11/xorg.conf 以及 xorg.conf.d 中與 NVIDIA 驅動有關的配置文件。Xorg 只會讀取擴展名為 .conf 的文件。

$ mv /etc/X11/xorg.conf /etc/X11/xorg.conf.old

禁用舊的 NVIDIA Xorg 配置後,可以使用 nvidia-xconfig 生成適合當前硬體的新配置。不過,通常無需這樣做,驅動也應當能夠工作。

$ nvidia-xconfig
注意:nvidia-xconfig 會生成名為 /etc/X11/xorg.conf.backup 的備份文件,但多次運行 nvidia-xconfig 可能覆蓋該文件。

崩潰與卡死

一般性崩潰

  • 嘗試禁用 GSP 固件。
  • 嘗試在 xorg.conf 中禁用 RenderAccel。
  • 如果 Xorg 報告 "conflicting memory type" 或 "failed to allocate primary buffer: out of memory",或者使用 nvidia-96xx 驅動時發生「Signal 11」崩潰,請在內核參數中添加 nopat。
  • 如果 NVIDIA 編譯器提示當前 GCC 版本與用於編譯內核的 GCC 版本不同,請在 /etc/profile 中添加:
export IGNORE_CC_MISMATCH=1
  • 如果全屏應用程式凍結或崩潰,請嘗試在桌面環境設置中啟用 Display Compositing 和 Direct fullscreen rendering 選項。

網格著色器支持不佳

此問題只出現在依賴網格著色器的新遊戲中,例如《最終幻想 VII 重生》。即使使用最新的 NVIDIA 測試版驅動,遊戲環境仍可能無法顯示。[1]

不過,在等待 NVIDIA 修復期間,可以藉助 pyroveil,通過 SPIR-V 繞過該問題。

按照 GitHub 上的教程編譯並安裝該工具,然後設置 PYROVEIL=1 和 PYROVEIL_CONFIG=/path/to/pyroveil/hacks/ffvii-rebirth-nvidia/pyroveil.json 環境變量啟動遊戲。

OpenGL 應用程式中的圖形異常、卡死和錯誤

較新的 CPU(Intel Sandy Bridge〔2011 年〕及更新型號,或 AMD Zen〔2017 年〕及更新型號)具有微操作緩存。由於緩存別名(Cache Aliasing)問題,微操作緩存可能與 NVIDIA 驅動的 OpenGL 功能發生衝突[2]。通常可以在 BIOS 中禁用微操作緩存,但這會損失性能[3]。禁用微操作緩存也有助於緩解 Xwayland 應用程式中最嚴重的圖形異常,但無法完全解決問題[4]。

更新或重啟系統時發生內核恐慌

這是 NVIDIA 550 系列驅動中的一個已知錯誤。[5] 目前原因尚不明確,但似乎只影響筆記本電腦。詳情參見 BBS#293400。

解決方法是:如果硬體支持,切換到 nvidia-open-dkms包;否則改用 nvidia-535xx-dkmsAUR。

GSP 固件

GSP 固件從 2024 年 6 月發布的 NVIDIA 555 版驅動開始默認啟用,已知可能引起各種問題,包括 Vulkan 故障和系統崩潰。

要禁用 GSP 固件,請為 nvidia 內核模塊設置 NVreg_EnableGpuFirmware=0 模塊參數。此方法僅適用於 NVIDIA 專有驅動;如需從開源驅動切換,請參見 NVIDIA#安裝。

如有必要,不要忘記重新生成 initramfs。重啟後新的內核模塊選項才會生效。

與 VRR 和 TTY 切換有關的崩潰

如果在桌面環境與 TTY 之間切換時驅動崩潰,且 journal 日誌包含:

archlinux kernel: [drm:nv_drm_atomic_commit [nvidia_drm]] *ERROR* [nvidia-drm] [GPU ID [...]] Flip event timeout
archlinux kernel: nvidia-modeset: ERROR: GPU:0: Idling display engine timed out: [...]

嘗試通過顯示器的 OSD 菜單禁用可變刷新率(VRR)功能。

另一種解決方法是對顯示子系統隱藏驅動的 VRR(G-Sync / FreeSync)能力,以阻止應用程式或合成器啟用 VRR:在內核參數中設置 nvidia_modeset.conceal_vrr_caps=1,以強制使用固定刷新率。

Xid 79:GPU 已從總線上掉線

如果在 journal 中發現此類崩潰,可能有多種原因,包括電源故障、線纜問題或 PCI 連接問題。

不過,也有人將其報告為 NVIDIA 驅動問題,其中提到一種通過限制顯存時鐘頻率來解決問題的方法。

首先運行以下命令,獲取可用的顯存時鐘頻率:

$ nvidia-smi -q -d SUPPORTED_CLOCKS | grep Memory
        Memory                                         : 9501 MHz
        Memory                                         : 9251 MHz
        Memory                                         : 5001 MHz
        Memory                                         : 810 MHz
        Memory                                         : 405 MHz

然後使用 --lock-memory-clocks(或 -lmc)選項,將最低頻率設為支持的最小值,最高頻率設為低於最大值的下一檔,並按 min,max 的格式指定。例如:

# nvidia-smi --lock-memory-clocks 405,9251

這會設定允許的時鐘頻率範圍,避免設備始終被強制運行在最高頻率。也可以將範圍上限設置為最大值,但即使顯卡未使用,也會增加耗電量。

注意:根據官方文檔,--lock-memory-clocks 不適用於採用 NVIDIA Hopper 架構的設備。如果使用的是該架構,請改用 --lock-memory-clocks-deferred(或 -lmcd),該選項只接受一個目標值,而不是一個範圍。

顯示問題

避免 Xorg 畫面撕裂

注意:
  • 據報告,這可能降低部分 OpenGL 應用程式的性能,並導致 WebGL 問題。它還會顯著延長驅動在負載結束後降低時鐘頻率所需的時間(NVIDIA 支持討論)。
  • 已知 ForceFullCompositionPipeline 會導致一些使用 NVIDIA 535 驅動、通過 Proton 運行的 Vulkan 遊戲無法正常工作。
  • 已知 ForceCompositionPipeline 可能導致部分全屏應用立即凍結,使系統無響應,直到切換到其他窗口。一個解決方法是在 Gamescope 中以無邊框窗口模式(-b)運行程序,並保持屏幕上至少還有一個其他元素(可以是任務欄或其他圖形應用程式)。

NVIDIA 驅動會根據情況使用合成管線,為圖像顯示做準備。不要將其與合成管理器混淆:後者負責窗口呈現,也可以通過 VSync 緩解畫面撕裂。默認情況下,只有當前屏幕變換需要時,才會啟用合成管線。該管線會優先使用 GPU 的專用顯示引擎,無法使用時則採用通用圖形引擎。可以使用以下選項進行控制:

  • ForceCompositionPipeline 強制使用合成管線(詳見#多顯示器)。
  • ForceFullCompositionPipeline 強制使用合成管線,並強制由圖形引擎完成全部處理。

設置 ForceFullCompositionPipeline=On 可以避免 Xorg 中的畫面撕裂。要測試此選項是否有效,請運行:

$ nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"

或者,在 X Server Display Configuration 菜單中點擊 Advanced 按鈕,選擇 Force Composition Pipeline 或 Force Full Composition Pipeline,然後點擊 Apply。

要永久應用此更改,必須將選項添加到 Xorg 配置文件的 "Screen" 段。同時應在驅動配置中啟用 TripleBuffering 並禁用 AllowIndirectGLXProtocol。配置示例如下:

/etc/X11/xorg.conf.d/20-nvidia.conf
Section "Device"
        Identifier "NVIDIA Card"
        Driver     "nvidia"
        VendorName "NVIDIA Corporation"
        BoardName  "GeForce GTX 1050 Ti"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    Option         "ForceFullCompositionPipeline" "on"
    Option         "AllowIndirectGLXProtocol" "off"
    Option         "TripleBuffer" "on"
EndSection

如果沒有 Xorg 配置文件,可以使用 nvidia-xconfig 為當前硬體生成配置(參見 NVIDIA#自動配置),再將其從 /etc/X11/xorg.conf 移動到推薦位置 /etc/X11/xorg.conf.d/20-nvidia.conf。

注意:nvidia-xconfig 在 20-nvidia.conf 中生成的許多選項會由驅動自動設置,並非必需。如果僅希望啟用合成管線,只需要保留包含 Identifier 和 Option 的 "Screen" 段,其他段可以刪除。

多顯示器

在多顯示器配置中,需要為每個顯示器單獨指定 ForceCompositionPipeline=On。例如:

$ nvidia-settings --assign CurrentMetaMode="DP-2: nvidia-auto-select +0+0 {ForceCompositionPipeline=On}, DP-4: nvidia-auto-select +3840+0 {ForceCompositionPipeline=On}"

否則,nvidia-settings 命令將禁用第二台顯示器。

以上命令適用於連接到 DP-2 和 DP-4 的兩台 3840x2160 顯示器。需要通過導出 xorg.conf 讀取正確的 CurrentMetaMode,並為每個顯示器附加 ForceCompositionPipeline。設置 ForceCompositionPipeline 只會影響目標顯示器。

可以使用 --query 查詢當前顯示器名稱及其偏移量:

$ nvidia-settings --query CurrentMetaMode
提示:在使用不同型號顯示器的多顯示器配置中,顯示器的刷新率可能略有差異。如果驅動啟用了 V-Sync,它只會同步到其中一個刷新率,從而可能導致其他顯示器出現畫面撕裂。因此最好同步到主要使用的顯示器。可以在 ~/.nvidia-settings-rc 中通過 0/XVideoSyncToDisplayID= 配置,或者安裝 nvidia-settings包 並使用圖形界面進行設置。

從掛起或休眠恢復後屏幕顯示異常

如果外部顯示器在掛起或休眠後無法喚醒,也適用本節。

參見 NVIDIA/提示和技巧#保留掛起後的顯存。

使用 GDM 服務時從掛起恢復後屏幕損壞的問題,已於 515.43.04 版驅動中修復[6]。

屏幕顯示異常:「六屏」問題

部分使用 GeForce GT 100M 系列顯卡的用戶發現,啟動 X 後畫面被分成六塊,且解析度被限制為 640x480。Quadro 2000 和高解析度顯示器上也有人報告過同樣的問題。

要解決此問題,請在 Device 段中啟用 NoTotalSizeCheck 模式驗證選項:

Section "Device"
 ...
 Option "ModeValidation" "NoTotalSizeCheck"
 ...
EndSection

使用 nvidia-470 時文本和圖標不可見

GTK4 的一次更新給依賴 nvidia-470 舊顯卡驅動的用戶帶來了問題:更新後文本和圖標會隨機消失,只有滑鼠懸停到窗口上時才會重新出現。[7]

解決方法是指定渲染器:

/etc/environment
GSK_RENDERER=vulkan

修復 GNOME Shell 從睡眠恢復後的圖形異常

如果從睡眠恢復後 GNOME Shell 中出現異常字體或奇怪的圖形故障,請嘗試設置以下內核參數以啟用電源管理:

nvidia.NVreg_DynamicPowerManagement=0x02

更多信息:https://download.nvidia.com/XFree86/Linux-x86_64/575.64/README/dynamicpowermanagement.html

顯示器關閉或恢復時系統卡死

如果桌面環境通過 DPMS 關閉顯示器後,或者系統從掛起恢復時立即卡死或崩潰,並且 dmesg/journal 中出現類似以下 GSP 超時記錄:

NVRM: _kgspLogXid119: ********************************* GSP Timeout **********************************
NVRM: Xid (PCI:0000:01:00): 119, Timeout after 6s of waiting for RPC response from GPU0 GSP! Expected function 76 (GSP_RM_CONTROL) sequence 1321 

在這些電源狀態切換過程中,GPU 可能會降至不穩定的低時鐘頻率狀態。

解決方法:使用 nvidia-smi 鎖定更高的 GPU/顯存最低時鐘頻率。

前提條件:

啟用並啟動 nvidia-persistenced.service。

查詢支持的時鐘頻率(根據結果選擇有效的最小值/最大值組合):

nvidia-smi -q -d SUPPORTED_CLOCKS
nvidia-smi -q -d CLOCK

設置最低時鐘頻率(以下為示例值,請根據 GPU 支持的最高頻率調整):

nvidia-smi -lgc 800,2100
nvidia-smi -lmc 800,10000

測試 DPMS 和掛起/恢復,檢查問題是否得到解決。若要還原設置:

nvidia-smi -rgc
nvidia-smi -rmc

如需通過 systemd 永久配置,可創建 nvidia-clocks.service 之類的單元:

/etc/systemd/system/nvidia-clocks.service
[Unit]
Description=Set NVIDIA GPU minimum clocks to avoid  GSP timeouts
Requires=nvidia-persistenced.service
After=nvidia-persistenced.service 

[Service]
Type=oneshot
ExecStart=/usr/bin/nvidia-smi -lgc 500,2100
ExecStart=/usr/bin/nvidia-smi -lmc 500,10000
RemainAfterExit=yes 

[Install]
WantedBy=multi-user.target

可以將最低時鐘頻率設置得比上面提到的 800 更低,以減少空閒功耗;但要注意,設置得太低可能導致問題再次出現。

然後啟用並啟動 nvidia-clocks.service。

性能問題

安裝新版驅動後性能下降

本文或本章節的事實準確性存在爭議。

原因: 應嘗試找到根本原因(檢查 dmesg、dkms 日誌等),而不是盲目降級驅動。(在 Talk:NVIDIA/故障排除 中討論)


如果 FPS 比舊版驅動低,請檢查是否啟用了直接渲染(glxinfo 包含在 mesa-utils包 軟體包中):

$ glxinfo | grep direct

如果命令輸出:

direct rendering: No

一種可能的解決方法是退回到先前安裝的驅動版本,然後重新啟動。

Xorg 嚴重卡頓

本文或本章節的事實準確性存在爭議。

原因: 根據一位 NVIDIA 開發者的說法,該問題並非 GNOME 獨有,而相關討論中的其他評論也沒有提到多顯示器配置。(在 Talk:NVIDIA/故障排除 中討論)


Mutter 的一個常見問題是:動畫、視頻播放和遊戲可能導致 Xorg 桌面嚴重卡頓。

參見 NVIDIA/提示和技巧#保留掛起後的顯存。

這應該能夠解決問題。如果仍未解決,可能沒有完善的解決辦法。可以嘗試添加以下選項來緩解問題:

/etc/environment
CLUTTER_DEFAULT_FPS=YOUR_MAIN_DISPLAY_REFRESHRATE
__GL_SYNC_DISPLAY_DEVICE=YOUR_MAIN_DISPLAY_OUTPUT_NAME

在 NVIDIA Settings 中關閉 Sync to VBlank 和 Allow flipping,並使用 --load-config-only 參數配置 NVIDIA Settings 在啟動時自動運行。 即使這樣,桌面仍可能存在卡頓,尤其是第二台(或第三台)顯示器,但表現應當明顯改善。

400 系列顯卡出現 CPU 使用率峰值

如果使用 400 系列顯卡時 CPU 使用率間歇性飆升,可能是由於 PowerMizer 不斷切換 GPU 時鐘頻率。將 PowerMizer 設置從 Adaptive 切換到 Performance,並在 Xorg 配置的 Device 段中添加以下內容:

如果使用台式機:

 Option "RegistryDwords" "PowerMizerEnable=0x1; PerfLevelSrc=0x2222; PowerMizerDefaultAC=0x1"

如果使用筆記本電腦:

 Option "RegistryDwords" "PowerMizerEnable=0x1; PerfLevelSrc=0x3322; PowerMizerDefaultAC=0x1"

其他問題

應用程式啟動時出現 Vulkan 錯誤

本文或本章節的事實準確性存在爭議。

原因: 需要其他用戶確認(在 Talk:NVIDIA/故障排除 中討論)


運行需要 Vulkan 加速的應用程式時,如果出現以下錯誤:

Vulkan call failed: -4

請嘗試刪除 ~/.nv 或 ~/.cache/nvidia 目錄。

HDMI 沒有音頻

有時運行以下命令時,無法看到 NVIDIA HDMI 音頻設備:

$ aplay -l

在一些新設備上,NVIDIA GPU 的音頻晶片在啟動時處於禁用狀態。更多信息參見 NVIDIA 網站及論壇帖子。

需要重新加載 NVIDIA 設備並啟用音頻。首先確保 GPU 已開啟(筆記本電腦/Bumblebee 用戶尤其應注意),且 X 沒有運行在該 GPU 上,因為下面的操作會重置顯卡:

# setpci -s 01:00.0 0x488.l=0x2000000:0x2000000
# rmmod nvidia-drm nvidia-modeset nvidia
# echo 1 > /sys/bus/pci/devices/0000:01:00.0/remove
# echo 1 > /sys/bus/pci/devices/0000:00:01.0/rescan
# modprobe nvidia-drm
# xinit -- -retro

如果 TTY 運行在 NVIDIA 顯卡上,請將這些命令寫入腳本,以免操作過程中失去畫面輸出。

某些情況下背光無法關閉

默認情況下,DPMS 應根據超時設置或通過 xset 關閉背光。然而,可能由於 NVIDIA 專有驅動的錯誤,最終只會顯示黑屏,並未真正進入節能狀態。在該問題修復之前,可以嘗試以 root 身份使用 vbetool 作為變通方法。

安裝 vbetool包 軟體包。

可以按需關閉顯示器,按任意鍵後重新打開背光:

vbetool dpms off && read -n1; vbetool dpms on

也可以通過 xrandr 禁用並重新啟用顯示器輸出,無需 root 權限。

xrandr --output DP-1 --off; read -n1; xrandr --output DP-1 --auto

HardDPMS

這篇文章的某些內容需要擴充。

原因:補充有關「用戶報告」的參考資料。 (在 Talk:NVIDIA/故障排除 中討論)

專有驅動 415 引入了一個名為 HardDPMS 的新功能。據部分用戶報告,它解決了通過 DisplayPort 連接的顯示器無法進入掛起狀態的問題。 自 440.26 版起,此功能默認啟用。如果使用更早的驅動,可以在 Device 或 Screen 段中設置 HardDPMS 選項。例如:

/etc/X11/xorg.conf.d/20-nvidia.conf
Section "Device"
    ...
    Option         "HardDPMS" "true"
    ...
EndSection

Section "Screen"
    ...
    Option         "HardDPMS" "true"
    ...
EndSection

HardDPMS 會受 BlankTime 等屏幕保護程序設置觸發。以下 ServerFlags 配置會在顯示器空閒 10 分鐘後使其進入掛起狀態:

/etc/X11/xorg.conf.d/20-nvidia.conf
Section "ServerFlags"
    Option     "BlankTime" "10"
EndSection

xrandr BadMatch 錯誤

如果嘗試使用 xrandr 配置 DELL U2515H 等 WQHD 顯示器,並且 xrandr --addmode 返回 X Error of failed request: BadMatch,可能是因為 NVIDIA 專有驅動將 HDMI 輸出的最大像素時鐘限制在 225 MHz 或更低。若要使用顯示器的最高解析度,需要安裝 nouveau 驅動。可以通過設置內核參數 nouveau.hdmimhz=297(或 330),強制 nouveau 使用指定的像素時鐘頻率。

另一種可能是顯示器的 EDID 信息有誤。參見 #覆蓋 EDID。

還有一種可能是,當前 NVIDIA 驅動默認只允許 EDID 明確報告的顯示模式;但用戶有時需要 EDID 未提供的刷新率或解析度(即使 EDID 本身沒有錯誤)。

在這種情況下,可以在 xorg.conf 中添加一個選項,以允許非 EDID 模式:

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
...
    Option         "ModeValidation" "AllowNonEdidModes"
...
EndSection

此選項可以針對各個輸出單獨設置。更多信息參見 README 附錄 B:X 配置選項。

覆蓋 EDID

參見 內核級顯示模式設置#強制設置顯示模式與 EDID、Xrandr#疑難排除 和 Qnix QX2710#Fixing X11 with Nvidia。

nvidia-settings 圖形界面無法超頻

本文或本章節的語言、語法或風格需要改進。參考:幫助:風格

原因:內容重複,「無法工作」的描述不夠明確(在Talk:NVIDIA/故障排除討論)

解決方法是在啟用超頻後,通過 nvidia-settings 命令行界面查詢和設置相關變量(參見 NVIDIA/提示和技巧#在 nvidia-settings 中啟用超頻,以及 nvidia-settings(1))。

查詢所有變量的示例:

 nvidia-settings -q all

將 PowerMizerMode 設置為優先使用性能模式的示例:

 nvidia-settings -a [gpu:0]/GPUPowerMizerMode=1

將風扇速度固定在 21% 的示例:

nvidia-settings -a [gpu:0]/GPUFanControlState=1 -a [fan:0]/GPUTargetFanSpeed=21

一次設置多個變量的示例(GPU 超頻 50 MHz、顯存超頻 50 MHz、GPU 電壓增加 100 mV):

 nvidia-settings -a GPUGraphicsClockOffsetAllPerformanceLevels=50 -a GPUMemoryTransferRateOffsetAllPerformanceLevels=50 -a GPUOverVoltageOffset=100

超頻失敗並出現 Unknown Error

如果以非 root 用戶身份運行 Xorg 並嘗試對 NVIDIA GPU 超頻,可能出現類似以下錯誤:

$ nvidia-settings -a "[gpu:0]/GPUGraphicsClockOffset[3]=10"
ERROR: Error assigning value 10 to attribute 'GPUGraphicsClockOffset' (trinity-zero:1[gpu:0]) as specified in assignment
        '[gpu:0]/GPUGraphicsClockOffset[3]=10' (Unknown Error).

為避免此問題,必須以 root 身份運行 Xorg。詳情參見 Xorg#沒有 root 權限的 Xorg。

功耗

這篇文章的某些內容需要擴充。

原因:本節的目的是什麼? (在 Talk:NVIDIA/故障排除 中討論)

檢查驅動的使用情況:

# lsof /dev/nvidia*
kwin_wayl  867      user   17u   CHR   195,0      0t0  418 /dev/nvidia
kwin_wayl  867      user   18u   CHR   195,0      0t0  418 /dev/nvidiactl

如果已在內核模塊上配置節能功能:

$ grep . /sys/bus/pci/devices/0000:01:00.0/power/*
/sys/bus/pci/devices/0000:01:00.0/power/control:auto
/sys/bus/pci/devices/0000:01:00.0/power/runtime_active_time:445933
/sys/bus/pci/devices/0000:01:00.0/power/runtime_status:active
/sys/bus/pci/devices/0000:01:00.0/power/runtime_suspended_time:1266
/sys/bus/pci/devices/0000:01:00.0/power/wakeup:disabled
# rmmod nvidia_drm
$ grep . /sys/bus/pci/devices/0000:01:00.0/power/*
/sys/bus/pci/devices/0000:01:00.0/power/control:auto
/sys/bus/pci/devices/0000:01:00.0/power/runtime_active_time:461023
/sys/bus/pci/devices/0000:01:00.0/power/runtime_status:suspended
/sys/bus/pci/devices/0000:01:00.0/power/runtime_suspended_time:1064192
/sys/bus/pci/devices/0000:01:00.0/power/wakeup:disabled

測試軟體 GL 渲染

NVIDIA 二進制驅動不會遵循 Mesa 環境變量 LIBGL_ALWAYS_SOFTWARE=1,但可以通過設置以下環境變量,使 libglvnd 和 EGL 使用 Mesa:

__GLX_VENDOR_LIBRARY_NAME=mesa
__EGL_VENDOR_LIBRARY_FILENAMES=/usr/share/glvnd/egl_vendor.d/50_mesa.json

這樣就會使用 Mesa libgl 進行軟體 GLX 和 EGL 渲染,有助於測試某個錯誤是否與 NVIDIA GL 庫有關。

刷新率被限制為 120 Hz

較新版本的驅動(550xx 之後)似乎會在 8 bpc 輸出時浪費帶寬,可能使信號超出接口規範限制,導致原本在接口帶寬範圍內的更高刷新率模式無法使用。 在內核參數中添加 nvidia-modeset.hdmi_deepcolor=0,或通過 modprobe 設置該選項。 但請注意,HDR 顯示器需要深色彩(Deep Color)功能。

Wayland 下 HDMI 60 Hz 輸出的色彩空間錯誤

某些情況下(例如使用 HDMI 連接、刷新率為 60 Hz 的 GTX 1660 Super 顯卡),驅動似乎會錯誤判斷輸出色彩空間,使顏色看起來比正常情況更暗。由於 Wayland 下沒有簡單的方法顯式設置色彩空間,可以在內核參數中添加 nvidia-modeset.debug_force_color_space=2,或通過 modprobe 設置該選項,作為臨時解決方法。