NVIDIA/故障排除
啟動失敗
安裝驅動後系統無法啟動
如果安裝 NVIDIA 驅動後,系統在進入顯示管理器之前卡住,請嘗試內核級顯示模式設置#禁用 KMS。
Xorg 無法加載或出現紅屏死機
如果出現紅屏且使用 GRUB,請編輯 /etc/default/grub,取消 GRUB_TERMINAL_OUTPUT=console 的注釋,以禁用 GRUB 幀緩衝。詳情參見 GRUB/技巧和竅門#禁用 framebuffer。
啟動 X 時黑屏/關閉 X 時計算機斷電
如果更新 NVIDIA 驅動後啟動 Xorg 時屏幕保持黑屏,或者關閉 Xorg 會導致計算機斷電,請嘗試以下解決方法:
- 在 xinitrc 的開頭添加
xrandr --auto。 - 使用
rcutree.gp_init_delay=1內核參數。 - 也可以嘗試在 mkinitcpio.conf 中直接添加
nvidia模塊。
檢測到屏幕,但沒有可用的配置
有時 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
在上例中,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包 軟體包,參見:
- https://bbs.archlinux.org/viewtopic.php?pid=2047692
- https://github.com/NVIDIA/open-gpu-kernel-modules/issues/450
- https://github.com/NVIDIA/open-gpu-kernel-modules/issues/223
- https://github.com/NVIDIA/open-gpu-kernel-modules/issues/94
從掛起狀態恢復後黑屏
如果遇到黑屏問題,並且日誌包含:
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
~/.nvidia-settings-rc 中通過 0/XVideoSyncToDisplayID= 配置,或者安裝 nvidia-settings包 並使用圖形界面進行設置。從掛起或休眠恢復後屏幕顯示異常
如果外部顯示器在掛起或休眠後無法喚醒,也適用本節。
使用 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。
性能問題
安裝新版驅動後性能下降
如果 FPS 比舊版驅動低,請檢查是否啟用了直接渲染(glxinfo 包含在 mesa-utils包 軟體包中):
$ glxinfo | grep direct
如果命令輸出:
direct rendering: No
一種可能的解決方法是退回到先前安裝的驅動版本,然後重新啟動。
Xorg 嚴重卡頓
Mutter 的一個常見問題是:動畫、視頻播放和遊戲可能導致 Xorg 桌面嚴重卡頓。
這應該能夠解決問題。如果仍未解決,可能沒有完善的解決辦法。可以嘗試添加以下選項來緩解問題:
/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 錯誤
運行需要 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
專有驅動 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 圖形界面無法超頻
解決方法是在啟用超頻後,通過 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。
功耗
檢查驅動的使用情況:
# 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 設置該選項,作為臨時解決方法。