在 Grub 中加入禁用 Nvidia Driver 的启动项
Table of contents:
在我的上一台没有核显的 Diy 主机上,Nvidia 驱动对我的 Linux 使用造成了很大的困扰。最近购入了一台带有核显的笔记本,决定在一部分情况下选择启动禁用 Nvidia 驱动程序的系统。
🎯 目标
给同一个系统添加两个 GRUB 启动项,一个用正常内核参数,另一个加参数禁用 Nvidia 驱动。
✅ 核心解决方案
① 手动编辑 /etc/grub.d/40_custom
这是 GRUB 官方提供的“自定义启动项”配置文件,不会被系统升级覆盖。
sudo -e /etc/grub.d/40_custom
示例配置:
menuentry 'Arch Linux (Normal)' {
insmod ext2
set root=你的 /boot 分区
linux /vmlinuz-linux root=UUID=你的根分区UUID rw quiet
initrd /initramfs-linux.img
}
menuentry 'Arch Linux (Disable Nvidia)' {
insmod ext2
set root=你的 /boot 分区
linux /vmlinuz-linux root=UUID=你的根分区UUID rw quiet module_blacklist=nvidia,nvidia_drm,nvidia_modeset,nvidia_uvm
initrd /initramfs-linux.img
}
⚠️ 注意:
root=UUID=...
写你的实际 根分区 UUIDlinux
、initrd
路径通常/vmlinuz-linux
和/initramfs-linux.img
,你也可以用/boot/vmlinuz-*
绝对路径module_blacklist=...
禁用显卡驱动 不要使用modprobe.blacklist=...
- 你也可以加其他参数,如
nomodeset
、nvidia_drm.modeset=0
(部分情况有用)
我的配置
如果原本就对 /etc/default/grub
有所修改,建议编写 /etc/grub.d/40_custom
时参考 /boot/grub/grub.cfg
。
sudo cat /boot/grub/grub.cfg
可以参考一下我的配置文件:
menuentry 'Arch Linux (Disable NVIDIA Drivers)' --class arch --class gnu-linux --class gnu --class os {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
search --no-floppy --fs-uuid --set=root 55f603fe-2531-4f31-ad38-9b0173811891
echo 'Loading Linux linux-zen (without NVIDIA) ...'
linux /vmlinuz-linux-zen root=UUID=9e4b3477-ed3a-4a39-8661-9147dce8bbb5 rw loglevel=5 nowatchdog ibt=off module_blacklist=nvidia,nvidia_drm,nvidia_modeset,nvidia_uvm
echo 'Loading initial ramdisk ...'
initrd /amd-ucode.img /initramfs-linux-zen-fallback.img
}
为什么不是modprobe.blacklist=
?
- 这只阻止了内核自动加载这些模块,
但 Arch Linux 很可能通过
initramfs
预加载了nvidia
,也可能initramfs
里已经有nvidia
模块了,导致无效。 - 第一次禁用参数时,我踩了这个坑,启动后发现运行
nvidia-smi
仍然正常,说明模块已经载入了。于是求助ChatGPT,得到了上面的第一条解释。
② 生成 grub 配置
添加好后,更新 grub:
sudo grub-mkconfig -o /boot/grub/grub.cfg
③ 启动效果
下次启动时,你会看到两个启动项:
- 一个正常启动
- 一个禁用了 Nvidia 驱动

倒数第二个启动项启动后没有nvidia驱动
(Nvidia-smi 没有成功运行,驱动禁用成功)