Ubuntu 18.04黑屏修复实战:tty恢复图形界面与网络配置指南
2026/9/19 19:13:54 网站建设 项目流程

1. 黑屏不是一种病:先判断你遇到的是哪一类故障

大概很多Ubuntu用户都经历过这个瞬间:按了开机键,硬盘灯在闪,风扇在转,但显示器就是一片漆黑,或者只有一个孤零零的光标在屏幕左上角跳。第一次遇到的时候,我甚至下意识按了两下显示器开关,确认不是显示器坏了。

这篇文章就是写给正在被Ubuntu 18.04黑屏折磨的朋友们。我尽量把话说明白:不同原因造成的黑屏,恢复手段完全不一样。而且绝大多数情况下,你不需要重装系统,甚至不需要U盘启动盘,靠系统里一个被很多人忽略的字符界面——也就是常说的tty——就能把图形界面救回来。

先说结论:Ubuntu 18.04黑屏最常见的四类原因,按出现概率排序大概是这样的。

故障类型典型表现恢复难度
显卡驱动异常开机后黑屏或卡在登录界面前,tty可以正常进入中等,需要联网
显示管理器崩溃能进tty,但startx或systemctl重启lightdm无效较低
磁盘空间写满或文件系统损坏开机直接进emergency mode,或黑屏前报错较低
更新中断/内核与驱动不匹配重启后进不去桌面,tty下还能操作中等

怎么判断自己属于哪一类?有个笨但有效的办法:开机黑屏后,直接按组合键Ctrl + Alt + F2,如果屏幕出现了一个需要输入账号密码的命令行界面,那你系统根本没死,只是图形层出了问题。这时候心态稳一半。

我会把五种真正实操过的恢复方法按顺序写出来,再单独讲一讲黑屏状态下怎么把网络配置好——这个很多人栽跟头,因为图形界面的网络设置面板打不开,命令行里又不知道从哪儿下手。

为什么tty这么关键?因为Linux系统说白了就是内核加一堆服务,图形界面只是其中一个叫显示管理器的服务(lightdm或gdm3)拉起来的。它挂了,内核还在,文件系统还在,命令行这种最底层的交互方式就永远是你的后路。你可以理解为:图形界面是精装修的客厅,tty是毛坯房的应急通道,房子塌没塌,得走应急通道去看。

顺便说一句,如果黑屏时连Ctrl + Alt + F2都没反应,长按电源键强制关机,再开机时连续按Shift键调出GRUB菜单,选“Advanced options for Ubuntu”进恢复模式,这个方法后面会细说。

2. 五种从tty恢复图形界面的实操方法(按使用频率排序)

2.1 方法一:重启显示管理器,解决假死和登录循环

很多时候黑屏不是驱动坏了,而是显示管理器卡死了。表现是:开机能看到登录框,输密码后黑屏,然后又回到登录框,或者干脆屏幕是黑的但能听到系统提示音。

这种场景下,进入tty后第一件事就是重启显示管理器。

先确认自己用的是哪个显示管理器,Ubuntu 18.04初始版本用lightdm,后来默认改成了gdm3。检查命令:

cat /etc/X11/default-display-manager

输出是/usr/sbin/gdm3就说明用的是gdm3,输出是/usr/sbin/lightdm就说明是lightdm。

然后重启它:

# 如果你的系统用的lightdm sudo systemctl restart lightdm # 如果用gdm3 sudo systemctl restart gdm3

重启后按Ctrl + Alt + F1回到图形界面,大概率就恢复正常了。

如果systemctl restart失败,或者重启后依然黑屏,别急,试试把显示管理器彻底停掉再启动:

sudo systemctl stop lightdm sudo pkill X sudo systemctl start lightdm

这里有个细节值得多说一句:很多人改配置或者装完显卡驱动后需要重启显示管理器,但直接reboot整个系统反而可能进不去桌面,因为驱动加载顺序出问题。只重启显示管理器通常更快、更安全,这也是为什么这个方法是第一选择。

如果重装了几次驱动后lightdm彻底起不来,可以换个思路:用startx手动启动一个简易桌面看看。tty下执行:

