ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Ubuntu 26.04 命令行安装 GNOME 桌面与远程桌面实战

Ubuntu 26.04 命令行安装 GNOME 桌面与远程桌面实战

上周接手一台只剩命令行界面的机器,系统是 Ubuntu 26.04 的最小化镜像,没有 X、没有显示管理器,开机就是一个 tty 登录框。需求很朴素:把这台机器变成一台能正常用的图形工作站。听起来像是apt install ubuntu-desktop一条命令的事,但我前后折腾了三轮才把它调到“能长期用”的状态——第一轮装完黑屏,第二轮装完没有中文输入法,第三轮才发现远程桌面和 Wayland 打架。所以这篇就把 Ubuntu 26.04 上安装 GNOME 桌面这件事从头到尾拆开讲清楚:哪个元包该选、装之前要核对什么、装完第一眼看到的桌面为什么是“半残”的、以及出问题之后按什么顺序排查。不管你是刚接触 Linux 桌面、想给云主机配个图形界面,还是老手想确认 26.04 这代有什么变化,下面这些内容都能直接拿去用。

1. 先搞清楚你要装的到底是“哪个 GNOME”

很多人踩的第一个坑不是命令写错,而是根本没分清ubuntu-desktop、ubuntu-desktop-minimal和裸gnome元包的区别,装完发现要么多了一堆用不上的软件,要么缺了半套系统组件。这一步想清楚,后面能省掉大量返工。

1.1 Ubuntu 26.04 这一代的 GNOME 基线在哪

Ubuntu 的 LTS 版本通常会锁定一个 GNOME 大版本,并在整个支持周期内做小版本跟进。按过往节奏推算,26.04 大概率会落在 GNOME 49 到 50 这一代区间,桌面本身的交互逻辑和你熟悉的 22.04、24.04 差别不算大:顶栏、活动概览、Workspace 横向排列、扩展走gnome-shell-extension那套机制。真正的变化往往藏在细节里,比如默认会话是不是纯 Wayland、GDM 的登录界面有没有换成新版 greeter、Settings 里某些面板有没有被拆出去。

这意味着两件事。第一,你在网上搜到的老教程大概率还是能用的,apt包名没变、gdm3配置文件路径没变、/etc/gdm3/custom.conf里的WaylandEnable开关还在。第二,涉及“新版 GNOME 特有行为”的部分,比如扩展兼容性、gsettings某些 key 的默认值,就必须以你机器上实际的版本为准,别照抄别人的截图。我一般会在装之前先跑一条命令确认基线:

apt-cache policy gnome-shell | head -n 5

如果系统还没装 GNOME,这条命令只会告诉你候选版本号。装完之后再跑同样的命令,就能看到实际落地的版本,两者对照一下心里就有数了。

另外补一句,26.04 是 LTS,桌面相关包会跟着点版本更新走完整支持周期,所以不用担心装了个“一次性”的桌面环境。这也是我倾向于用官方元包而不是第三方源的原因——升级路径是通的。

1.2 三个元包的实际差异,别凭感觉选

元包(metapackage)本质是一个“依赖清单”,本身没有实际程序,靠依赖关系把一堆包拉进来。Ubuntu 这边主要三个选项,差异比想象中大:

元包大致包含内容装完占用适合场景
ubuntu-desktopGNOME 全套 + 办公套件 + 若干多媒体与工具软件约 5–7 GB当主力桌面机用,希望开箱即用
ubuntu-desktop-minimalGNOME 核心 + 基础系统工具,去掉办公与娱乐软件约 2.5–3.5 GB云主机、虚拟机、只要图形界面不要杂物
gnome/ 裸装若干包只有上游 GNOME 组件,不含 Ubuntu 定制集成约 1.5–2.5 GB想自己控制每一个组件,折腾型用户

第三行那个“裸装”路线要特别提醒:只装gnome-shell和gnome-session是能进桌面的,但你会发现没有网络管理面板、没有声音图标、没有电源管理,甚至窗口管理器行为都怪怪的。因为 Ubuntu 的桌面体验是一堆集成包协作出来的,ubuntu-desktop-minimal帮你把这些“胶水”都配齐了。除非你明确知道自己缺什么,否则不建议从裸 GNOME 起步。

