15.10 -> 16.04 LTS 升级后登录中断,与 NVIDIA 驱动有关

kmh*_*ann 10 nvidia uefi

我刚刚通过 将我的系统从 15.10 更新到 16.04 sudo do-release-upgrade。在此过程中,它显示了一个带有以下消息的屏幕:

您的系统启用了 UEFI 安全启动。UEFI 安全启动与第三方驱动程序的使用不兼容。

(...) Ubuntu 仍然可以在您的系统上启动,但这些第三方驱动程序将不适用于您的硬件。

禁用 UEFI 安全启动?(是|否)

由于我使用的唯一第三方驱动程序是 NVIDIA 图形驱动程序,并且由于它们在 Ubuntu 15.10 和启用安全启动的情况下运行良好,因此我在此处选择了“否”选项。我不明白为什么我应该无缘无故地禁用它,我认为我可以在更新后通过系统设置 GUI 重新安装第三方驱动程序。

唉,没有。重新启动后,我的登录屏幕以非常低的分辨率出现。尝试登录时,它立即将我抛回登录屏幕。

我尝试了以下方法来解决这种情况:

sudo apt-get purge nvidia*
sudo reboot
Run Code Online (Sandbox Code Playgroud)

这会导致出现紫色屏幕并且对 Ctrl-Alt-F1 没有反应。通过SSH登录,然后我做了:

sudo apt-get install nvidia-current
sudo reboot
Run Code Online (Sandbox Code Playgroud)

这又给我带来了前一种情况,登录屏幕分辨率很低,而且无法登录。

这是一个非常糟糕的升级体验。有没有其他人有这个,我能做些什么来解决这个问题?(同时保持 UEFI 安全启动启用)谢谢。

Rod*_*ith 8

通过 Ubuntu 15.10,Ubuntu 对安全启动的处理在 GRUB 停止——也就是说,Ubuntu 版本的 Shim 将启动 Ubuntu 版本的 GRUB,它会启动任何Linux 内核,无论它是否已签名。这是对安全启动的支持非常低的标准。作为比较,Fedora 的 GRUB 将仅启动已签名的 Linux 内核,而 Fedora 的内核在检测到安全启动处于活动状态时,将仅加载已签名的内核二进制文件。Fedora 更强大的安全启动支持的目的是保护系统免受“流氓”内核模块的侵害,理论上,这些模块可以在非常低的级别接管计算机。Ubuntu 15.10 及更早版本缺乏这种保护。

从 16.04 开始,Ubuntu 遵循更严格的安全启动模块,更像是 Fedora 长期以来一直在做的事情。这具有安全优势,但正如您所见,它也存在问题。如果第三方驱动程序未使用 Linux 内核的 Ubuntu 版本识别为有效的加密密钥进行签名,则不会加载它。这主要影响封闭源代码的 Nvidia 和 AMD/ATI 视频驱动程序,但也有其他驱动程序可能会受到影响。

此问题有(或可能有)几种解决方法:

  • 禁用安全启动——这是最简单的解决方案。您可以通过修改固件设置或(我认为)调整 Shim 设置来实现。(我不确定如何通过调整 Shim 的设置来做到这一点,但我很确定这是可能的。)
  • 不要使用第三方内核模块——如果你限制自己使用包含在 Ubuntu 标准 Linux 内核中的开源驱动程序,你应该没问题,因为 Canonical 签署了所有这些驱动程序 (AFAIK)。请注意,使用此类驱动程序应该有很好的 Nvidia 支持;您的系统可能回退到次优驱动程序,因为它认为闭源驱动程序可用。我不知道如何从一个切换到另一个,但这个问题是关于 AMD/ATI 驱动程序的,所以它可能是一个有用的起点。
  • 签署相关模块——理论上,自己签署商业模块应该可以使它们工作。不幸的是,我没有关于如何执行此操作的说明的指针,实际上我什至不完全确定是否可以使用股票 Ubuntu 内核执行此操作;这样的内核可能只支持使用 Canonical 密钥签名的模块,而您当然没有。
  • 编译你自己的内核——如果你编译你自己的内核,你可以设置你认为合适的选项,包括放宽对加载未签名模块的限制。然后,您需要使用您自己的 EFI 密钥对内核进行签名,并将该密钥的公共版本添加到您的 MOK 列表中。这是有关编译自己的内核的问答。
  • 切换到较旧的 GRUB -- 因为较旧的 GRUB 将启动未签名的内核,您可以安装这样的 GRUB(来自 Ubuntu 15.10 或之前)并让它启动未签名的内核。请注意,维护较旧的 GRUB 可能会很痛苦。
  • 切换到不支持安全启动的引导加载程序——如果您要使用自己的密钥对 SYSLINUX 或 ELILO 等引导加载程序进行签名,并将该密钥的公共版本添加到您的 MOK 列表中,则该引导加载程序将忽略安全引导设置,就像旧版本的 GRUB。然后你可以启动一个未签名的内核。

请注意,我 100% 确定可以使用的这些选项中只有两个是禁用安全启动或避免第三方内核模块。我避免使用像瘟疫这样的第三方内核模块,所以我没有在安全启动环境中使用它们的个人经验。除了禁用安全启动之外,构建您自己的内核可能是下一个最有可能工作的方法,其次是使用较旧的 GRUB 或使用不支持安全启动的引导加载程序。构建您自己的内核曾经很常见,但现在很少有人这样做了,而对于现代内核,学习如何配置内核的时间投入,更不用说实际这样做了,可能会很重要。使用较旧的 GRUB 或其他引导加载程序可能更容易,但您需要了解足够的知识才能进行设置。

  • * 使用 Ubuntu 14.04 直到这个问题得到解决 桌面上的 Linux 仍然看不到的原因有很多。这种事情真的只会让人们采用 Linux 变得更加痛苦。 (2认同)