startx

如果startx能进入桌面,说明X服务本身没问题,问题出在显示管理器;如果startx报错,那基本就锁定显卡驱动问题了,直接跳到第二种方法。

2.2 方法二:NVIDIA显卡驱动修复,干掉最大的黑屏元凶

Ubuntu 18.04配NVIDIA独显,几乎是一对天然的冤家。我见过的黑屏案例里,显卡驱动相关的占了差不多一半。内核一旦更新,NVIDIA驱动没跟上,重启后就是黑屏等着你。

进入tty后,先确认驱动到底处于什么状态:

nvidia-smi

如果提示NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver,那就是驱动和当前内核不匹配的实锤了。

这时候有两种走法。第一种,卸载现有驱动回滚到开源驱动nouveau,让系统能进桌面:

sudo apt purge nvidia-* sudo apt autoremove sudo apt install ubuntu-desktop sudo reboot

第二种,重新安装匹配的驱动。我建议先看看当前内核版本:

uname -r

比如显示5.4.0-144-generic,再到NVIDIA官网查这个内核对应的驱动版本,或者直接用系统推荐的版本安装:

sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt update sudo apt install nvidia-driver-470

装完后重启前记得:

sudo update-initramfs -u

这一步很多人会忘。它会把新的驱动模块写进内核的initramfs镜像里,不执行的话,重启后驱动可能依然没被加载。

这里有一个我踩过很多次的坑:安装NVIDIA驱动时如果桌面环境还在跑,装完经常起不来,因为X服务占着显卡设备。所以强烈建议tty下先停掉显示管理器再装驱动:

sudo systemctl stop lightdm sudo apt install nvidia-driver-470 sudo reboot

另外,部分笔记本是双显卡(Intel集显+NVIDIA独显),这种情况建议在BIOS里把显卡模式切到独显直连再操作,或者直接在grub里启用NVIDIA模块参数。/etc/modprobe.d/blacklist-nvidia-nouveau.conf这个文件也要检查一下,里面应该有:

blacklist nouveau options nouveau modeset=0

没有的话手动补上,不然开源驱动和闭源驱动打架,黑屏就是家常便饭。

2.3 方法三:引导参数加nomodeset,绕开内核加载驱动的雷区

如果重启后黑屏连grub菜单都看不到,或者一进图形界面就花屏,这个方法的救场概率很高。

核心思路是:让内核先别加载显卡相关驱动模块,用基础VGA模式把系统拉起来,再慢慢治理。

操作路径:

  1. 开机时反复按Shift键(如果是UEFI模式,可能需要按Esc),进入GRUB菜单。
  2. 选中默认的内核条目,按e键进入编辑模式。
  3. 找到以linux开头的那一行,在末尾quiet splash后面加上nomodeset
  4. Ctrl + XF10启动。

我自己的经验是,加上nomodeset后,90%的驱动型黑屏都能先进入桌面,分辨率可能很低,但至少能操作。进系统后再用上面的方法二修驱动,修好了再把nomodeset从grub配置里去掉。

如果你想永久生效,把参数写进grub配置文件:

sudo vim /etc/default/grub

找到这行:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

改成:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"

然后执行:

sudo update-grub

这里说个细节:为什么nomodeset能救黑屏?简单说,内核正常情况下会去初始化显卡驱动、设置显示模式,这个环节在驱动有问题的机器上会直接导致显示器黑屏。nomodeset让内核跳过这些操作,改由BIOS或UEFI固件来做基本的显示输出。代价是性能差、分辨率低,但换来的是系统能起来。

顺带一提,如果你的显卡是AMD的,可以试试radeon.modeset=0amdgpu.modeset=0,Intel集显问题相对少,但i915.modeset=0在某些老内核上也能救急。

2.4 方法四:恢复模式加fsck,处理文件系统损坏型黑屏

这类黑屏的特征非常明显:开机后不是完全黑屏,而是屏幕上有几行字在滚动,最后停在Give root password for maintenance或者直接进入emergency mode,然后给你一个root shell。