我个人的默认选择是ubuntu-desktop-minimal,然后按需补软件。理由很实在:桌面环境本身该有的它都有,多余的办公套件在服务器场景下纯属占地方,而且少装几百个包意味着少几百个需要更新的对象。

1.3 桌面镜像和“命令行装桌面”不是一回事

有人会问:直接下桌面版 ISO 重装不是更省事?在物理机上确实如此,但在两种场景下你没法重装——云主机只给你一个最小镜像,或者机器上有数据不能动。这时候命令行装桌面就是唯一路径。

但两者结果确实有细微差别。桌面版 ISO 在安装阶段就做了几件事:预先配置好 GDM 的自启动、写入默认的gsettings值、配置好netplan到 NetworkManager 的接管、装好显卡驱动和固件。命令行装桌面时,这些大部分会被包的 postinst 脚本自动完成,但显卡驱动和固件往往需要你手动补一刀——这是后面第三节要重点说的。

提示:如果你在云主机上操作,先确认厂商的控制台是否支持图形输出。有些平台的 VNC 控制台只转发文本模式,装完桌面你也看不到画面,这种就得直接走远程桌面方案,别在本地折腾。

2. 动手前必须核对的四件事

安装命令本身一行就够,但准备工作没做对,后面每一步都是坑。这四件事我每次都会过一遍,总共花不了五分钟。

2.1 软件源是否完整,直接决定你能不能装全

Ubuntu 从 24.04 开始把传统的一行式sources.list换成了 deb822 格式的/etc/apt/sources.list.d/ubuntu.sources,26.04 延续这个做法。这个文件里最关键的是Components那一行,必须包含main restricted universe multiverse四个组件。universe缺失的话,一大堆桌面相关包会直接“找不到”。

grep -A3 "^Types" /etc/apt/sources.list.d/ubuntu.sources

看到类似Components: main restricted universe multiverse就没问题。如果只有main,手动补上再apt update。还有一种常见情况是镜像源配置了但没生效——比如你在云厂商环境里,默认源指向内网镜像,速度很快但偶尔同步滞后,装大包的时候会报 hash 不匹配。这种报错不用慌,换个时间段重试,或者临时注释掉内网源走官方源。

顺便检查一下有没有残留的第三方源。曾经在别人的机器上见过一个很久以前加的 PPA 导致整个apt update失败,进而让安装命令直接不执行。装桌面这种大动作之前,先把源列表清干净。

2.2 磁盘空间怎么估算,别装到一半满盘

这是最容易翻车的地方。ubuntu-desktop下载量大概 1.5–2 GB,解压安装后膨胀到 5–7 GB,再加上/var/cache/apt里的 deb 缓存,峰值可能逼近 10 GB。ubuntu-desktop-minimal相对友好,但也要预留 5 GB 以上的余量。

df -h / /var

我习惯的要求是根分区至少剩 12 GB 才动手装完整版,剩 6 GB 以上才装 minimal 版。低于这个数,先清缓存:

sudo apt clean sudo journalctl --vacuum-size=100M

journalctl那条经常能捞出好几个 G,长期运行的机器日志能堆到离谱的程度。另外提醒一句,如果你挂载了/var独立分区,装包会消耗那里;如果/var/cache/apt空间不够,apt 会直接失败并留下半安装状态,处理起来比空间不足本身麻烦得多。

2.3 显卡和会话类型:Wayland 还是 Xorg

GNOME 默认用 Wayland 会话,这是趋势,也是很多“装完黑屏”问题的根源。分情况说:

Intel 核显和 AMD 显卡基本没问题,开源驱动成熟,Wayland 跑得很稳。NVIDIA 独显就要看驱动版本了,专有驱动在 Wayland 下的表现这些年改善很大,但在某些老卡或者混合显卡笔记本上仍会出状况。虚拟机的虚拟显卡(比如 QEMU 的 virtio-gpu、VMware 的 SVGA)在 Wayland 下也偶尔会有分辨率识别不准的问题。

我的做法是先装,进不去再切 Xorg,而不是一上来就关 Wayland。切换方法在第三节给。但如果你明确知道自己用的是老 N 卡,或者机器是虚拟机,可以提前准备好这个开关,省得黑屏之后手忙脚乱。

