Ubuntu下UEFI安全启动安装Nvdia驱动

简介

众所周知,Ubuntu默认使用Nouveau开源驱动,其性能受限,因此我们需要安装Nvidia专用驱动。

安装专用驱动的一般方法非常简单,只需要sudo ubuntu-drivers devices && sudo ubuntu-drivers autoinstall即可,但该方法安装的驱动需要手动进行内核签名,否则其将无法与安全启动共存。因此,更推荐采取在Nvidia官网下载.run并执行安装的方式。

本博客结合其他优质博客,取其精华去其糟粕,结合本人在安装时遇到的实际问题,详细整理执行.run的安装方式,并发表此文。

博主系统环境如下:

  • KDE Neon 6.3
  • Geforce RTX 4060(Laptop)

安装必要环境

  1. 首先更新软件源:sudo apt update
  2. 安装必要编译环境:sudo apt install build-essential -y

卸载先前安装的驱动

  1. 首先,请确认先前是否安装了Nvidia驱动。使用dpkg -l | grep nvidia命令查看。
  2. 若先前以apt安装了驱动,使用sudo apt-get purge nvidia-*进行卸载;若先前以.run安装的驱动,使用sudo /usr/bin/nvidia-uninstall卸载。

下载驱动安装脚本

  1. 打开Nvidia驱动官网,查找并下载自己显卡的驱动。若不知道自己的显卡型号,执行lspci | grep -i vga进行查看。
  2. 耐心等待下载,由于服务器位于国外,下载速度较慢,请确保您有良好的国际互联网连接,相关资料请自行搜索,博主无法提供解决方案。
  3. 下载后,得到一个.run结尾的文件。

禁用开源驱动

  1. 执行echo "blacklist nouveau" >> /etc/modprobe.d/blacklist-nouveau.conf以永久禁用开源驱动。
  2. 执行sudo update-initramfs -u使命令生效。

安装动态内核模块支持(DKMS)

  1. 由于.run安装的驱动依赖于内核,当内核更新后,需重新执行.run的安装。因此,我们使用DKMS管理驱动,它会在内核更新后自动重新编译 NVIDIA 驱动模块。
  2. 安装DKMS:sudo apt install dkms -y

进入tty模式并安装

  1. 由于在GUI 环境下安装可能会失败,所以需要切换到纯文本模式进行安装。
  2. 使用sudo systemctl set-default multi-user.target && sudo reboot now重启计算机,重启后,使用系统账户的账号密码登录。
  3. 进入先前下载驱动的目录,此处以~/Download为例:cd ~/Download
  4. 为安装脚本添加可执行权限:sudo chmod a+x ./NVIDIA-Linux-x86_xxx.run。其中xxx请替换为实际驱动版本号。
  5. 执行安装脚本:sudo ./NVIDIA-Linux-x86_xxx.run --dkms,使用选项--dkms以启用DKMS模块进行安装。

生成签名密钥

  1. 一路继续安装,执行脚本会编译内核模块等。
  2. 当执行到询问是否需要签名页面时,选择"Sign the kernel module"。
  3. 签名密钥生成成功后,会展示.der扩展名的文件路径。

导入签名密钥

  1. 进入Nvidia目录:cd /usr/share/nvidia
  2. 使用.der文件进行签名:sudo mokutil --import nvidia-modsign-crt-xxx.der,其中xxx请替换为实际文件名。
  3. 会提示创建密码,输入后确认即可。
  4. 启用GUI模式并重启系统:sudo systemctl set-default graphical.target && sudo reboot now

对密钥签名

  1. 重启后,进入蓝屏的mok management页面。选择"Enroll mok"。
  2. 可见key 0以导入,之后对其签名,选择"Continue",之后选择"yes"
  3. 输入导入签名密钥时设置的密码,之后选择"Reboot"。

验证

  1. 重启后,安装与签名过程已结束。使用nvidia-smi命令验证是否安装成功。

参考资料

本文参考博客:UEFI安全启动模式下安装ubuntu的nvidia显卡驱动

本文添加了查看显卡型号,卸载先前驱动,在tty模式下安装,以及DKMS模块内容。

相关推荐
pingxiaozhao2 分钟前
linux系统中fstab 各字段详细说明
linux
Learn-Share_HY34 分钟前
[Python]如何利用Flask搭建一個Web服務器,並透過Ngrok訪問來實現LINE Bot功能?
linux·人工智能·python·ubuntu·flask·ollama·ngrok
网安墨雨1 小时前
网络安全(一):常见的网络威胁及防范
网络·安全·web安全
OpenVINO生态社区1 小时前
【汽车传感系统架构:借助传感获取安全】
安全·系统架构·汽车
字节程序员2 小时前
Jenkins 持续集成:Linux 系统 两台机器互相免密登录
linux·软件测试·ci/cd·jenkins
唐丙斯城2 小时前
动力电池热失控:新能源汽车安全的“隐形火山”如何预防?
安全·汽车
试水年华2 小时前
鸿蒙Next-集成HmRouter的路由模式
linux·运维·服务器·华为·harmonyos·ark-ts语言
Bigger2 小时前
Mac 命令行及 Linux 使用指南与示例
linux·前端·命令行
Karl_wei2 小时前
Flutter Linux应用初探
linux·前端·flutter
IT缺脑干2 小时前
CentOS 7 挂载与卸载文件系统
linux·运维·centos