1. 为什么一台 2018 年的 Surface Go 值得折腾 Ubuntu 22.04
我这台 Surface Go 是一代低配,Pentium Gold 4415Y、4GB 内存、64GB eMMC。买它的时候想的是"随身记笔记",用了几年之后发现,Windows 在这块硬件上跑得越来越吃力:开机两分钟,打开浏览器风扇没有但机器烫,待机一晚上掉电掉到关机。真正让我下决心刷 Ubuntu 22.04 的,不是"我想折腾 Linux"这种情怀,而是某天我打开系统更新,它告诉我需要 20GB 可用空间——而我整机只有 64GB。
Surface Go 刷 Ubuntu 22.04,这件事在网上能搜到的内容大多是零散的论坛帖:有人说"开箱即用",有人说"触摸屏废了",有人说"睡一觉掉一半电"。这些说法都对,但都不完整——差别在于你有没有装 linux-surface 的定制内核,有没有处理 eMMC 的写入策略,有没有把休眠配起来。这篇文章就是把这几个问题按我实际操作的顺序讲清楚,从 UEFI 里该关什么,到启动盘为什么必须用 DD 模式写,到装完内核之后触摸屏还是不动该怎么查。
先说清楚适合谁看:如果你手上是 Surface Go 一代或者二代,想把它从"吃灰的 Windows 平板"变成一台能写代码、能看 PDF、能带出门的轻量 Linux 设备,这篇可以照着做。如果你只是想体验 Ubuntu,随便找台虚拟机更快,没必要碰这台机器——它的硬件坑比普通笔记本多得多。如果你手上是 8GB + 128GB 的版本,那恭喜你,我下面提到的很多妥协你都可以跳过。
1.1 这台机器的硬件底子决定了折腾的上限
先摆事实,避免后面白折腾。Surface Go 一代的核心配置是:Intel Pentium Gold 4415Y,双核四线程,1.6GHz,没有睿频,无风扇被动散热;内存 4GB 或 8GB LPDDR3,焊死不可换;存储分两种,64GB 是 eMMC,128GB 是 NVMe SSD;屏幕 10 英寸 1800x1200,比例 3:2,像素密度约 220 PPI;无线网卡是 Marvell 的 AVASTAR 系列,Linux 下走mwifiex驱动;触摸屏是 Intel 的 IPTS(Intel Precise Touch and Stylus)方案,这也是为什么后来必须装定制内核。
这里最关键的不是 CPU,是存储。64GB 版用的 eMMC,顺序读大概 200-300MB/s,顺序写 100MB/s 上下,这些数字看着还行,但随机 4K 小文件读写只有几百 IOPS,跟十年前机械硬盘一个水平。系统装完之后,第一次apt upgrade涉及几千个小文件,就是这个环节最容易卡死、最容易超时失败。理解了这一点,后面很多操作(比如为什么不勾选"安装时下载更新")就顺理成章了。
第二个关键点是无风扇。4415Y 的热设计功耗只有 6W,长时间跑满会一路升到 70 度以上然后降频,表现就是"前两分钟挺快,后面越来越卡"。这不是系统问题,是物理限制。所以在这台机器上,别指望跑编译、跑虚拟机、跑本地大模型。
1.2 Ubuntu 22.04 在这台机器上到底是"能用"还是"好用"
我的结论分三档。轻办公和阅读:完全可用,浏览器开 5 到 8 个标签、WPS 或者 LibreOffice 看文档、Evince 看 PDF、MPV 放 1080p 视频,体验比我预期好,尤其是 4GB 内存下 Linux 的响应速度明显优于同配置的 Windows。开发工具:VS Code 打开中型项目能用,但索引会卡;编译类工作基本别想,一个中等规模的 C++ 项目能把它烤到降频。重负载:虚拟机、容器集群、视频剪辑,想都不要想。
还有一点必须提:续航和待机,Ubuntu 打不过 Windows。Surface 系列的电源管理是微软深度定制的"连接待机"(Connected Standby),Windows 下合盖一晚上掉 3% 到 5%。Linux 侧默认走的是s2idle,深度不够,一晚上掉 15% 到 30% 是常态。这个问题后面第五章会用休眠来解决,但你得先接受"这台机器在 Linux 下的待机体验天然不如 Windows"。
1.3 动手之前必须定的三个取舍
在格式化之前,有三件事必须先想清楚,因为它们是互相关联的,中途改主意成本很高。
| 取舍项 | 方案 A | 方案 B | 我的选择与理由 |
|---|---|---|---|
| 系统形态 | 单系统 Ubuntu | 双系统保留 Windows | 64GB 选单系统,128GB 才考虑双系统 |
| 桌面环境 | GNOME(默认) | Xfce / LXQt | 4GB 选 Xfce,8GB 可以留 GNOME |
| Secure Boot | 关闭 | 开启 + 注册 MOK | 直接关,省掉一堆麻烦 |
单系统和双系统的分界线就是存储容量。Windows 11 装完加系统更新,占 30GB 以上很正常,再给 Ubuntu 分 25GB 是极限压缩,两个系统都难受。64GB 的 eMMC 版本,我建议直接全盘给 Ubuntu,Windows 上唯一不可替代的东西是固件更新,而这个可以在刷之前一次性做完。
桌面环境的选择影响比想象中大。Ubuntu 22.04 默认 GNOME 42,跑 Wayland 会话,在 4GB 内存上,光桌面加一个 Firefox 就能吃掉 2.5GB 左右。换成 Xfce 或者 LXQt,日常占用能降到 800MB 到 1GB。代价是触摸体验和分数缩放不如 GNOME,需要你自己权衡——我的做法是:先装 Ubuntu 22.04 桌面版,用一段时间感受卡顿程度,再决定要不要sudo apt install xubuntu-desktop补一套 Xfce 会话。
Secure Boot 这个后面会展开讲。简单结论是:Ubuntu 官方镜像本身就带 Canonical 签名的 shim,开着 Secure Boot 也能启动;但 linux-surface 的定制内核是第三方自签名的,要开 Secure Boot 就必须走 MOK 注册流程。为了避免在装系统阶段引入额外变量,我选择先关掉,等系统跑稳了再考虑要不要开回来。
2. 装机前夜:把准备工作做扎实
这一章的内容看起来像"准备工作",但实际上决定了后面一小时是顺利还是抓狂。我在第一次尝试时就是在启动盘这一步翻车,白折腾了一晚上。
2.1 Surface UEFI 里那几项必须改的设置
Surface 进 UEFI 的方式和普通笔记本不一样:设备完全关机,按住音量加键不放,再按电源键,等 Surface 标志出现后松开音量键。不要按音量减,那是"从 USB 启动"的快捷键,两个键的功能完全相反,我第一次就按错了。
进去之后你会看到一个触屏界面的 UEFI(Surface 的固件界面支持触摸,也可以接键盘盖用方向键操作)。需要改的有这几项:
- Security → Secure Boot:改成 Disabled。这是所有第三方系统安装的前提。
- Boot configuration → 启动顺序:把 USB Storage 调到最上面。有些固件版本只有在插着 U 盘的情况下才会显示这一项,所以先插上盘再进 UEFI。
- Battery Limit(充电限制):这个藏在 Devices 或者 Power 相关菜单里,作用是只把电池充到 50% 以延长寿命。如果它开着,Linux 下的电量显示会非常奇怪,甚至出现"插着电却越用越少"。一定要改成 Disabled。
- Enable Boot from USB / 允许 USB 启动:确认是打开状态。
提示:Surface 的 UEFI 没有传统 BIOS 那种"CMOS 电池",设置是持久化的。但每次固件更新之后,Secure Boot 有可能被重置回 Enabled,双系统用户升级完固件后如果发现直接进 Windows,先回来检查这一项。
另外提醒一句:Surface Go 只有一个 USB-C 口,如果你用的是 USB-C 转 USB-A 的转接头,UEFI 阶段能不能识别到 U 盘取决于转接头的质量。这种时候接一个带独立供电的扩展坞会稳妥很多。
2.2 启动盘制作:为什么 DD 模式比 ISO 模式更省心
这是我这篇文章里最想强调的一条实操经验。
Ubuntu 22.04 的桌面 ISO 大约 4.7GB,里面最占地方的是casper/filesystem.squashfs,这个文件本身超过 4GB。而 FAT32 文件系统的单文件上限正好是 4GB。Rufus 默认的"ISO 镜像模式"会试图把 ISO 内容解压到一个 FAT32 分区里,遇到这个超大文件就会报错,或者提示你改用 NTFS 分区——而 NTFS 分区要能启动,依赖一个额外的 UEFI:NTFS 引导程序,在 Secure Boot 关闭的情况下虽然能用,但偶尔会在某些固件上抽风。
解决办法就是用DD 模式(Rufus 里叫"DD 镜像模式",balenaEtcher 则只有这一种模式)。它的原理是把整个 ISO 按字节原样写入 U 盘,Ubuntu 官方 ISO 本身就是一个 isohybrid 镜像,里面已经包含了独立的 EFI 分区和 ISO9660 数据区,ISO9660 不受 FAT32 单文件 4GB 的限制。写入之后你在 Windows 里看这个 U 盘会显示容量只有几 MB,这是正常的,别以为写坏了。
几个具体提醒:
- U 盘至少 8GB,推荐 USB 2.0 的老盘。Surface 的固件对部分高速 USB 3.x 盘兼容性一般,出现过"UEFI 里认不到盘"的情况,换一个老 U 盘反而成功。
- 写入前用
sha256sum校验镜像,Windows 下可以用 PowerShell 的Get-FileHash。这一步别省,下到半个包的话安装过程会在奇怪的阶段失败。 - Ventoy 也是可行方案,它用 exFAT 分区存 ISO,天然绕开 4GB 限制,EFI 引导分区是独立的。但要保证 Ventoy 版本足够新,老版本在一部分 Surface 固件上引导会卡住。
2.3 只有一个 USB-C 口,外设该怎么接
这是 Surface Go 装机过程中最现实的物理限制。理想配置是这样:
- 一个 USB-C 转 USB-A 的转接头或者扩展坞(必须有,且最好带供电口);
- 键盘盖——安装器界面在 10 寸屏上操作,有实体键盘效率高太多,而且 GRUB 阶段触摸板不一定能用,方向键就靠它;
- U 盘占掉一个 USB-A,如果你想同时用 USB 网卡,就需要扩展坞有两个以上 USB-A 口;
- 电源。Surface Connect 充电口和 USB-C 是分开的,装机过程中电量掉得很快,建议全程插着电。
如果没有 USB 网卡也别慌,手机 USB 网络共享完全够用:Ubuntu 桌面版对 Android 的 RNDIS 和 iPhone 的 CDC 网卡识别都不错,插上之后 NetworkManager 一般会自动接管。这条链路很重要,后面讲"装完没 Wi-Fi"的时候会用到。
2.4 刷机之前的备份和固件更新顺序
顺序错了会后悔,这是必须严格按步骤来的部分:
第一步,在 Windows 里把所有固件更新跑完。打开 Windows Update 检查更新,再装一遍微软官方的 Surface 固件更新。Surface 的 UEFI 固件只能通过 Windows 里的更新程序刷写,一旦你把 Windows 干掉,这块机器的固件就永远停在当前版本了。有些 UEFI 的问题(比如某些版本对 Linux 引导兼容性差)就是靠固件更新修掉的。
第二步,制作恢复镜像。微软官方提供 Surface 恢复镜像下载,按你的具体型号(Surface Go 一代有 4GB/64GB 和 8GB/128GB 两个 SKU)下载,用另一台电脑写到一个 16GB 的 U 盘上。这不是"以防万一",而是"必然会用到"——你哪天想把机器还原回 Windows 卖掉或者送人,没有这个镜像会非常痛苦。
第三步,处理 BitLocker。如果 Windows 开了设备加密,先去账户里把恢复密钥导出保存。全盘格式化之后这个密钥就没用了,但如果你中途想读一下原 Windows 分区的数据,没有密钥是打不开的。
第四步,关闭 Windows 的快速启动和休眠。在"控制面板 → 电源选项 → 选择电源按钮的功能"里取消"启用快速启动"。这一步是为了让 NTFS 分区处于干净卸载状态。如果跳过,后面用 GParted 缩小分区时可能会提示文件系统有错误、需要ntfsfix,甚至拒绝操作。
第五步,把个人文件备份到 microSD 卡或者外置硬盘。Surface Go 有 microSD 卡槽,读到 80MB/s 左右,备份几个 GB 的文件完全够用。
3. 安装过程实录:从按下音量减到第一次进桌面
准备工作做完,真正的安装反而没那么复杂。但有几个环节我必须提前说清楚,因为 Ubuntu 安装器不会告诉你。
3.1 分区方案:64G 和 128G 是两条完全不同的路
先说 64GB eMMC 版本,我的方案是单系统加最小化分区:
| 分区 | 大小 | 类型 | 挂载点 | 说明 |
|---|---|---|---|---|
| ESP | 512MB | EFI System | /boot/efi | 后面会讲为什么不是默认的 100MB |
| 根分区 | 剩余全部 | ext4 | / | 建议加 noatime 挂载选项 |
| 交换文件 | 6GB 起 | swapfile | 无 | 用于休眠,建在根分区上 |
为什么不建独立的 swap 分区?因为 swapfile 更灵活,容量随时可调,而且对 eMMC 来说,分区和文件在底层写入方式没有本质区别。64GB 的机器,我强烈建议不要保留 Windows,直接全盘 Ubuntu。如果你非要双系统,那就只能压缩到各 30GB,双方都不够用。
128GB NVMe 版本选择多一些:Windows 保留 60GB,Ubuntu 分 50GB 根分区加 512MB ESP,剩 10GB 以上留给 eMMC 之外的余量。压缩 Windows 分区时,不要用 Windows 自带的磁盘管理,它受不可移动文件限制,往往只能压出十几个 GB。正确做法是用 Ubuntu Live 环境里的 GParted,先在 Windows 里把休眠和页面文件关掉,再用 GParted 压缩,成功率更高。
分区表统一用 GPT,不要碰 MBR。Surface 是纯 UEFI 设备,没有 Legacy 引导。
3.2 安装器里那几个默认选项,我建议全部反着选
进入安装器之后,Ubuntu 会问你几个问题,这里的选择直接影响装机成功率:
- "正常安装"还是"最小安装"?选最小安装。它只装基础桌面和必要应用,安装速度快三分之一,装完少占两三个 GB。后面你需要什么自己装就行。
- "安装 Ubuntu 时下载更新"?不勾。eMMC 的随机写入性能很差,下载更新会让安装时间从 20 分钟变成一小时以上,而且中途网络波动会导致安装失败。更重要的是,你反正后面要换 linux-surface 内核,装完系统再统一更新更可控。
- "安装第三方软件"?不勾。Surface Go 没有独立显卡,不需要 NVIDIA 驱动,也不需要额外的媒体编解码包(这些后面用
ubuntu-restricted-extras单独装更清楚)。 - "加密整个磁盘"?不建议在这个配置上开。LUKS 会带来额外的 I/O 开销,eMMC 本来就不快;而且加密之后配置休眠会复杂很多,resume 参数要指向 LUKS 映射之后的设备。
安装过程中最容易翻车的是grub-install 阶段。表现是进度条卡在最后 5% 不动,或者直接报"GRUB 安装失败,系统可能无法启动"。原因通常有两个:一是 eMMC 写入超时,这种情况其实等十分钟以上往往能过去,别急着断定失败;二是 ESP 分区太小。Windows 默认创建的 ESP 只有 100MB,Ubuntu 会往里塞 shim、grub、内核、initrd,装一两个内核版本就满了。我建议手动分区时把 ESP 直接给 512MB,一劳永逸。
如果 grub-install 真的失败了,不用整个重装:用 Live 环境 chroot 进去手动装一遍就行,第七章有完整命令。
3.3 第一次重启之后的十分钟,决定了你有没有白装
拔掉 U 盘,重启。正常情况下会看到 GRUB 菜单,直接回车进系统。如果直接进了 Windows 或者提示找不到引导设备,回去检查 UEFI 里的启动顺序和 Secure Boot 状态。
进桌面之后第一件事是联网。如果你运气好,Wi-Fi 图标直接出现,连上就行。如果没出现,按这个顺序查:
# 1. 看设备有没有被识别 lspci | grep -i network lsusb | grep -i marvel # 2. 看有没有被软阻塞 rfkill list # 3. 看驱动日志 dmesg -T | grep -i mwifiex如果是rfkill显示 Soft blocked: yes,直接sudo rfkill unblock all就能解决。如果是驱动加载了但没识别到硬件,可能是固件缺失,用手机 USB 共享网络联网后补上:
sudo apt update sudo apt install --reinstall linux-firmware sudo rebootlinux-firmware里包含 Marvell 系列的固件文件,重装之后重新加载mwifiex模块,Wi-Fi 一般就出来了。这一步非常重要,因为没有网络你什么都做不了——装内核、装输入法、装驱动,全部依赖网络。所以我在第 2.3 节才强调 USB 网卡或者手机的 USB 共享网络是必需品。
联网之后先做一次系统更新,但别急着大升级:
sudo apt update sudo apt full-upgrade -y sudo reboot这一次升级会拉到十几个 GB 的文件,eMMC 上大概需要 20 到 40 分钟。建议插着电源,别合盖,中途不要打断。升完之后再重启一次,确认系统稳定,再进入下一章的内核安装。
4. linux-surface 内核:这台机器真正可用的分水岭
如果只允许我给 Surface 用户一条建议,那就是:**装完 Ubuntu 的第一件事,不是配置桌面,而是装 linux-surface 的内核。**不装它,这台机器在 Linux 下就是一台"没有触摸、没有笔、待机掉电飞快"的普通小笔记本,Surface 的价值损失一半以上。
4.1 原版 5.15 内核到底缺了什么
Ubuntu 22.04 自带 5.15 内核,这个版本对 Surface 系列的支持是残缺的。具体缺什么,我用一张表说清楚:
| 硬件/功能 | 原版 5.15 内核 | linux-surface 内核 | 影响程度 |
|---|---|---|---|
| 触摸屏(IPTS) | 不可用 | 可用(配 iptsd) | 致命 |
| 触控笔压感 | 不可用 | 可用(配 libwacom-surface) | 高 |
| 重力感应/自动旋转 | 不可用 | 可用 | 中 |
| 睡眠/待机功耗 | 参数不完整,掉电快 | 明显改善 | 高 |
| 音量键、电源键事件 | 部分可用 | 完整支持 | 低 |
| 前置摄像头 | 不可用 | 有限支持 | 低 |
| 后置摄像头 | 不可用 | 基本不可用 | 可忽略 |
触摸屏这条最要命。Surface Go 的触摸控制器用的是 Intel IPTS 方案,主流内核里一直没有它的驱动,直到 linux-surface 项目把它做成了内核模块加用户态守护进程的组合。所以你会看到一个很反直觉的现象:装了 Ubuntu 之后,触摸屏在 GRUB 菜单里能点,进了系统反而不能用了——因为 GRUB 用的是固件提供的简单输入协议,跟操作系统的驱动完全是两回事。
4.2 仓库配置和内核安装的完整命令
linux-surface 官方提供 APT 仓库,安装过程不算复杂,但每一步都要注意。
# 第一步:导入仓库签名密钥 curl -sSL https://raw.githubusercontent.com/linux-surface/linux-surface/master/pkg/keys/surface.asc \ | gpg --dearmor | sudo dd of=/etc/apt/trusted.gpg.d/linux-surface.gpg # 第二步:添加软件源 echo "deb [arch=amd64] https://pkg.surfacelinux.com/debian release main" \ | sudo tee /etc/apt/sources.list.d/linux-surface.list # 第三步:更新索引 sudo apt update # 第四步:安装内核和配套组件 sudo apt install -y linux-image-surface linux-headers-surface libwacom-surface iptsd # 第五步:启用触摸屏守护进程 sudo systemctl enable --now iptsd装完之后重启。重启时会发现 GRUB 菜单里多了一项,内核版本从 5.15 变成了 6.x 系列。GRUB 默认会选择版本号最高的内核,所以不用手动改配置,重启后默认就是 surface 内核。进系统后确认一下:
uname -r # 输出应该类似 6.5.x-surface 或者 6.8.x-surface systemctl status iptsd # 应该是 active (running)几个实操上的注意点:
- **保留原版内核作为后路。**不要装完就
apt purge掉 5.15,GRUB 的"Advanced options"里留着它,万一 surface 内核某次更新出问题,你还能进得去系统。 - **surface 内核更新很频繁。**大约每个月都有新版本,会自动替换。建议在
apt upgrade之前看一眼更新列表,如果里面同时有内核和iptsd,升完之后重启,观察触摸是否正常。 - **
libwacom-surface别漏。**这个包提供 Wacom 设备描述文件,影响触控笔的按键映射和压感识别,不装的话笔能用但功能不全。
4.3 触摸屏装完内核还是不动,按这个顺序查
这是最容易卡住新手的环节。按下面这个链路一步步查,基本能定位到问题:
# 1. 确认内核版本正确 uname -r # 2. 确认 IPTS 设备被识别到 dmesg -T | grep -i ipts ls /dev/ipts* 2>/dev/null # 3. 看 iptsd 服务状态和日志 systemctl status iptsd journalctl -u iptsd -n 50 --no-pager常见的三种情况:一是内核没生效,uname -r还是 5.15,说明 GRUB 选错了项,重启时手动在"Advanced options"里选 surface 内核,或者检查/etc/default/grub的GRUB_DEFAULT。二是 iptsd 启动失败,日志里通常能看到"failed to find IPTS device"或者"permission denied",前者一般是内核模块没加载(sudo modprobe intel_ipts),后者检查/dev/ipts的权限。三是触摸能用但坐标偏移或者方向反了,这通常是内核版本和 iptsd 版本不匹配,把两者一起升级到最新即可。
顺便说一句触控笔:装完 surface 内核和libwacom-surface之后,Surface 触控笔的倾斜、压感在 Krita 和 Xournal++ 里都能识别,延迟可以接受。如果你打算用这台机器做手写笔记,Xournal++ 的体验相当不错,这也是我认为 Surface Go 刷 Linux 之后最有价值的用法之一。
4.4 如果你坚持要开 Secure Boot
我自己的做法是关掉 Secure Boot,简单省事。但也有不少人因为公司策略或者双系统需求必须开着,那就得走 MOK 注册流程:
装内核之后额外装linux-surface-secureboot-mok包,它会往固件里注册一个 MOK(Machine Owner Key)请求。重启之后会进入一个蓝色界面的 MokManager,选 "Enroll MOK" → "Continue" → 输入密码 → 重启。这个密码是包内预置的固定字符串,具体值请以 linux-surface 官方仓库的说明为准,别照抄网上的老帖子。
注意:MOK 注册只对当前这台机器生效。如果以后你清空了 UEFI 或者换主板,需要重新走一遍流程。另外,注册 MOK 之后再更新 surface 内核,一般不需要重新注册,因为密钥没变。
5. 功耗、休眠与那块 eMMC:长期使用最要命的三个问题
系统装好了,触摸能用了,接下来才是决定"你能不能长期用下去"的部分。这一章讲的三件事,是我用了几个月之后回头总结,觉得最值得单独拎出来说的。
5.1 Surface 的"现代待机"在 Linux 下为什么这么费电
先搞清楚机制。Surface 系列不支持传统的 S3 睡眠,只支持 S0ix(也叫现代待机 / Connected Standby)。这套机制在 Windows 下配合微软的驱动和固件,能做到合盖一晚上掉几个百分点;在 Linux 下,电源管理链路的每一环都要自己实现,缺一个环节深度就下不去,结果就是醒来之后发现掉了一二十个点。
查看当前状态:
# 看支持哪些睡眠状态 cat /sys/power/state # 通常会输出 "freeze mem disk" # 看 mem 对应哪种实现 cat /sys/power/mem_sleep # 输出 "[s2idle]" 说明只有浅睡眠如果mem_sleep里只显示[s2idle],说明这台机器在 Linux 下拿不到更深的睡眠状态,这种情况下调参数的意义不大,换休眠才是正解。
有几个小优化能减少一点损耗,但别指望翻天覆地:待机前手动关掉 Wi-Fi(nmcli radio wifi off),关掉蓝牙,把后台的同步类任务停掉。也有人用i915.enable_psr=0这个内核参数解决屏幕偶发闪烁的问题,代价是稍微增加一点功耗——这两个需求本身是冲突的,看你更在意哪个。
5.2 用休眠替代睡眠:完整配置流程
休眠(hibernate)会把内存内容写到磁盘然后断电,醒来时恢复到内存,耗电跟关机一样,恢复速度取决于 eMMC 的读取速度。对 Surface Go 来说,4GB 内存写大约 2GB 的镜像(有压缩),在一百多 MB/s 的写入速度下大概二十秒,完全可以接受。
完整步骤如下:
# 1. 创建一个足够大的 swap 文件(4GB 内存机型给 6GB,8GB 机型给 10GB) sudo swapoff -a sudo fallocate -l 6G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile # 2. 写入 fstab,保证开机自动挂载 echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab # 3. 拿到根分区的 UUID sudo blkid | grep -w "$(findmnt -n -o SOURCE /)" # 4. 拿到 swap 文件在磁盘上的物理偏移量 sudo filefrag -v /swapfile | awk '$1=="0:" {print $4}' | tr -d '.'第 4 步输出的数字就是resume_offset,记下来。然后配置启动参数:
sudo nano /etc/default/grub找到GRUB_CMDLINE_LINUX_DEFAULT,改成这样(把占位符换成你自己的值):
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=你的根分区UUID resume_offset=你的偏移量"接着写入 initramfs 的 resume 配置:
echo "RESUME=UUID=你的根分区UUID resume_offset=你的偏移量" \ | sudo tee /etc/initramfs-tools/conf.d/resume sudo update-initramfs -u -k all sudo update-grub sudo reboot重启之后测试:
systemctl hibernate如果机器正常断电、再次开机时回到了休眠前的桌面,说明配置成功。如果开机时能看到一行 resume 相关的报错,说明 offset 或者 UUID 不对,回去核对。
两个补充说明。第一,GNOME 的电源菜单里默认没有休眠按钮,需要用systemctl hibernate命令,或者装扩展把它加进菜单。第二,Ubuntu 22.04 默认有一个 polkit 策略限制普通用户执行休眠,如果systemctl hibernate报权限错误,可以加一个 polkit 规则文件放开。
提示:休眠每次都会往 eMMC 写几个 GB 的数据,对闪存寿命有影响。但反过来说,一晚上掉 30% 电意味着第二天必须找插座,而且锂电池长期深度放电本身也伤电池。两害相权,我选休眠。
5.3 eMMC 的寿命,以及怎么让它在几年内别挂掉
eMMC 的擦写寿命通常标称 3000 次 P/E cycle 左右,实际每天写 5GB 的话,64GB 的盘理论上能用很多年。但有两个操作会显著加速消耗:磁盘长期接近写满,以及频繁的小文件随机写入。前者导致写入放大,后者让磨损集中在少数块上。
几条真正有用的做法:
**挂载选项加 noatime。**默认每次读文件都会更新访问时间,这在小文件场景下是大量无意义的写入。编辑/etc/fstab,把根分区的挂载选项改成defaults,noatime,errors=remount-ro,重启后生效。
**用 zram 代替频繁换页。**zram 是在内存里开一块压缩的交换区,对 4GB 机型几乎是必需的:
sudo apt install -y zram-tools # 编辑 /etc/default/zramswap 设置大小,一般给物理内存的 50% 到 75% sudo systemctl restart zramswap如果仓库里没有zram-tools,用zram-config或者手写 systemd 单元也一样,核心是modprobe zram之后设置disksize和comp_algorithm=lz4,然后mkswap+swapon -p 100。
**开启定期 TRIM。**让 eMMC 知道哪些块已经废弃,减少垃圾回收压力:
sudo systemctl enable --now fstrim.timer sudo systemctl status fstrim.timer**控制日志和缓存的写入量。**把 systemd-journald 的持久化日志限制在 100MB 左右,浏览器缓存如果不在意丢失速度,可以考虑放到 tmpfs。这些都是可选项,但对小容量 eMMC 有意义。
**把大文件放到 microSD 卡上。**视频、镜像文件、下载目录,全部挂到 microSD。卡本身速度慢一点,但坏了换一张就行,eMMC 坏了机器就废了。
**永远保持 10% 以上的剩余空间。**64GB 的机器,根分区别超过 55GB 使用量。这条比前面那些参数都重要。
6. 把它当成一台能用的平板:触摸、缩放、输入法与日常软件
前面五章解决的是"能不能跑起来",这一章解决的是"跑起来之后好不好用"。Surface Go 的定位是平板,那触摸、缩放、输入法这三件事做不好,它就还是一台小笔记本。
6.1 1800x1200 在 10 寸屏上的缩放方案
10 英寸 1800x1200,像素密度大约 220 PPI,这个密度下如果按 100% 缩放,菜单和字体小得几乎看不清。GNOME 42 在 Wayland 会话下支持分数缩放,可以设成 150% 或者 175%。我自己的设置是:
- 显示缩放 150%;
- 字体缩放因子再补 1.1 到 1.15,用
gsettings set org.gnome.desktop.interface text-scaling-factor 1.15; - 标题栏字体和等宽字体单独调一下,终端里尤其明显。
这里有个坑必须说:XWayland 应用(也就是那些还没适配 Wayland 的程序)不会跟随分数缩放,会显示成模糊的位图拉伸。解决办法是优先选 Wayland 原生版本的程序,或者给单个应用设置环境变量;实在不行就在 X11 会话下用整数倍缩放,但那又失去了分数缩放的细腻感。所以我把会话固定在 Wayland,接受个别应用稍微模糊。
如果你换成了 Xfce,情况会不一样:Xfce 的分数缩放支持比较弱,通常的做法是用整数缩放 2x 然后调低分辨率模拟,或者干脆把字体和控件尺寸单独调大。这也是我在 1.3 节提到的取舍:GNOME 缩放好但重,Xfce 轻但缩放糙。
6.2 屏幕键盘和自动旋转,两个必须手动打开的功能
装完系统你会发现,把键盘盖翻过去之后,屏幕上没有输入法键盘——这不是 bug,是默认关闭的。
# 开启屏幕键盘 gsettings set org.gnome.desktop.a11y.applications screen-keyboard-enabled true开启之后,点任何输入框就会自动弹出 GNOME 的屏幕键盘。不过它的中文输入体验一般,如果你的主要输入场景是写中文,还是接键盘盖更实际。屏幕键盘更适合用来解锁屏幕、填个地址、点几个按钮。
自动旋转需要传感器守护进程:
sudo apt install -y iio-sensor-proxy systemctl status iio-sensor-proxy # 测试传感器数据 monitor-sensormonitor-sensor会实时打印加速度计和方向数据,转动设备看数值有没有变化。有变化说明传感器正常,屏幕应该会自动旋转。如果没有变化,说明 surface 内核没装上或者版本太旧,回到第四章检查。
一个实际使用中的小问题:合上键盘盖之后,屏幕键盘有时候仍然会弹出,或者反过来,不接键盘时它又没弹出来。这个跟 GNOME 的触摸检测逻辑有关,目前的处理方式是手动切换,或者在设置里把屏幕键盘的快捷键绑到一个方便的位置上。
6.3 中文输入法:fcitx5 加 Rime 的组合
Ubuntu 22.04 自带的输入法框架是 IBus,中文输入体验一般,而且触摸场景下候选词框太小、点选很别扭。我的方案是换成 fcitx5:
sudo apt install -y fcitx5 fcitx5-chinese-addons \ fcitx5-frontend-gtk3 fcitx5-frontend-gtk4 fcitx5-frontend-qt5 # 五笔/仓颉等码表输入法 sudo apt install -y fcitx5-table-extra # 通过 im-config 切换默认框架 im-config -n fcitx5配置环境变量。在 Wayland 会话下,推荐让应用直接走 text-input 协议(GNOME 42 对 fcitx5 的支持已经不错),同时保留 GTK/QT 的兼容变量作为兜底。写进/etc/environment或者~/.pam_environment:
GTK_IM_MODULE=fcitx QT_IM_MODULE=fcitx XMODIFIERS=@im=fcitx注销重新登录,然后在应用列表里打开 "Fcitx5 配置",添加需要的输入法。如果你用五笔,在码表里选 "五笔"(wbx86 或者 wubi86);如果你习惯拼音加自定义词库,可以装fcitx5-rime,然后自己维护 Rime 的方案和用户词库,长期用下来词频会越来越贴合自己的习惯。
触摸场景的优化点:fcitx5 默认的候选词框在 150% 缩放下偏小,可以在配置里换一个字号更大的主题,或者手动调 CSS。这个细节很小,但每天要面对几十次,值得花十分钟调好。
6.4 哪些软件在这个配置上是真能用的
我把这台机器当平板用了几个月,说说实际表现,避免你装完发现预期落空。
浏览器:Firefox 是主力,但 4GB 内存下容易吃满。两个调整有价值:在about:config里把browser.tabs.unloadOnLowMemory打开,标签页在内存紧张时自动卸载;确认 VA-API 硬件解码生效,about:support里的 "Compositing" 和 "Hardware Video Decoding" 都是可用状态,这样看 1080p 视频时 CPU 占用能从 60% 降到 15% 左右。Chromium 系列在 Wayland 下的触摸滚动更顺,但内存占用比 Firefox 高,自行取舍。
PDF 阅读:Evince 够用,也可以试 Xournal++ 做标注。中文 PDF 如果显示成方块,装字体:sudo apt install fonts-noto-cjk fonts-noto-cjk-extra。这一步经常被忽略,然后以为系统坏了。
视频播放:MPV 配硬件解码是这台上最舒服的娱乐方式。配置文件里写hwdec=vaapi、vo=gpu,1080p H.264 能流畅放,4K 就别试了。VLC 也能用,但 VA-API 支持不如 MPV 稳。
办公文档:LibreOffice 打开几十页带图表的文档会明显卡顿。轻量场景没问题,重文档建议用网页版的在线办公工具,把计算压力放到远端——这也是这台机器最适合的分工方式:本地只做显示和输入。
终端和编辑器:这是它的主场。GNOME Terminal 或者 Alacritty 都很流畅,Neovim、微编辑器毫无压力。如果你主要写脚本、看日志、SSH 到别的机器上干活,Surface Go 刷完 Linux 之后的体验反而比 Windows 好。
别装的东西:本地 IDE 的完整全家桶、Docker 跑多个容器、任何形式的虚拟机。8GB 版本可以勉强试,4GB 版本装了就是折磨自己。
7. 折腾完之后:几个我反复验证过的小技巧与恢复手段
7.1 出问题时的排查顺序
Ubuntu 在 Surface 上的问题,按"从硬件到应用"的顺序查,效率最高。我固定的检查顺序是这样:
| 检查项 | 命令 | 判断依据 |
|---|---|---|
| 内核版本 | uname -r | 含-surface才对 |
| 硬件日志 | dmesg -T | tail -50 | 看有无 firmware、ipts 报错 |
| 无线状态 | rfkill list、nmcli device status | 排除软阻塞和驱动未加载 |
| 触摸服务 | systemctl status iptsd | active 才正常 |
| 电源状态 | cat /sys/power/mem_sleep、upower -d | 确认休眠与电量读数 |
| 温度 | sensors(先装 lm-sensors) | 看有没有长时间高温降频 |
大部分"用着用着不对了"的情况,都是某次系统更新把 surface 内核或者 iptsd 升坏了,或者 GRUB 默认项跑偏了。知道去哪看,比记一堆命令重要。
7.2 系统崩了怎么用 Live USB 救回来
最常见的两种崩溃:一种是 GRUB 被覆盖或者损坏,开机直接进 UEFI 界面;另一种是更新内核之后启动卡住。两种都能用同一套办法救。
用装系统时那个 U 盘启动,选 "Try Ubuntu" 进 Live 桌面,然后:
# 确认根分区和 ESP 的设备名,别搞错 lsblk -f # 挂载根分区(示例假设是 mmcblk0p2,ESP 是 mmcblk0p1) sudo mount /dev/mmcblk0p2 /mnt sudo mount /dev/mmcblk0p1 /mnt/boot/efi # 绑定必要的虚拟文件系统 for i in dev dev/pts proc sys; do sudo mount --bind /$i /mnt/$i done # chroot 进去 sudo chroot /mnt # 重装引导(注意:装到磁盘,不是分区) grub-install /dev/mmcblk0 update-grub update-initramfs -u -k all # 退出并重启 exit sudo umount -R /mnt sudo reboot如果是内核升级导致启动失败,不用这么麻烦,在 GRUB 的 "Advanced options for Ubuntu" 里选上一个能用的内核进去,然后sudo apt install --reinstall linux-image-surface linux-headers-surface,或者用apt-mark hold暂时锁住内核版本,等新版稳定了再放开。这就是为什么我在 4.2 节强调要保留原版内核——它是你的备用降落伞。
7.3 如果重来一次,我会这样安排
说实话,我第一次装的时候走了不少弯路:启动盘写了三遍才成功,装完发现触摸屏不能用以为白装了,待机掉电掉到怀疑硬件坏。回头看我现在的顺序是这样的:
- Windows 里跑完所有固件更新,做恢复 U 盘,备份数据;
- 进 UEFI 关 Secure Boot、关电池限制、调启动顺序;
- 用 DD 模式写启动盘(8GB 以上,优先老 U 盘);
- 插着电、接键盘盖、准备手机 USB 共享网络;
- 装系统时选最小安装,不勾更新和第三方软件,ESP 手动给 512MB;
- 装完先联网做一次完整升级,重启确认稳定;
- 装 linux-surface 内核加 iptsd,重启验证触摸;
- 配 zram、noatime、TRIM,再配休眠;
- 最后才是输入法、主题、缩放这些"体验层"的东西。
把顺序排成这样,核心逻辑是:先让硬件全部可用,再优化能耗,最后调体验。反过来做,你会在一个触摸都还不能用的系统上花两个小时调壁纸。
这台 Surface Go 现在放在我床头,晚上用它看看 PDF、写点东西、SSH 到别的机器上查个日志,插着电当终端用也完全没问题。它跑不了重活,但在"轻量、便携、随时能用"这个定位上,刷了 Ubuntu 的它比原装 Windows 更合我心意。唯一让我偶尔怀念 Windows 的时刻是出门不带充电器的时候——那两三个小时的待机差距,是这套硬件在 Linux 下暂时填不平的坑。如果你也准备动手,把这篇文章里的 UEFI 设置、DD 写盘、surface 内核这三步做对,剩下的都是可以慢慢调的细节。