装驱动本身也有讲究。ubuntu-drivers这套工具在 26.04 上还在:

sudo ubuntu-drivers devices sudo ubuntu-drivers install

第二条命令会自动挑推荐版本的驱动装上。注意这一步要在装桌面之后做,因为驱动包的 postinst 需要 DKMS 和内核头文件,而ubuntu-desktop-minimal会把linux-headers-generic一并拉进来,顺序反了容易报编译失败。

2.4 用户权限和 root 登录的问题

这条很多人忽略:GNOME 的 GDM 默认禁止 root 直接图形登录,/etc/gdm3/custom.conf里有对应配置。如果你习惯用 root 操作,装完桌面会发现自己登不进去,以为是装坏了。

正确的做法是确保有一个普通用户,并且在sudo或adm组里:

id youruser groups youruser

如果当前只有 root,先建一个:

useradd -m -s /bin/bash demo passwd demo usermod -aG sudo demo

后面所有桌面相关操作都用这个用户登录,需要提权时sudo。这不只是习惯问题,很多桌面组件(比如用户级的gsettings、扩展目录~/.local/share/gnome-shell/extensions)都是按用户维度存配置的,root 会话跑起来会有各种权限错乱。

3. 从 apt 命令到看见登录界面

准备工作做完,真正的安装流程其实很短。但“短”不等于“顺利”,这一节把命令和每一步的意图都说清楚,同时给出卡住时的判断依据。

3.1 更新索引与选择元包安装

第一步永远是更新索引。别跳过,尤其是刚拿到的机器,索引可能是几个月前的快照,直接装会拉到旧版本包,后面升级又是一轮折腾。

sudo apt update sudo apt upgrade -y

upgrade这一步在全新机器上可以省,但在已经跑了一段时间的系统上强烈建议做——避免出现“桌面包装好了但依赖的基础库版本不匹配”的情况。

然后安装。以最小化桌面为例:

sudo apt install -y ubuntu-desktop-minimal

这条命令会拉几百个包,下载量视源速度而定,慢的时候十分钟以上。中途不要 Ctrl+C,apt 的锁机制虽然能恢复,但半安装状态处理起来要额外跑dpkg --configure -a。如果你用的是按流量计费的环境,先跑一次apt install --simulate ubuntu-desktop-minimal看看总量,心里有个底。

安装过程中会弹出一个 debconf 界面,问你默认的显示管理器选哪个。选项通常是gdm3和lightdm,选gdm3——它是 GNOME 的官方配套,集成度最高。如果误选了别的,后面可以用sudo dpkg-reconfigure gdm3改回来。

还有一类交互是 tzdata、keyboard-configuration 这类包的配置提示,直接回车用默认值即可,装完在设置里还能改。

3.2 gdm3 的配置文件该改什么

装完之后,/etc/gdm3/custom.conf是第一个值得看一眼的文件。默认长这样(注释略):

[daemon] #WaylandEnable=false #AutomaticLoginEnable = true #AutomaticLogin = user1

三个开关的用途:

  • WaylandEnable=false:强制走 Xorg 会话,前面说的黑屏、花屏、输入法异常,很多都能靠它绕过。
  • AutomaticLoginEnable/AutomaticLogin:自动登录,家用单用户机器上很实用,省去每次输密码。但服务器场景不建议开,安全性上不划算。

修改后需要重启 gdm3 生效:

sudo systemctl restart gdm3

注意,如果你当前就在图形界面的终端里操作,这条命令会直接把你踢回登录界面,未保存的工作会丢。稳妥点用sudo systemctl isolate multi-user.target切到文本模式再改,改完sudo systemctl isolate graphical.target切回来。

3.3 重启之后卡在黑屏或者停在 tty 怎么办

这是最高频的求助场景。装完重启,屏幕黑着,按 Ctrl+Alt+F2 能切到 tty,说明系统活着,只是图形会话没起来。按这个顺序排查,别乱试:

第一,看 gdm3 服务状态。

systemctl status gdm3 --no-pager

如果显示failed,接着看日志:

journalctl -u gdm3 -b --no-pager | tail -n 60

