![Ubuntu 22.04.3,如何真正将Nvidia相关的显卡驱动程序列入黑名单?](https://linux22.com/image/1198591/Ubuntu%2022.04.3%EF%BC%8C%E5%A6%82%E4%BD%95%E7%9C%9F%E6%AD%A3%E5%B0%86Nvidia%E7%9B%B8%E5%85%B3%E7%9A%84%E6%98%BE%E5%8D%A1%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E5%88%97%E5%85%A5%E9%BB%91%E5%90%8D%E5%8D%95%EF%BC%9F.png)
我在一台Ubuntu 22.04.3的机器上做实验,配备了AMD 3200G集成显卡,以及一块独立的Nvidia Quadro M2000显卡。
在初始状态下,Ubuntu 桌面(GNOME 桌面)显示在我的两个显示器上,一个连接到 3200G,另一个连接到 Quadro。
由于我只想将 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
输出为:
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。
需要提及的一条线索是,我比较了lsmod
之前和之后的输出,使用我的额外黑名单后,“使用者”列中的值变得更低。
例如,nvidia_drm
used-by 值从 4 变为 2。但lsmode
并未说明nvidia_drm
由谁使用。我不是 Linux 内核专家,所以我还不知道这意味着什么。
我做错什么了吗?