移除splash导致系统严重卡顿 | Ubuntu 16.04.3 LTS
Hey Ryan,咱们来拆解下这个问题的根源,然后给你搞定——毕竟你得用nosplash解决LUKS磁盘解密时无法输入的问题,咱们得让nosplash正常工作同时摆脱卡顿。
nosplash会导致严重卡顿? 当你把GRUB配置里的splash换成nosplash,系统会跳过启动时的图形化启动界面,直接切换到纯文本控制台。但很多现代Linux发行版(尤其是默认带GNOME/KDE这类桌面的)依赖图形化启动流程,关闭splash后容易触发两个关键问题:
- 终端显示模式冲突:系统没正确初始化纯文本控制台的帧缓冲(framebuffer),导致终端的输入输出刷新效率极低,就出现了输入一个字母等好几秒的情况。
- 显卡驱动加载滞后:如果你用的是NVIDIA/AMD闭源显卡驱动,默认情况下驱动是在图形界面启动阶段才加载的。关闭
splash后,纯文本阶段只能用内核自带的通用驱动,渲染性能拉胯到爆炸,自然就卡顿了。
nosplash和流畅的终端体验 下面按优先级给你几个方案,一个个试:
方案1:指定终端设备(最简单有效)
修改/etc/default/grub文件,把GRUB_CMDLINE_LINUX_DEFAULT这一行改成:
GRUB_CMDLINE_LINUX_DEFAULT="nosplash console=tty1"
然后执行更新GRUB的命令:
sudo update-grub
重启系统试试。这个参数强制系统用第一个纯文本终端(tty1),避免图形化终端服务和纯文本终端打架,大部分情况下就能解决延迟问题。
方案2:添加显卡驱动提前加载参数(针对闭源驱动用户)
如果方案1没用,而且你用的是NVIDIA或者AMD的闭源驱动,试试在GRUB参数里加驱动初始化的配置:
- 要是用NVIDIA驱动:
GRUB_CMDLINE_LINUX_DEFAULT="nosplash console=tty1 nvidia-drm.modeset=1"
- 要是用AMD闭源驱动:
GRUB_CMDLINE_LINUX_DEFAULT="nosplash console=tty1 amdgpu.modeset=1"
同样执行sudo update-grub后重启。这个参数让显卡驱动在系统启动早期就完成初始化,保证纯文本控制台的渲染性能正常。
方案3:禁用帧缓冲(极端情况)
如果上面俩方案都不行,试试关闭内核帧缓冲,强制系统用传统文本模式:
GRUB_CMDLINE_LINUX_DEFAULT="nosplash console=tty1 vga=normal nomodeset"
执行sudo update-grub后重启。这个方法会让终端分辨率变低,但能彻底解决帧缓冲导致的卡顿问题。
你提到必须用nosplash是因为解密时没法输入,本质是splash界面盖住了LUKS的密码输入提示。上面的方案既保留了nosplash,又解决了卡顿,刚好能满足你的需求——启动后直接进入纯文本控制台,就能看到解密密码框并正常输入了。
内容的提问来源于stack exchange,提问作者Ryan

