当前位置: 首页 > news >正文

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模块内容。

相关文章:

  • JavaScript Fetch API
  • el-table + el-pagination 前端实现分页操作
  • secp256k1的模数P是如何选择的?
  • Java反射机制详解:原理、应用与最佳实践
  • Python内存管理探秘:让程序轻盈如羽的底层艺术
  • 畅享Mac桌面版TikTok!
  • 70. Linux驱动开发与裸机开发区别,字符设备驱动开发
  • 服务器中防火墙的重要性
  • 上门家政小程序实战,从0到1解决方案
  • 学习本地部署DeepSeek的过程(基于LM Studio)
  • 调用通义千问实现语音合成并将合成的音频通过扬声器播放
  • Transformer 通关秘籍2:利用 BERT 将文本 token 化
  • 【悲观锁和乐观锁有什么区别】以及在Spring Boot、MybatisPlus、PostgreSql中使用
  • 简历含金量的描述和注意事项!
  • 如何用Redis统计网站的UV
  • 影刀魔法指令3.0:开启自动化新篇章
  • 计算机视觉3——模板匹配与拟合
  • Maven入门
  • 3.26学习总结
  • Android系统的安全问题 - Android的Trusty TEE
  • 欧洲观察室|“美国优先”使欧盟对华政策面临地缘经济困境
  • 国家发改委:不断完善稳就业稳经济的政策工具箱,确保必要时能够及时出台实施
  • 零跑汽车一季度营收破百亿元:净亏收窄至1.3亿元,毛利率14.9%创新高
  • 马上评|中药液涉嫌添加安眠药?药品安全儿戏不得
  • 永久基本农田竟沦为垃圾场,湖南湘潭回应:全面启动专项整治
  • 病愈出院、跳大神消灾也办酒,新华每日电讯:农村滥办酒席何时休