关键词找Failed to start、no screens found、permission denied。no screens found基本就是显卡驱动或 Wayland 的问题,直接改WaylandEnable=false再重启。

第二,如果 gdm3 是active (running)但屏幕还是黑的,问题可能在显示输出。物理机上检查显示器接的是不是独显接口(有些主板核显被禁用);虚拟机上检查控制台是否支持图形模式。

第三,确认graphical.target是不是默认目标。

systemctl get-default

正常应该输出graphical.target。如果是multi-user.target,说明有东西把默认目标改掉了,手动设回来:

sudo systemctl set-default graphical.target

第四,检查是否有残留的 Xorg 锁文件。非正常关机后/tmp/.X0-lock可能还在,导致新会话起不来,删掉重启。

这四步覆盖了我遇到过的大部分黑屏场景。真正棘手的通常是驱动层面的,那就得看dmesg | grep -i -E "drm|nvidia|amdgpu"里的报错,按具体错误去查。

3.4 装完怎么验证“装全了”

别只看能不能进桌面,有些组件缺失是进桌面之后才发现的。跑几条命令做个基础体检:

# 核心组件是否在位 dpkg -l | grep -E "gnome-shell|gdm3|gnome-control-center|nautilus" | awk '{print $2, $3}' # 会话列表 ls /usr/share/xsessions/ /usr/share/wayland-sessions/ # 关键服务 systemctl status NetworkManager --no-pager systemctl status gdm3 --no-pager

第二条命令列出的会话文件决定了登录界面右下角那个齿轮里有哪些选项。正常应该能看到ubuntu.desktop(可能还有ubuntu-xorg.desktop)。如果只有一个,说明对应会话的包没装全。

NetworkManager这条很关键。最小化镜像装完桌面后,网络管理经常还是systemd-networkd或netplan在管,桌面右上角没有网络图标,点都点不了。处理办法下一节细说。

4. 第一次进桌面后必须补的几刀

能登录进桌面只是及格线。真正决定这套环境“能不能用”的,是登录之后十分钟内你会不会发现一堆东西不对劲。这一节按优先级排。

4.1 中文环境和输入法,不配好等于没法用

默认装完是英文环境,中文显示可能一堆方块。先补语言包和字体:

sudo apt install -y language-pack-zh-hans fonts-noto-cjk fonts-noto-cjk-extra

fonts-noto-cjk是基础中文字体,-extra那包体积不小(几个 G),但包含了更多字重和生僻字覆盖,做文档排版的话值得装。只是日常使用的话,基础包就够。

输入法框架现在主流两个选择:IBus 和 Fcitx5。GNOME 原生集成 IBus,开箱即用但中文输入体验一般;Fcitx5 配置更灵活,词库和皮肤生态好,但要手动接管。

sudo apt install -y fcitx5 fcitx5-chinese-addons fcitx5-frontend-gtk3 fcitx5-frontend-qt5 im-config -n fcitx5

装完注销重新登录才生效。然后在 Fcitx5 配置里添加“拼音”输入法。这里有个坑:im-config写入的是用户级配置~/.xinputrc,如果用sudo跑这条命令,配置会写到 root 家目录,当前用户不生效。去掉sudo再跑一次。

切换到中文环境还有个细节:/etc/default/locale里改成LANG=zh_CN.UTF-8,然后sudo locale-gen。但要注意,把整个系统切成中文会让终端里的一些命令输出也变中文,排查报错时反而不方便。我的习惯是系统语言保持英文,只在需要的地方单独设中文——这样搜报错信息命中率更高。

4.2 网络图标不见、声音没有、关机变重启

这三个是典型的“装完桌面但服务没接管”症状,成因各不同。

网络图标消失,多半是 NetworkManager 没接管网卡。检查:

systemctl status NetworkManager --no-pager nmcli device status

如果nmcli列出的设备状态是unmanaged,说明这块网卡被 netplan 或者其他工具占着。Ubuntu 服务器版的 netplan 配置里,renderer通常写的是networkd。改成NetworkManager:

network: version: 2 renderer: NetworkManager ethernets: eth0: dhcp4: true

改完sudo netplan apply,然后重启 NetworkManager。这一步会短暂断网,远程操作的话提前准备好重连。

