在 Grub 中加入禁用 Nvidia Driver 的启动项

Posted on Jul 10, 2025

在我的上一台没有核显的 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=... 写你的实际 根分区 UUID
  • linuxinitrd 路径通常 /vmlinuz-linux/initramfs-linux.img,你也可以用 /boot/vmlinuz-* 绝对路径
  • module_blacklist=... 禁用显卡驱动 不要使用 modprobe.blacklist=...
  • 你也可以加其他参数,如 nomodesetnvidia_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=

  1. 只阻止了内核自动加载这些模块, 但 Arch Linux 很可能通过 initramfs 预加载了 nvidia,也可能 initramfs 里已经有 nvidia 模块了,导致无效。
  2. 第一次禁用参数时,我踩了这个坑,启动后发现运行 nvidia-smi 仍然正常,说明模块已经载入了。于是求助ChatGPT,得到了上面的第一条解释。

② 生成 grub 配置

添加好后,更新 grub:

sudo grub-mkconfig -o /boot/grub/grub.cfg

③ 启动效果

下次启动时,你会看到两个启动项:

  • 一个正常启动
  • 一个禁用了 Nvidia 驱动

倒数第二个启动项启动后没有nvidia驱动

(Nvidia-smi 没有成功运行,驱动禁用成功)