这是文件系统出问题的信号。最常见的原因是之前的非正常关机,比如断电、强制关机,导致根分区或/boot分区出现了文件系统错误。系统为了保证安全,会拒绝进入图形界面。

恢复思路:

  1. 在grub菜单里选 “Advanced options for Ubuntu”,然后选带(recovery mode)的内核条目。
  2. 进入恢复菜单后,先选fsck,直接回车。

系统会提示是否重新挂载文件系统,选yes让它检查并修复。

  1. 检查完选resume继续正常启动。

如果fsck过程中提示错误数量比较多、没法自动修复,就只能进入root shell手动操作:

fsck -y /dev/sda1

-y参数的意思是遇到问题自动回答yes,别中途卡住。注意,执行fsck前要先把对应分区卸载了,根分区没法直接卸载的话,用恢复模式的root shell操作,此时文件系统是只读挂载的,先执行mount -o remount,rw /重新以读写方式挂载,再检查其他分区。

还有一个很隐蔽的问题:如果/boot分区满了,每次内核更新都写不进新的vmlinuz和initrd.img,系统重启时就可能直接挂掉。这种黑屏往往出现在一次apt upgrade之后。排查方法:

df -h /boot

如果使用率接近100%,手动删掉几个旧内核就好:

dpkg --list 'linux-image-*' # 看看装了多少个内核 sudo apt autoremove --purge

或者手动卸载指定旧内核:

sudo apt purge linux-image-5.3.0-42-generic

清理完再sudo update-grub。这里提醒一句,删内核的时候至少保留最近的两个版本,万一新内核有问题还能启动旧的顶上。

2.5 方法五:清理磁盘空间与旧内核,救回被塞满的系统

你可能想不到,Ubuntu 18.04黑屏还有一个非常常见但容易被忽略的原因:根分区磁盘满了。图形桌面环境启动时要在/tmp/var/log等目录写入大量临时文件,写不进去,显示管理器就起不来,表现就是黑屏或者卡在登录界面。

判断方法很简单,tty下执行:

df -h /

/的使用率是不是100%或者接近100%。如果是,动手清理。

最优先清理的是日志文件目录/var/log,这里经常躺着好几个G的旧日志:

sudo du -sh /var/log/* sudo journalctl --vacuum-time=3d

journalctl --vacuum-time=3d这条命令让systemd日志只保留最近3天的,很有效。我见过一台跑了一年多的服务器,光日志就吃了16G空间。

另外apt的缓存也可以清:

sudo apt clean sudo apt autoclean

临时目录重启本来就会清,但如果系统起不来,也可以在tty下手动清:

sudo rm -rf /tmp/*

清理完确认空间:

df -h /

只要使用率降到90%以下,再重启显示管理器,桌面大概率就回来了。

说到根分区写满,我得插一句:装Ubuntu时很多人贪方便只分一个/分区,不分独立的/home,甚至把/boot也并进去。这种分区方式平时没感觉,一旦系统出问题要恢复,能操作的空间就很小。如果还没遇到黑屏的朋友,建议有机会重装或加盘时,还是把/home独立出来,系统坏了重装不影响用户数据,这是用无数次教训换来的。

3. 黑屏状态下把网络配置好:tty里的手写网络配置实战

3.1 为什么黑屏后往往要先联网

很多修复操作离不开网络:重装驱动要apt源,下载依赖要联网,更新软件包也要联网。如果系统是有线连接,DHCP默认开着的话,黑屏状态下其实网络大概率已经通了,你不需要配置任何东西。

但如果你的机器是手动指定的静态IP,或者网络接口没被DHCP自动拉起来,那tty下面就上不了网。这时候你才会真正体会到图形界面那个网络设置面板有多好用——命令行下的网络配置对于不熟的人简直是一场噩梦。

我先给一个快速验证命令:

ip addr show

看看网卡接口(通常叫ens33eth0之类的)有没有拿到IP。如果显示192.168.x.x之类的内容,说明网络已经通了,直接跳到3.3节验证DNS,不用折腾配置。

如果接口没有IP,或者你想配置成静态IP,接着往下看。

3.2 netplan配置文件详解:DHCP与静态IP两种写法

Ubuntu 18.04起,系统网络配置从/etc/network/interfaces换成了netplan,配置文件在/etc/netplan/目录下,典型文件名是01-netcfg.yaml或者50-cloud-init.yaml

用vim打开编辑:

sudo vim /etc/netplan/01-netcfg.yaml

DHCP自动获取IP的写法:

network: version: 2 ethernets: ens33: dhcp4: true

注意YAML文件的缩进,netplan对格式要求极其严格,一个空格不对就报错。我建议用空格缩进,不要用Tab键,这个习惯能帮你避免很多低级但折磨人的问题。

静态IP的写法:

network: version: 2 ethernets: ens33: dhcp4: false addresses: - 192.168.1.100/24 gateway4: 192.168.1.1 nameservers: addresses: [114.114.114.114, 8.8.8.8]

gateway4这个键在Ubuntu 20.04里已经废弃了,但18.04还能用。如果用的是更新的版本,网关注释写法有变化,按当前版本文档来。

保存退出后执行:

sudo netplan apply

网卡就会按配置重新加载。然后ip addr show验证一下IP是不是已经生效。

顺带说一句,改netplan配置时如果人在远程,一定小心别把自己断了线。万一配置写错导致网络起不来,tty下还能改回来,但如果人在机房外面,就真的要跑一趟了。保守做法是改完配置后先sudo netplan try,这条命令会给你120秒确认时间,超时自动回滚,非常安全。

3.3 用ip命令验证网络,以及Xshell远程连接的小技巧

网络配置好后,验证有几个关键点:

# 查看网卡状态和IP ip addr show # 查看默认路由 ip route show # 测试网关连通性 ping -c 4 192.168.1.1 # 测试DNS解析 nslookup baidu.com

如果IP有、网关能通,但nslookup解析不了域名,多半是DNS配置的问题。可以临时改一下测试:

sudo vim /etc/resolv.conf

加上或改成:

nameserver 114.114.114.114 nameserver 8.8.8.8

但注意,Ubuntu 18.04会拿netplan配置里的nameservers去覆盖/etc/resolv.conf,临时改的会被重置。所以正确做法是回到3.2节,把DNS写进netplan的yaml文件里,然后sudo netplan apply

网络通了之后,如果你手头有另一台电脑,强烈建议用SSH远程连接到这台Ubuntu机器上操作。在tty下面敲命令又累又容易误触,而SSH远程就没有这些烦恼,复制粘贴日志也方便。

确认openssh-server装好了没:

sudo apt install openssh-server -y sudo systemctl start ssh sudo systemctl enable ssh

然后用Xshell从Windows连接:

  1. 打开Xshell,新建会话。
  2. 主机填Ubuntu的IP地址,端口22。
  3. 用户认证填你Ubuntu的账号密码。

连上之后就是熟悉的命令行操作了。这个技巧不只是黑屏救急时好用,日常远程管理服务器也用得上。搜索词里“xshell连接ubuntu网络配置”的热度一直很高,其实核心就是三步:装openssh-server、确保网络通、防火墙放行22端口。

防火墙的命令顺便贴一下:

sudo ufw allow OpenSSH sudo ufw enable

如果之前开过ufw,不放行22端口的话SSH会被拒掉,连防火墙的坑都替你们踩过了。

3.4 nmcli是另一条路:NetworkManager没坏时的备选方案

netplan配完如果折腾不明白,还有一条路:用NetworkManager的命令行工具nmcli。前提是你的系统装了NetworkManager,桌面版通常是预装的。

查看网络设备状态:

nmcli device status

开启一个网卡的DHCP:

sudo nmcli device connect ens33

手动配置静态IP:

sudo nmcli con mod ens33 ipv4.addresses 192.168.1.100/24 sudo nmcli con mod ens33 ipv4.gateway 192.168.1.1 sudo nmcli con mod ens33 ipv4.dns "114.114.114.114 8.8.8.8" sudo nmcli con mod ens33 ipv4.method manual sudo nmcli con up ens33

nmcli的好处是它的修改是动态生效的,不需要像netplan那样重启网络服务,在黑屏救急这种本就不稳定的状态下,少一次网络重启就少一分风险。

但也要注意,nmcli和netplan同时管理同一个接口的话可能会打架。两个方案选一个用就好,别混着来。一般Netplan管理的是系统原生网卡,NetworkManager管理的是桌面环境网卡,Ubuntu桌面版里两者默认是协作模式,netplan把非受管设备交给NetworkManager处理。你可以用nmcli device status看某块网卡是不是被标记为unmanaged,是的话就归netplan管,不是就可以用nmcli。

4. 那些真正让系统黑屏的坑:复盘四次真实故障

4.1 案例一:内核升级后NVIDIA驱动失效

这个案例很典型。有个朋友跑的是Ubuntu 18.04 + RTX 2060,某天执行了sudo apt upgrade,内核从5.4.0-135升到5.4.0-139,重启后黑屏。

当时我远程指导他操作的排查流程是这样的:

  1. 开机黑屏,按Ctrl + Alt + F2进tty,输入账号密码。
  2. 执行nvidia-smi,报错“couldn't communicate with the NVIDIA driver”。
  3. 执行ls /usr/src/看有没有装对应内核版本的驱动源码,发现5.4.0-139头文件缺失。
  4. 让他执行sudo apt install linux-headers-5.4.0-139-generic补上内核头文件。
  5. 然后sudo apt install nvidia-driver-470,让dkms重新编译驱动模块。
  6. sudo update-initramfs -u
  7. 重启,问题解决。

这个案例的根本原因是NVIDIA驱动通过dkms方式构建内核模块时,依赖与当前内核版本匹配的linux-headers。内核升级后如果没有安装对应的headers包,dkms就编译失败,驱动模块缺失,NVIDIA驱动自然就失效了。

所以给一条实用建议:升级内核后,重启前先看一眼/var/lib/dkms/下面有没有编译失败记录。如果发现驱动模块状态是badfail,先别重启,顺手把headers补上,能省掉很多麻烦。

4.2 案例二:/boot分区写满导致更新中断

另一个朋友的情况更隐蔽:他装了双系统,Ubuntu只给了50G空间,其中/boot单独分区的只有200M。用了两年多,每次内核更新都是一次碰运气。直到有次执行sudo apt upgrade时直接报错,重启后黑屏。

tty下进系统,第一件事就是看磁盘:

df -h

/boot使用率100%。内核镜像、initrd.img文件把200M塞得满满的,新内核的initrd文件写不进去,更新中断,grub也无法生成完整的菜单项。

处理办法:

dpkg --list 'linux-image-*' # 列出所有内核 sudo apt purge linux-image-5.4.0-139-generic # 删掉不用的旧内核 sudo update-grub

等空间腾出来后再执行:

sudo apt -f install sudo apt upgrade

正常开机。这个案例说明一个问题:/boot分区如果独立划分,还是稍微给大一点,500M起步比较稳妥,常年更新内核的话1G也不过分。省那点磁盘空间,最后花十倍的时间来修。

4.3 案例三:自己改坏grub配置

还有一个糟心的案例是用户自己折腾grub主题,改坏了/etc/default/grub,把GRUB_CMDLINE_LINUX_DEFAULT写错了参数,更新grub的时候没报错,但重启后直接黑屏。

这种情况连grub菜单都看不到。解决思路是强制进入grub的配置编辑界面:

  1. 开机时按Shift(BIOS模式)或Esc(UEFI模式)进入grub菜单。
  2. 选择任意内核条目,按e编辑。
  3. 检查linux行,看有没有明显不合理的参数,把可疑参数删掉。
  4. Ctrl + X启动,如果能进系统,再把/etc/default/grub改正。

如果没有外接键盘或者Shift键没抓到菜单,有个兜底办法:用Ubuntu安装U盘启动,选择“Try Ubuntu”,然后把硬盘挂载起来改grub配置:

sudo mount /dev/sda2 /mnt sudo mount /dev/sda1 /mnt/boot sudo chroot /mnt # 在chroot环境里修复 vim /etc/default/grub update-grub exit

chroot是个非常强大的救急手段,相当于在U盘系统里进入硬盘上的原系统,直接修配置。所有在tty里因为系统起不来而没法做的事情,在chroot里都能做。这里的关键是挂载顺序:先挂根分区,再挂/boot,如果要联网修驱动,还需要先把网络配置拷进去:

sudo cp /etc/resolv.conf /mnt/etc/resolv.conf sudo mount --bind /proc /mnt/proc sudo mount --bind /dev /mnt/dev sudo mount --bind /sys /mnt/sys

之后chroot进去就能apt update那些操作了。

4.4 案例四:双系统时间错乱引发的连串问题

双系统黑屏的另一个隐藏坑是系统时间。Windows默认把硬件时间当本地时间,Ubuntu默认当UTC时间。两套系统如果同时开着,每次切换系统都会把硬件时间改一次,虽然不至于直接黑屏,但会导致某些依赖时间校验的服务起不来。

这个问题的解法很简单,让Ubuntu也把硬件时间当本地时间:

sudo timedatectl set-local-rtc 1

然后:

sudo hwclock --systohc

同步时间后重启,就能避免因为时间混乱导致的各类异常。

还有一个双系统常见的黑屏原因是引导问题:如果Windows更新后覆盖了grub,开机直接进Windows,根本看不到Ubuntu的启动项。这种不算严格意义的黑屏,但很多人会以为是系统坏了。修复方法是再次进入grub启动菜单,如果看不到,就用安装U盘的“Try Ubuntu”进live系统,然后重装grub:

sudo mount /dev/sda2 /mnt sudo mount /dev/sda1 /mnt/boot sudo grub-install --boot-directory=/mnt/boot /dev/sda sudo update-grub

这招属于双系统救急的保留项目,出现频率不低,提前备着。

5. 保命习惯与tty下的日志排查命令速查

五种恢复方法讲完,网络配置也捋了一遍,最后说点软性的东西。我见过太多人在黑屏面前手足无措,就是因为平时完全没有准备。如果你不想下次黑屏时再翻这个指南,下面三个习惯建议尽早养成。

习惯一:内核更新后先确认驱动再重启。

apt upgrade如果升级了linux-*相关的包,重启前用nvidia-smidkms status确认显卡驱动模块编译正常。发现异常就sudo apt install linux-headers-$(uname -r),缺什么补什么。

习惯二:重要的分区独立划分。

/home独立出来,/boot给足500M到1G。系统坏了可以重装,但个人数据没了就真的没了。这个建议听起来老生常谈,但每次遇到数据差点丢掉的用户,都后悔当初没这么干。

习惯三:有事没事记一下tty切换的快捷键。

Ctrl + Alt + F1F6是字符终端,F7F1通常是图形界面(版本不同有差异)。这个肌肉记忆练好了,比什么修复工具都管用。

最后是日志排查命令速查表,黑屏时在tty里对照着执行:

命令用途
systemctl status lightdm查看显示管理器运行状态
journalctl -xe查看最近的系统错误日志
journalctl -b -1查看上一次启动的日志
dmesg | tail -50查看内核日志的最后部分
cat /var/log/Xorg.0.log | grep EE查看X服务错误信息
df -h检查磁盘空间
dpkg --list | grep linux-image列出已安装内核

我自己常用的排查顺序是:先df -h排除磁盘,再nvidia-smi排除驱动,然后journalctl -b看日志。这就像一个漏斗,从最可能、最好查的开始过滤,往往十分钟内就能定位问题。

Ubuntu 18.04现在已经不是最新版本,但还有大量存量机器在跑。这篇文章里所有方法在18.04上测试过,20.04、22.04的tty操作逻辑也一样,只是netplan配置的细节略有不同。遇到黑屏时不妨按顺序一项一项试,大部分情况下,系统都能在十分钟内被救回来,不用急着重装。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询