Ubuntu 22.04.3,如何真正将Nvidia相关的显卡驱动程序列入黑名单?

Ubuntu 22.04.3,如何真正将Nvidia相关的显卡驱动程序列入黑名单?

我在一台Ubuntu 22.04.3的机器上做实验,配备了AMD 3200G集成显卡,以及一块独立的Nvidia Quadro M2000显卡。

在初始状态下,Ubuntu 桌面(GNOME 桌面)显示在我的两个显示器上,一个连接到 3200G,另一个连接到 Quadro。

ChjX570G,双显示器,AMD 和 Nvidia

由于我只想将 Nvidia 卡传递到我的 VM(将 AMD 卡保留为 GNOME 桌面控制台),所以我认为我需要做的一步是将 Nvidia 相关驱动程序(内核模块)列入黑名单。然后我向 中添加了一堆行/etc/modprobe.d/blacklist.conf,然后update-initramfs -u重新启动。

blacklist nvidia
blacklist nouveau
blacklist nvidiafb
blacklist nvidiafb_drm

blacklist nvidia_drm
blacklist nvidia_uvm
blacklist nvidia_modeset

但是... 重启后,我仍然看到两个屏幕上都显示 Ubuntu 桌面。这意味着 nvidia 相关模块尚未完全被抑制。这显然是不希望的。

检查后lsmod,仍列出一堆nvidia相关项目。

lsmod 输出包含许多“nvidia”项目

完整lsmod输出为:

Module                  Size  Used by
ccm                    20480  3
ntfs3                 335872  4
nvidia_uvm           1781760  2
nvidia_drm             94208  2
nvidia_modeset       1314816  2 nvidia_drm
nfnetlink              24576  0
nvidia              56745984  103 nvidia_uvm,nvidia_modeset
binfmt_misc            24576  1
nls_iso8859_1          16384  2
intel_rapl_msr         20480  0
amdgpu              14528512  4
intel_rapl_common      40960  1 intel_rapl_msr
edac_mce_amd           45056  0
snd_hda_codec_realtek   192512  1
snd_hda_codec_generic   118784  1 snd_hda_codec_realtek
kvm_amd               204800  0
ledtrig_audio          16384  1 snd_hda_codec_generic
snd_hda_codec_hdmi     94208  2
kvm                  1347584  1 kvm_amd
snd_hda_intel          61440  4
snd_intel_dspcfg       36864  1 snd_hda_intel
snd_usb_audio         425984  1
snd_intel_sdw_acpi     20480  1 snd_intel_dspcfg
irqbypass              16384  1 kvm
iommu_v2               24576  1 amdgpu
snd_hda_codec         204800  4 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec_realtek
iwlmvm                729088  0
drm_buddy              20480  1 amdgpu
snd_usbmidi_lib        53248  1 snd_usb_audio
gpu_sched              61440  1 amdgpu
snd_hda_core          135168  5 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec,snd_hda_codec_realtek
drm_ttm_helper         16384  1 amdgpu
crct10dif_pclmul       16384  1
ttm                   110592  2 amdgpu,drm_ttm_helper
snd_hwdep              20480  2 snd_usb_audio,snd_hda_codec
polyval_clmulni        16384  0
polyval_generic        16384  1 polyval_clmulni
ghash_clmulni_intel    16384  0
sha512_ssse3           53248  0
mac80211             1617920  1 iwlmvm
snd_seq_midi           20480  0
drm_display_helper    212992  1 amdgpu
snd_seq_midi_event     16384  1 snd_seq_midi
snd_rawmidi            53248  2 snd_seq_midi,snd_usbmidi_lib
aesni_intel           397312  2
cec                    94208  1 drm_display_helper
libarc4                16384  1 mac80211
snd_seq                94208  2 snd_seq_midi,snd_seq_midi_event
crypto_simd            20480  1 aesni_intel
mc                     81920  1 snd_usb_audio
rc_core                77824  1 cec
cryptd                 28672  2 crypto_simd,ghash_clmulni_intel
rapl                   20480  0
snd_pcm               192512  5 snd_hda_codec_hdmi,snd_hda_intel,snd_usb_audio,snd_hda_codec,snd_hda_core
snd_seq_device         16384  3 snd_seq,snd_seq_midi,snd_rawmidi
iwlwifi               569344  1 iwlmvm
drm_kms_helper        249856  5 drm_display_helper,amdgpu,nvidia_drm
i2c_algo_bit           16384  1 amdgpu
snd_timer              49152  2 snd_seq,snd_pcm
syscopyarea            16384  1 drm_kms_helper
sysfillrect            20480  1 drm_kms_helper
wmi_bmof               16384  0
gigabyte_wmi           24576  0
sysimgblt              20480  1 drm_kms_helper
snd                   135168  23 snd_hda_codec_generic,snd_seq,snd_seq_device,snd_hda_codec_hdmi,snd_hwdep,snd_hda_intel,snd_usb_audio,snd_usbmidi_lib,snd_hda_codec,snd_hda_codec_realtek,snd_timer,snd_pcm,snd_rawmidi
ccp                   131072  1 kvm_amd
cfg80211             1241088  3 iwlmvm,iwlwifi,mac80211
k10temp                16384  0
soundcore              16384  1 snd
mac_hid                16384  0
sch_fq_codel           24576  2
msr                    16384  0
parport_pc             53248  0
ppdev                  24576  0
lp                     28672  0
parport                73728  3 parport_pc,lp,ppdev
drm                   700416  15 gpu_sched,drm_kms_helper,drm_display_helper,nvidia,drm_buddy,amdgpu,drm_ttm_helper,nvidia_drm,ttm
efi_pstore             16384  0
ip_tables              36864  0
x_tables               65536  1 ip_tables
autofs4                57344  2
hid_generic            16384  0
usbhid                 73728  0
hid                   176128  2 usbhid,hid_generic
r8169                 114688  0
crc32_pclmul           16384  0
i2c_piix4              28672  0
ahci                   49152  7
xhci_pci               24576  0
libahci                57344  1 ahci
xhci_pci_renesas       20480  1 xhci_pci
realtek                36864  1
video                  73728  2 amdgpu,nvidia_modeset
wmi                    40960  3 video,gigabyte_wmi,wmi_bmof

顺便说一句:Nvidia 卡使用 NVIDIA 公司的专有驱动程序版本 535。

NVIDIA 专有驱动程序、Gnome UI

需要提及的一条线索是,我比较了lsmod之前和之后的输出,使用我的额外黑名单后,“使用者”列中的值变得更低。

“使用者”列中的值变得更低

例如,nvidia_drmused-by 值从 4 变为 2。但lsmode并未说明nvidia_drm由谁使用。我不是 Linux 内核专家,所以我还不知道这意味着什么。

我做错什么了吗?

相关内容