登录在15.10 – > 16.04 LTS升级后破坏,与NVIDIA驱动程序有关

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

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

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

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

由于我使用的唯一第三方驱动程序是NVIDIA显卡驱动程序,并且因为它们在Ubuntu 15.10和启用安全启动时工作正常,所以我选择了“否”选项。 我不明白为什么我应该没有充分的理由禁用它,我想我可以在更新后通过系统设置GUI重新安装第三方驱动程序。

唉,没有。 重启后,我的登录界面显示分辨率非常低。 当尝试登录时,立即将我重新登录到登录屏幕。

我尝试了以下方法来解决这个问题:

 sudo apt-get purge nvidia* sudo reboot 

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

 sudo apt-get install nvidia-current sudo reboot 

这再次带给我前一个场景,登录屏幕非常低,无法登录。

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

通过Ubuntu 15.10,Ubuntu对安全启动的处理在GRUB停止 – 也就是说,Ubuntu的Shim版本将启动Ubuntu版本的GRUB,它将启动任何 Linux内核,无论是否签名。 这对Secure Boot来说是一个非常低的支持。 相比之下,Fedora的GRUB只会启动已签名的Linux内核,而Fedora的内核在检测到安全启动处于活动状态时,只会加载已签名的内核二进制文件。 Fedora更强大的安全启动支持的目的是保护系统免受“流氓”内核模块的影响,从理论上讲,这些模块可以在非常低的水平上接管计算机。 Ubuntu 15.10及更早版本缺乏此类保护。

从16.04开始,Ubuntu遵循更严格的安全启动模块,更像Fedora已经做了很长一段时间。 这有安全上的好处,但正如您所见,它也存在问题。 如果第三方驱动程序未使用Ubuntu版本的Linux内核识别为有效的加密密钥进行签名,则不会加载该驱动程序。 这主要影响闭源Nvidia和AMD / ATIvideo驱动程序,但也有其他驱动因素也会受到影响。

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

  • 禁用安全启动 – 这是最简单的解决方案。 您可以通过调整固件设置或(我认为)通过调整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进行双启动 – 但要注意Ubuntu 16.04可能会在某个时候恢复其GRUB,因此你需要重新安装旧的Ubuntu的GRUB 。