没有声音,先确认 PipeWire 或 PulseAudio 在跑:

systemctl --user status pipewire --no-pager

如果提示Failed to connect to bus,说明当前会话不是通过 systemd user session 启动的,常见于手动startx起的会话。正常走 GDM 登录不会有这个问题。

关机变重启,或者电源菜单里没有“关机”选项,一般是policykit权限或者systemd-logind的配置问题。检查/etc/systemd/logind.conf里的HandlePowerKey、HandleLidSwitch这些项,以及当前用户是否在power组之外的正常状态。这类问题排查起来比较碎,思路是先看journalctl -b | grep -i logind有没有拒绝记录。

4.3 高分屏缩放和字体渲染

笔记本高分屏在 GNOME 下的默认缩放经常不对,要么字小得看不清,要么界面元素大得离谱。GNOME 提供整数倍缩放(100%、200%),Wayland 会话下还支持分数缩放。

设置路径在“设置 → 显示 → 缩放”,或者用命令:

gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"

开了这个实验特性,缩放选项里才会出现 125%、150% 这些档位。改完注销重进生效。

字体渲染方面,如果觉得字发虚,可以装gnome-tweaks(包名gnome-tweaks)调抗锯齿和提示(hinting)。中文字体在默认设置下有点“糊”,把 hinting 设成slight、抗锯齿设成grayscale,观感会好一些。这个纯属个人偏好,多试几个组合。

4.4 浏览器和日常软件的补装

Ubuntu 的 Firefox 是 snap 分发的,最小化系统装完桌面后第一次启动 Firefox 会触发 snap 下载,几百兆的内容,源慢的话能卡十几分钟,很容易让人以为浏览器挂了。如果实在受不了,可以换 deb 版的 Chromium 或者其他浏览器。

snap list sudo snap refresh

snap list能看到哪些是 snap 包。加速的话检查snap的代理相关配置是否合理,以及是否有可用的本地缓存。

办公场景下ubuntu-desktop-minimal不带 LibreOffice,需要单独装:

sudo apt install -y libreoffice-writer libreoffice-calc

只装需要的组件,别一把libreoffice全拉,那套东西加起来一个多 G。

5. 把桌面“搬”到远程:无头机器上的图形方案

云主机、机房里没有显示器的机器,装完桌面也看不到。这时候要么走远程桌面协议,要么用虚拟显示。这两条路差别很大,别混。

5.1 GNOME 自带的远程桌面

GNOME 从 42 开始自带gnome-remote-desktop,走 RDP 协议,和 Windows 远程桌面客户端兼容。这是目前无头机器上最省事的方案。

sudo apt install -y gnome-remote-desktop

然后在“设置 → 系统 → 远程桌面”里打开,设置用户名密码。命令行也可以配置:

grdctl rdp enable grdctl rdp set-credentials demo 'yourpassword'

这里有个关键限制:GNOME 的 RDP 服务是用户级的,必须在那个用户的图形会话已经启动的前提下才能连上。也就是说,机器开机后必须有人在本地(或通过自动登录)登进桌面,远程桌面才有画面。这和传统 VNC 那种“服务端常驻、随时连”的模式不一样。

解决自动登录:前面提过的/etc/gdm3/custom.conf里开AutomaticLogin。但机器重启后会自动登录,安全性上要自己权衡。

5.2 完全没有显示输出时的虚拟显示器

如果机器连虚拟显卡都没有(比如某些云主机只有串口控制台),GDM 可能根本起不来。这时候需要造一个虚拟显示设备:

sudo apt install -y xserver-xorg-video-dummy

然后写一份/etc/X11/xorg.conf,指定虚拟分辨率和色深。这份配置的写法比较固定,核心是Device段里用dummy驱动,Monitor段里给一组Modeline。

不过说实话,纯虚拟显示的体验相当一般——没有硬件加速,动窗口都卡。更实用的做法是直接上tigervnc-standalone-server之类能自建 framebuffer 的方案,或者干脆接受“这台机器不需要图形界面”的事实。

5.3 Wayland 会话下 RDP 的兼容性问题

