启用Nvidia驱动会导致启动画面混乱不清。

当你从光盘启动或在安装Ubuntu后进行第一次启动时,启动画面看起来很棒。但是一旦你启用了通过apt-get安装的nvidia-current驱动程序,启动画面就变得很疯狂。
所谓疯狂,我指的是分辨率非常低,字体(我猜是这样)非常奇怪,整个画面看起来像是被损坏了。
这在10.04版本出现过,现在又在10.10版本出现了。
我该如何在启用nvidia驱动程序后修复启动画面?

1在X中,我的分辨率设置为1600x900,但是通过sudo hwinfo --framebuffer或者在grub的控制台中,最大分辨率只有1152x864。 有人能告诉我为什么会这样吗? 谢谢。 - carlos
这也发生在12.04版本上,但是我使用的是ATI驱动程序。 - Emerson Hsieh
我只能看到 NVIDIA 的标志闪一下大约1秒,然后就一切正常了。 - Alvar
如果您设置了ATA密码,请务必小心处理。我曾经设置过,但由于某种原因,它一直在尝试读取一个应该等待输入密码的磁盘时反复崩溃...请谨慎操作。 - MrMesees
以上评论基于xenial 16.04,而不是10.04或10.10。 - MrMesees
4个回答

那很简单。首先:
sudo apt-get install v86d hwinfo
sudo hwinfo --framebuffer

这将显示您支持的分辨率。请注意。
然后:
gksudo gedit /etc/default/grub

搜索 - GRUB_GFXMODE=
在此之下,您需要键入: GRUB_GFXPAYLOAD_LINUX=1024x768 <- 您的分辨率在这里 保存文件然后执行:
echo FRAMEBUFFER=y | sudo tee /etc/initramfs-tools/conf.d/splash
sudo update-grub2
sudo update-initramfs -u

2这样做有什么不利之处吗? - ændrük
我过去一直使用cryptsetup而不是你的第二步安装。它的效果是一样的。 - Extender
1对我来说不起作用,我使用的是NVIDIA 8600M。在Maverick上它曾经很好用... - nerdy_kid
2非常好,这在12.04上运行得很好,如果有人想知道的话。 - Anake
是的,在Ubuntu 12.04 64位系统上无法正常工作。我使用的是nVidia GT 240M显卡。我按照这些步骤操作后,现在出现了一个丑陋的黑色启动画面。请更新这个答案(如果可能的话),以便它能在Ubuntu 12.04上正常工作! - Ravi
这个解决方法对我在Ubuntu 12.10 64位系统上使用的Nvidia GeForce GT 620显卡有效。我的实际屏幕分辨率是1600x900,但该分辨率不可用,而1600x1200看起来比我之前得到的更接近“正常”。 - KD353
我确认这在Ubuntu 12.04.2 LTS上可以运行,我有GeForce 680 GTX。 - karni
1只是确认一下,这也适用于Ubuntu 14.04和Nvidia,只需忽略hwinfo部分,因为它不可用...一切都是一样的... - Mohammad ZeinEddin

上述解决方案可能对您无效。在我的情况下,例如hwinfo不显示支持的分辨率。不过,您可以直接从grub获取这些信息。
按下c键进入grub控制台,然后输入insmod video_all,再输入videoinfo以获取支持的分辨率。如果您的本机分辨率受支持,请使用它。要直接使用,请按照所示(即1680x1050x32,因此请包括颜色深度)。按下ESC键返回。
当您获得支持的分辨率后,请编辑/etc/default/grub文件,并添加以下两行内容:
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
GRUB_GFXMODE=1680x1050x32
GRUB_GFXPAYLOAD_LINUX=keep

现在运行以下命令,使启动画面提前显示,并实际提交更改到 grub。
echo "FRAMEBUFFER=y" | sudo tee -a /etc/initramfs-tools/conf.d/splash
sudo update-initramfs -u -k all
sudo update-grub

希望这能帮到你。

1不,hwinfo没有给出正确的分辨率,但我使用了最接近的 - 这个可以正常工作。我还尝试在启动时按下C键(也尝试了Shift和Escape),但无法进入Grub控制台。 - neziric
1如果你没有看到常规的 grub 屏幕(可以选择要启动的内核或操作系统),你需要在启动时按住 SHIFT 键。当你看到 grub 屏幕后,按下 C 键进入控制台。 - mniess
对我来说非常顺利!在我的情况下,grub控制台的命令是'videoinfo'而不是'vbeinfo'。 - BrozzSama
为什么支持的分辨率远低于我的实际分辨率? - ray
+1。但请注意,insmod video_all 始终返回“文件«/boot/grub/i386-pc/video_all.mod»不可用”。在我的Ubuntu 14.04.1上也无法在软件源中找到 hwinfo - 1111161171159459134
正确的命令是insmod all_video而不是insmod video_all。 - guttermonk

这里有一个简单的脚本来解决这个问题:http://www.webupd8.org/2010/10/script-to-fix-ubuntu-plymouth-for.html
我不知道这是否也会解决你的alt+F2问题。
我认为问题在于Nvidia GPU需要专有驱动程序,无法内置到内核中,因此它们在非常晚的启动阶段加载。所以如果我没记错的话,这个脚本会让你的计算机加载一个通用的vesa驱动程序来显示启动画面。这实际上会使你的计算机启动时间变长(但我不知道是秒还是毫秒级别)。
就个人而言,为了一个视觉效果,我不会费心去改变系统的核心部分,但只要它能正常工作,那当然很好。

上述的修复方法对我来说没有起作用,它们不够彻底。我已经在13.04版本上进行了测试,但是博客作者在他的博客中使用了更低版本的Ubuntu。原始信息来自这个博客:http://jechem.blogspot.be/2011/04/fix-plymouth-splash-screen-in-ubuntu-on.html 首先通过运行以下命令安装hwinfo:
sudo apt-get install v86d hwinfo

安装完成后,请运行以下命令并记录最高分辨率。
sudo hwinfo --framebuffer

对我来说,这是模式0x0361:1280x800(+5120),24位,接下来编辑以下文件:
gksu gedit /etc/default/grub

这将打开GRUB配置文件,我们现在要找到GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"并将其更改为以下内容,将您的分辨率与我的分辨率进行更改,并添加颜色深度(对我来说是24,可以是16或32)。
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset video=uvesafb:mode_option=1280x800-24,mtrr=3,scroll=ywrap"

然后找到下面的一行(如有需要,请取消注释),再次更改您的分辨率,注意不要包括颜色深度。
GRUB_GFXMODE=1280x800

保存并退出,然后编辑以下文件。
gksu gedit /etc/initramfs-tools/modules

滚动到文件末尾,添加以下行,再次添加您之前所做的分辨率和色深度:
uvesafb mode_option=1280x800-24 mtrr=3 scroll=ywrap

然后在终端中输入以下命令,然后重新启动:
echo FRAMEBUFFER=y | sudo tee /etc/initramfs-tools/conf.d/splash
sudo update-grub
sudo update-initramfs -u

对我而言,这解决了问题,我尝试了所有其他建议和脚本,它们都不起作用,但这个可以,祝好运!


2无法在软件源中找到 hwinfo。在 Ubuntu 14.04.1 上。 - 1111161171159459134