这是我在第三轮返工里踩的坑。GNOME 的 RDP 在 Wayland 会话下工作得很好,但如果你因为显卡问题切到了 Xorg 会话,gnome-remote-desktop的行为会变得不稳定,有时能连上但黑屏,有时直接拒绝连接。

处理办法有两个:要么回到 Wayland(前提是显卡驱动 OK),要么用x11vnc这种基于 Xorg 的方案替代。后者配置简单:

sudo apt install -y x11vnc x11vnc -storepasswd x11vnc -display :0 -auth guess -forever -shared

-auth guess会自动找 Xorg 的授权文件,省去手动指定路径的麻烦。这个方案在 Xorg 会话下很稳,但在 Wayland 下完全不能用——因为 Wayland 的窗口内容对其它进程是不可见的。所以到底用哪套,取决于你最终选的会话类型。

6. 几个真实报错的排查链路

理论和步骤讲再多,不如看几个具体的失败现场。下面这三个是我在 26.04 上实际遇到的,排查顺序可以照着复现。

6.1 apt 中途断掉,dpkg 卡在“需要配置”状态

现象是下一次执行任何 apt 命令都报错:

E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem.

成因通常是安装过程中网络断了、磁盘满了,或者你按了 Ctrl+C。处理链路:

sudo dpkg --configure -a sudo apt --fix-broken install

第一条跑完会尝试把每个处于half-configured状态的包配置完。如果卡在某个包上不动,看具体是哪个:

dpkg -l | grep -E "^i[^i]|^.[^i]" | head -n 20

第二列不是ii的,就是状态异常的包。针对单个包可以:

sudo dpkg --remove --force-remove-reinstreq 包名 sudo apt install 包名

--force-remove-reinstreq是有风险的,只在确认这个包不是关键依赖时用。更稳的办法是先把 dpkg 的锁和临时文件清一遍再重试。整个过程别急着autoremove,半安装状态下自动清理容易误删。

6.2 磁盘满了导致桌面装了一半

df -h看到根分区 100%,apt 报No space left on device。这时候千万别直接删/var/cache/apt里的东西然后重试——先确认哪些包已经装完,哪些只是解压了一半。

sudo apt clean sudo journalctl --vacuum-size=50M du -sh /var/log/* | sort -rh | head

清出空间之后:

sudo dpkg --configure -a sudo apt install -f

如果ubuntu-desktop-minimal本身没装完,重新跑一次安装命令,apt 会跳过已完成的包继续。这种情况我最建议先扩容——虚拟机上扩根分区不难,物理机上清出至少 10 GB 再继续,否则装完桌面一堆东西写不进去,症状会非常诡异。

6.3 想卸载 GNOME 回滚到纯命令行

有时候装完发现不合适,或者想换别的桌面环境,得把 GNOME 清掉。这一步要小心,因为ubuntu-desktop的依赖树很深,粗暴apt remove ubuntu-desktop只删元包本身,组件全留着。

相对干净的卸载顺序:

sudo apt remove --purge ubuntu-desktop ubuntu-desktop-minimal sudo apt autoremove --purge sudo systemctl set-default multi-user.target

autoremove会把不再被依赖的包清掉,这一步能回收几个 G。但注意它会顺手动一些你手动装过的、恰好被标记为“自动安装”的包。所以执行前先看一眼模拟结果:

sudo apt autoremove --purge --simulate

确认没有要保留的东西再真跑。另外,卸载桌面不会自动清理用户目录下的配置(~/.config、~/.local),想彻底干净就手动删。

还有一个更稳妥的思路:在装桌面之前,用apt-mark showmanual导出一份当前手动安装的包列表存档。将来要回滚时,以这份列表为准反向清理,比靠autoremove猜要靠谱得多。

apt-mark showmanual > ~/manual-before-desktop.txt

这条命令花不了两秒,但能省掉将来一小时的纠结。

最后分享一个小经验:装 GNOME 这类大件之前,先给系统做个快照或者timeshift备份,尤其是虚拟机和云主机,回滚成本几乎为零。我吃过一次亏——为了省事跳过备份,结果驱动装崩了进了 rescue 模式,一个个包往回捋花了整整一个下午。从那以后,凡是涉及几百个包的批量安装,快照永远是第一步,比任何排查技巧都管用。

返回列表