如果你手头刚好有一台 Surface Go 2,又不想让它永远活成一台 Windows 记事本,这篇文章就是为你准备的。我当初入这台机器,就是想找一个能塞进通勤包、能写代码、能跑 ROS / 嵌入式工具链的小本子;后来发现真正让它脱胎换骨的,反而是 Ubuntu 20.04 双系统安装和驱动配置完成后那几天。Surface Go 2 本身硬件不大,但照顾到 Type Cover、触摸屏、摄像头、音频、WiFi 这些部件,光是驱动就得比普通笔记本多花一倍的耐心。这篇文章不打算讲虚的,我直接把从 U 盘制作、Windows 分区压缩、UEFI 设置、Ubuntu 手动分区、驱动修复到日常开发环境搭建的完整过程写出来,适合手里有 Surface Go 2、愿意折腾 Linux 的朋友参考,也适合想在小平板/二合一本上装 Ubuntu 的人提前避坑。
网上关于 Ubuntu 双系统安装的教程很多,但放在 Surface Go 2 上会多出几道坎:Type Cover 在官方内核下不一定好用、触摸屏和触控笔需要额外的用户态服务、WiFi 掉线可能不是路由器而是固件问题、合盖睡眠后电量掉得厉害。这些如果不提前知道,很容易在"装完系统却连不上网"那一步就放弃。下面按我实际操作的顺序来,尽量做到每一步都能照抄。
1. 为什么是 Surface Go 2,又为什么要 Ubuntu 20.04
1.1 这台机器的硬件底子
Surface Go 2 有两条产品线:低配是 Pentium Gold 4425Y,高配是 Core m3-8100Y,两者都是无风扇设计,配上最大 8GB 内存。做日常开发、写文档、跑虚拟机、编译小型项目都够用,但你得接受它不是一台性能猛兽。
存储方面,64GB 版本用的是 eMMC,速度比 NVMe SSD 慢不少;128GB/256GB 版本则普遍是 SSD。装 Linux 时磁盘设备名会有区别:eMMC 大概率是/dev/mmcblk0,SSD 大概率是/dev/nvme0n1。这一点在安装时非常重要,后面分区我会专门说。
显卡是 Intel UHD Graphics 615,不是 NVIDIA。很多人一搜索"Ubuntu 20.04 驱动配置"就跑去装 NVIDIA 驱动,其实在 Surface Go 2 上完全没必要,Intel 核显用内核自带的 i915 驱动就很稳。只要不是跑大型 3D 或深度学习训练,这台机器完全能当一台安静的小开发本用。
1.2 为什么我还是选 Ubuntu 20.04
现在 22.04、24.04 都已经很成熟了,但我觉得 20.04 对 Surface Go 2 来说仍然是一个很合适的基线。首先是 ROS Noetic,它官方支持的就是 Ubuntu 20.04,很多嵌入式开发板和工业项目文档里给的例子也都是基于 20.04。其次是稳定性,20.04 是 LTS,虽然内核版本偏老,但我们可以通过安装 linux-surface 社区内核来补齐硬件支持,这个后面会详细讲。
另外,20.04.6 是这个系列的最后一个点版本,相对 20.04 刚发布时的版本,固件和软件包已经修得非常稳。如果你只想装一个"开机就能干活"的系统,20.04.6 比 20.04 刚出那会少很多麻烦。
当然,选 20.04 也有代价。老内核默认对 Surface Go 2 的触摸屏、音频、传感器支持不算完整,需要再花点时间补驱动。我的建议是:把 20.04 当作稳定底座,安装完成后立刻切到 linux-surface 内核,这样既保留 Ubuntu 20.04 的生态,又获得接近 Windows 的硬件体验。
1.3 现实预期管理:哪些能用,哪些需要折腾
在动手之前,我先给你一张基于社区和我个人实测的支持情况表,避免装到一半心里落差太大。
| 硬件模块 | 官方 20.04 内核 | linux-surface 内核 |
|---|---|---|
| Type Cover 键盘/触控板 | 基本能用,但触控板手势可能不全 | 支持完整,键鼠体验接近 Windows |
| 触摸屏/触控笔 | 可能出现点击不准或无法识别笔压 | iptsd + libwacom 组合,比较完善 |
| WiFi(QCA6174) | 大概率要手动装 linux-firmware | 同样要装 firmware,但更稳 |
| 音频 | 装了 sof-firmware 后大概率能出声 | 相对更不容易发生无声 |
| 摄像头 | 部分 UVC 摄像头可用,个别要碰运气 | 支持更好,但仍取决于固件版本 |
| 睡眠/合盖 | 耗电明显,偶尔会睡死 | 有改善,但别把它当 S3 待机用 |
这不是故意吓唬人,而是二合一设备在 Linux 下的通病。Surface Go 2 的触摸屏和触控笔依赖 Intel Precise Touch 相关补丁,官方内核没有完全合入,社区内核把这些补丁整合在一起,所以"装完 Ubuntu 后换内核"不是可选项,而是必选项。
2. 装系统前,请先完成这四件事
2.1 备份、BitLocker 和快速启动
很多人上来就直接做启动盘,结果分区时发现 C 盘能压缩的空间非常小,或者装完 Ubuntu 后 Windows 需要 BitLocker 恢复密钥。原因就是 Surface 设备默认开了设备加密,也就是 BitLocker。
如果你打算以后还继续用 Windows,先备份重要文件,然后以管理员身份打开命令提示符或 PowerShell,执行:
manage-bde -protectors -get C: manage-bde -off C:manage-bde -off C:的意思是开始解密 C 盘。执行完别急着关机,等系统后台把解密跑完。可以通过下面的命令确认加密状态:
manage-bde -status C:看到加密状态变成"已解密"再继续。如果你实在不想关,也可以只导出恢复密钥,但后续一旦动到 UEFI 的启动项或内核签名,Windows 很可能弹出恢复界面,没有密钥会很麻烦。
接下来关闭 Windows 的快速启动。快速启动本质上是把关机变成休眠,会导致双系统切换时磁盘状态不一致,也容易让 Ubuntu 挂载 NTFS 分区时出现风险。在管理员命令行里执行:
powercfg /h off这一步会同时关闭休眠文件和快速启动。我又在一些机器上遇到过关闭后 C 盘剩余空间突然变大了,说明页面文件法和休眠文件法确实占了不少空间。
2.2 用磁盘管理腾出 Ubuntu 的空间
Windows 装双系统最常用的方式是用磁盘管理把 C 盘压缩出一块未分配空间。按Win + X选择"磁盘管理",右键 C 盘,选"压缩卷",输入要压缩出的空间大小。
压缩多少取决于你的存储版本和用途。我的建议是:
| Surface Go 2 存储 | 建议分配给 Ubuntu | 适合用途 |
|---|---|---|
| 64GB eMMC | 30GB 左右 | 命令行开发、轻量代码编辑 |
| 128GB SSD | 50GB 左右 | 桌面环境 + ROS/嵌入式工具链 |
| 256GB SSD | 80GB 以上 | Docker、虚拟机、大工程编译 |
如果压缩时发现可压缩空间远小于预期,通常是因为系统文件、休眠文件或页面文件占了位置。上面已经把休眠关了,如果再不行,可以先把页面文件临时改成"无",重启后再压缩,压缩完再把页面文件调回来。这个过程不复杂,但一定要有耐心。
压缩完成后,你会看到 C 盘后面多出一块"未分配"区域。这就是 Ubuntu 的安身之地。后面安装时不要在安装器里选"自动安装",我们要手动分区,原因稍后解释。
2.3 下载镜像和制作启动 U 盘
Ubuntu 20.04 的镜像下载地址很好找,官方 releases 页面有 20.04.6 的 ISO。如果官方下载速度不理想,用国内高校镜像站也可以,比如清华镜像源,路径里选择20.04.6目录下的ubuntu-20.04.6-desktop-amd64.iso,大概 2.5GB 左右。
制作启动盘我用过 Rufus 和 balenaEtcher,两者都能成功。Rufus 在写入时可能会提示"将使用 DD 镜像模式写入",选 Yes 就好。如果 U 盘无法引导,重写一次,换 DD 模式,往往能解决。
有一点要提前说:安装过程中 Type Cover 很可能会没反应,所以最好准备一个 USB Hub 和一个 USB 有线键盘。如果连鼠标都没有,也可以用 Type Cover 碰碰运气,但别把希望全押在它身上。
2.4 Surface UEFI 设置:关 Secure Boot、开 USB 启动
Surface Go 2 进入 UEFI 有几种方式:在 Windows 下执行shutdown /r /fw /t 0,或者关机后按住"音量加号"不放,再按一下电源键。进入 UEFI 后,重点改两处:
- Security -> Secure Boot -> 设为 Disabled
- Boot configuration -> 确保 USB 启动是开启状态
关掉 Secure Boot 是为了避免第三方内核签名问题。linux-surface 内核虽然也提供 Secure Boot 的 MOK 方案,但新手在第一次安装时容易卡在 MOK 管理界面,不如先关掉。后面如果对安全有要求,再重新开都不迟。
另外,不要去动 TPM 设置。Surface 的 UEFI 里有 TPM 相关选项,我们不需要关它。关 Secure Boot 和 BitLocker 之后再动磁盘,Windows 不会因此崩溃。
3. 双系统安装实操:分区方案和引导修复
3.1 Live 环境确认磁盘信息
U 盘启动后,选择"试用 Ubuntu",先进入 Live 桌面。按Ctrl + Alt + T打开终端,执行:
lsblk -f这个命令会显示所有磁盘和分区。重点看:
- 有没有一个 fat32 格式、挂载点写着 EFI 的小分区(一般在 100MB 到 512MB 之间)。
- 你的磁盘是
/dev/nvme0n1还是/dev/mmcblk0。 - Windows 的 C 盘是哪个分区,不要搞错。
再执行:
lspci -nnk | grep -iA3 network可以提前看一眼无线网卡型号和驱动状态。如果你的 WiFi 芯片是 Qualcomm Atheros QCA6174,那属于正常情况,后文会专门处理。
3.2 手动分区方案:极简且不容易翻车
进入安装界面后,在"安装类型"里选择"其他选项"。我强烈建议不要选"与 Windows 共存",因为安装器自动分区时可能把 /boot 分区搞得很小,或者在双系统引导上产生歧义。
手动分区的核心原则是:
- 找到已有的 EFI 分区,把它挂载为
/boot/efi,千万不要格式化。 - 在 Windows 压缩出的空闲区域里,把剩余空间新建为 ext4,挂载到
/。 - 如果内存只有 4GB,建议再建一个 4GB swap 分区;如果内存 8GB 且不打算休眠,也可以跳过。
举一个 128GB SSD 的参考方案:
| 分区 | 大小 | 格式/类型 | 挂载点 |
|---|---|---|---|
| /dev/nvme0n1p1 | 260MB(已有) | EFI System Partition | /boot/efi(不格式化) |
| /dev/nvme0n1p2 | 16MB(已有) | Microsoft Reserved | 不用管 |
| /dev/nvme0n1p3 | Windows 的 C 盘(已有) | NTFS | 保持原样 |
| 空闲空间 | 50GB 左右 | ext4 | / |
| 空闲空间 | 4GB(可选) | swap | [swap] |
如果你的是 64GB eMMC 版本,可能看不到独立的 NVMe 分区,而是/dev/mmcblk0p1、/dev/mmcblk0p2这样的命名。逻辑一样,关键是找到 fat32 的 EFI 分区,其他照做。
手动分区时,选择空闲空间,点"+",大小填给根分区的容量,类型选"主分区",用于"Ext4 日志文件系统",挂载点选"/"。swap 分区则在类型里选"交换空间"。最后一步要看清楚底部"安装启动引导器的设备"下拉框,选择整块磁盘,例如/dev/nvme0n1或/dev/mmcblk0,而不是选某个分区。这样 GRUB 才能装到磁盘的 UEFI 引导路径上。
3.3 安装过程中容易卡住的几个点
第一个坑是 Type Cover 在安装界面里完全没反应。这种情况下只能靠外接 USB 键盘。如果外接键盘也没反应,检查 USB 口是否插在 Surface Connect 旁边那个 USB-C 口,或者换个 USB Hub。
第二个坑是安装器在检测到空闲分区时,默认创建的分区方案可能占用整个磁盘,导致 Windows 分区被覆盖。所以一定要在"其他选项"里手动选,确认根分区落在之前压缩出来的空闲空间上,而不是 Windows 的 C 盘。
第三个坑是如果你强行给 /boot 单独挂载一个小分区,后续 linux-surface 内核升级时容易因为 /boot 空间不足失败。我的建议是不单独分 /boot,而是让安装器把 /boot 放在 / 分区内部,省心很多。
3.4 首次重启、GRUB 引导和时间同步
安装完成后重启,如果一切顺利,应该能看到 GRUB 菜单。要是直接进了 Windows,不要慌,多半是 UEFI 把 Windows Boot Manager 排在了前面。重启时按住"音量加号"进 UEFI,在 Boot configuration 里把ubuntu调到第一项,或者找到 UEFI 启动菜单临时选择 Ubuntu。
进 Ubuntu 后,先打开终端更新引导:
sudo apt update sudo update-grubGRUB 会自动探测到 Windows 并把它加进菜单。如果探测不到,可以安装os-prober再试:
sudo apt install os-prober sudo os-prober sudo update-grub双系统最容易碰到的一个小问题是 Windows 和 Ubuntu 时间相差 8 小时。原因是 Windows 默认把 BIOS 时间当本地时间,Linux 默认当 UTC 时间。解决方法是让 Linux 使用本地时间:
sudo timedatectl set-local-rtc 1 --adjust-system-clock执行完再进 Windows 看时间就正常了。
4. 驱动配置:无线、触控、音频、摄像头一次说清
4.1 先换内核:linux-surface 才是核心中的核心
很多人在装完 Ubuntu 后,发现 Type Cover 时好时坏、触摸屏完全没反应,就到处找 Surface 专用驱动。其实大部分问题的根源是内核不支持 Surface 硬件。社区维护的 linux-surface 内核把大量补丁都整合进去了,装完之后很多硬件问题会一次性解决。
在 Ubuntu 20.04 上,安装 linux-surface 内核可以走 PPA:
sudo apt install software-properties-common sudo add-apt-repository ppa:linux-surface/ppa sudo apt update sudo apt install linux-surface-secureboot-mok sudo apt install linux-image-surface linux-headers-surface iptsd libwacom-surface sudo update-grub sudo reboot如果你关闭了 Secure Boot,重启时不会出现 MOK 管理界面。如果还留着 Secure Boot,重启后需要按提示选择"Enroll key from disk"完成密钥登记。
重启后执行:
uname -a看到内核版本里带有-surface字样,就说明换成功了。之后 Type Cover 的触控板、触摸屏、触控笔、自动旋转等都会有明显改善。这也解释了为什么前面安装系统时不让你折腾单个驱动,因为顺序反了会做很多无用功。
4.2 WiFi 和蓝牙:QCA6174 的常见坑
Surface Go 2 的无线网卡通常是 Qualcomm Atheros QCA6174,需要ath10k驱动和对应固件。如果你刚装完 Ubuntu 发现无线图标都看不到,先检查硬件识别情况:
lspci -nnk | grep -iA3 network输出里应该能看到 QCA6174,并显示"Kernel driver in use: ath10k_pci"。如果驱动没有加载,先安装固件包:
sudo apt update sudo apt install linux-firmware sudo reboot如果驱动和固件都在,但 WiFi 信号弱、频繁断连,通常和电源管理有关。NetworkManager 默认可能会对无线网卡做省电,这对平板类设备尤其不友好。可以关掉:
sudo mkdir -p /etc/NetworkManager/conf.d sudo tee /etc/NetworkManager/conf.d/wifi-powersave.conf <<'EOF' [connection] wifi.powersave = 2 EOF sudo systemctl restart NetworkManagerwifi.powersave = 2表示禁用 Wi-Fi 省电,让网卡保持全速连接。在续航上会有一些代价,但稳定性比那一点电值钱得多。
蓝牙方面,QCA6174 的蓝牙通常是同一个芯片通过 USB 通道提供,一般装完 linux-firmware 就能用。验证蓝牙状态可以执行:
bluetoothctl power on scan on如果蓝牙设备一直无法搜索到,先确认是不是被 rfkill 禁用了:
rfkill list看到Soft blocked或Hard blocked就执行rfkill unblock bluetooth。
4.3 触摸屏和触控笔:iptsd 和 libwacom-surface 的配合
Surface Go 2 的触摸屏不是通过最简单的 USB HID 协议直接工作,它需要 Intel Precise Touch 相关补丁。安装 linux-surface 内核时我们装上了iptsd和libwacom-surface,这两个包负责把触摸屏和触控笔事件转成标准的 Linux 输入设备。
装好后,先用xinput确认设备是不是被识别到了:
xinput list正常时你会看到类似Surface Type Cover、Surface Touchscreen这样的设备。如果看到触摸屏设备,但触控笔没有压感,可以检查 iptsd 服务:
journalctl --user -u iptsd -b如果日志里有错误,最常见的是内核版本和 iptsd 版本不匹配。这时候回到 linux-surface PPA,把它升级到最新版本:
sudo apt update sudo apt upgrade sudo reboot另外,GNOME 桌面默认对触控笔的压感支持还可以,但如果你用的是 KDE 或其它桌面,记得在系统设置里看一下 Wacom 设备是否被识别。libwacom-surface这个包有一层很重要的作用:它把 Surface 触控笔识别为符合 Wacom 协议的设备,很多绘制软件依赖这个识别结果。
4.4 音频:从无声到出声的三种排查
Surface Go 2 使用 Intel 平台的音频方案,在 Ubuntu 20.04 里很可能遇到"一个声卡都没显示"的情况。先执行:
aplay -l如果没有输出设备,大概率是缺少 Sound Open Firmware。
sudo apt update sudo apt install sof-firmware alsa-ucm-conf sudo reboot如果重启后仍然无声,问题可能出在内核选择音频 DSP 驱动的策略上。Intel 音频驱动有两个方向:传统 HDA 和 SOF。可以通过/etc/modprobe.d/下的文件强制指定:
sudo nano /etc/modprobe.d/soundfix.conf写入:
options snd-intel-dspcfg dsp_driver=1然后更新内核参数并重启:
sudo update-initramfs -u sudo rebootdsp_driver=1代表传统 HDA 驱动,dsp_driver=3代表 SOF 驱动。不同固件版本下,Surface Go 2 可能需要试不同值。一般是先试 1,不行改 3。改完后用aplay -l再看看声卡是否出现。
还有个容易被忽略的点:Ubuntu 桌面默认音频输出设备可能没选中正确的声卡。打开音量设置,或安装pavucontrol:
sudo apt install pavucontrol在"输出设备"标签页里切换一下扬声器/耳机,看看声音是否出来。
4.5 摄像头、亮度与自动旋转
摄像头在 Surface Go 2 上相对佛系。先看设备是否被内核识别:
lsusb dmesg | grep -i uvc如果有UVC Camera相关输出,就可以用cheese或浏览器直接测摄像头。要是完全没输出,先确认 Windows 内已经把 Surface 固件升级到最新,再去装 linux-surface 内核。有些摄像头固件需要由 Windows 侧的 Surface 驱动更新,Linux 本身无法主动升级固件。
亮度控制一般是 Intel 平台的标准背光接口,装完 linux-surface 内核后,FN 亮度快捷键大多可用。如果快捷键没反应,可以安装brightnessctl手动调:
sudo apt install brightnessctl brightnessctl set +10% brightnessctl set 50%自动旋转依赖iio-sensor-proxy。安装它:
sudo apt install iio-sensor-proxy然后在终端运行:
monitor-sensor转动屏幕时应该能看到加速度传感器的输出。如果完全没输出,多半是内核缺少hid-sensor-hub相关补丁,这在 linux-surface 内核里已经包含。GNOME 桌面在识别到传感器后,会自动开启平板模式的屏幕旋转,不用额外安装太多东西。
5. 从"能开机"到"适合开发":内存、存储、电源与开发环境
5.1 开发环境速建:一条命令装齐基础工具
驱动稳定之后,这台机器才算真正变成开发本。先装最基础的工具链:
sudo apt update sudo apt install build-essential git curl wget vim htop cmake net-tools python3-pip编辑器我用 VS Code 比较多,直接装 deb 包:
sudo snap install code --classic如果你不想用 Snap 版本,也可以去微软官网下载.deb包,用sudo apt install ./code_*.deb安装。对于 64GB 用户,我建议能不用 Snap 就不用 Snap,因为 Snap 的运行库会额外占很多空间。
Docker 是不少开发场景的刚需。安装命令:
curl -fsSL https://get.docker.com | sudo sh sudo usermod -aG docker $USER执行完后注销重新登录,当前用户就能直接执行docker命令了。
如果你的目标是 ROS Noetic,建议按官方文档操作,核心是添加 ROS 软件源,然后:
sudo apt install ros-noetic-desktop echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrcUbuntu 20.04 是 ROS Noetic 官方支持的版本,这也是我坚持不换 22.04 的另一个原因。
5.2 存储优化:64GB eMMC 用户如何活下来
64GB 版本装完 Ubuntu 20.04 桌面后,可用空间很容易只剩 20GB 左右。对轻量开发来说其实够用,但要注意几个占空间大户:
一个是journald日志。长时间运行后/var/log/journal可能吃好几 GB。可以设置日志上限:
sudo journalctl --vacuum-size=100M想永久限制也行,编辑/etc/systemd/journald.conf,把SystemMaxUse改成 200M,然后重启systemd-journald。
另一个是 Snap 的缓存和旧版本。snap list可以看到所有 Snap 包,如果确认不需要 Snap,可以严格一点:
sudo apt purge snapd这会连带移除 Ubuntu 软件商店,也会让部分默认应用失效。对 64GB 用户而言,我的经验是:开发工具尽量用apt或者官方 tar 包,IDE 用 VS Code 的 deb 或者源码包,浏览器用 Firefox 的.tar.bz2或 deb 版本,保持系统干净。
5.3 电源与睡眠:别迷信 S3 深度睡眠
Surface Go 2 在 Windows 上用的是 Modern Standby,也就是 S0ix 待机,并不是传统笔记本的 S3 睡眠。Linux 里面对应的是s2idle。
检查当前支持情况:
cat /sys/power/mem_sleep看到s2idle是正常现象,不要看到deep不存在就觉得系统不完整。在 Surface 系列上强行加mem_sleep_default=deep参数,很可能导致合盖后直接睡死,按任何键都醒不过来,只能长按电源强制重启。
我建议的做法是:
- 更新 linux-surface 内核后再谈睡眠,老内核的 s2idle 状态确实容易异常耗电。
- 合盖前把 WiFi、蓝牙都停掉?不需要这么极端,但可以关闭后台编译任务。
- 如果长时间不打算用,最好直接关机,而不是合盖待机。
电池信息可以通过upower查看:
upower -i /org/freedesktop/UPower/devices/battery_BAT0Surface Go 2 的电池管理在 Linux 下可以用,但不要指望和 Windows 的电源策略完全一样。我是把它当作"不插电能用一下午的终端机"来用的,重度编译仍然要插电。
5.4 快照:折腾内核前最重要的自救手段
后面你肯定会遇到升级内核、调整 GRUB 参数、装某个驱动实验等情况。强烈建议在系统稳定之后先做个快照。
timeshift是 Ubuntu 下比较方便的系统快照工具:
sudo apt install timeshift sudo timeshift --create --comments "after install linux-surface" --tags D如果你把根分区放在了 ext4 分区上,timeshift 可以生成 rsync 快照,占用不大,但是能在系统崩溃时把你拉回来。Surface Go 2 这类小众设备最怕的不是坏驱动,而是没有后悔药。
6. 一周实测踩坑记录:从引导丢失到内核升级翻车
6.1 排错表:遇到问题先按这个顺序查
| 症状 | 可能原因 | 处理办法 |
|---|---|---|
| U 盘无法引导 | U 盘写入模式不对/接口兼容性 | 用 Rufus 的 DD 模式重写,换另一个 USB 口 |
| Type Cover 在安装时没反应 | 官方内核缺少 Surface 键鼠补丁 | 用外接 USB 键盘先完成安装,装完 linux-surface |
| 系统开机黑屏 | 内核参数或 GRUB 安装位置问题 | 在 GRUB 菜单按 e 临时加nomodeset,进系统后修正 |
| WiFi 搜不到或频繁掉线 | QCA6174 固件缺失/电源管理 | 安装 linux-firmware,关掉 NetworkManager 省电 |
| 触摸屏能点但笔不流畅 | 缺少 iptsd 或版本不匹配 | 确认已安装 linux-surface 内核,升级 iptsd |
| 完全没声音 | SOF 固件缺失或 DSP 驱动选择错误 | 安装 sof-firmware,试 dsp_driver=1 或 3 |
| 合盖睡眠后电量狂掉 | Modern Standby 下设备没有真正休眠 | 更新 linux-surface 内核,避免追加 deep 参数 |
| Windows 更新后 GRUB 丢失 | Windows 更新覆盖了 UEFI 启动项 | 进 UEFI 手动选 ubuntu,或使用 boot-repair |
| Windows 和 Ubuntu 时间差 8 小时 | RTC 时间基准不一致 | timedatectl set-local-rtc 1 --adjust-system-clock |
| 摄像头黑屏 | 固件未更新或 uvcvideo 未被触发 | 回 Windows 更新 Surface 固件,再试 linux-surface 内核 |
这张表基本覆盖了我一个月内遇到的所有大问题。其中频率最高的是 WiFi 掉线和触摸屏不顺畅,两个都是驱动或固件问题,不是硬件毛病。
6.2 几个令我印象深刻的现场
第一次装完系统,我兴冲冲地准备联网,结果 WiFi 列表一片空白。lspci能看到 QCA6174,但dmesg | grep ath10k显示 firmware 加载失败。后来发现 20.04 版的 linux-firmware 包版本比较老,更新一遍就恢复了。所以如果你的情况和这个一样,别急着换网卡驱动,先更新固件。
还有一次我手贱在/etc/default/grub里加了mem_sleep_default=deep,想试试能不能让合盖睡眠更省电。结果合盖不到半小时,再打开屏幕全黑,按什么都没反应,最后只能长按电源键 20 秒强制重启。后来查了内核文档才知道 Surface Go 2 在 Linux 下默认只支持 s2idle,强行用 deep 就是自杀式配置。
最后再说一个被很多教程忽略的点:Windows 更新有可能会把 UEFI 启动顺序改回去,导致开机直接进 Windows。这不是 Surface Go 2 特有的问题,是双系统机器的通病。解决方式不是每次重装系统,而是进 UEFI 把ubuntu启动项调到第一项,或者在 Ubuntu 里执行sudo update-grub后重启。
6.3 我现在的使用习惯
折腾这一圈之后,我基本固定成下面这套流程:
- Windows 保留 30GB,专门用于 Surface 固件升级和偶尔的文档处理。
- Ubuntu 的根分区保留 50GB 以上,所有代码和项目放在里面。
- 每次升级内核或系统大版本前,用 timeshift 做一个快照。
- 不在 Ubuntu 里折腾 Big Sur/Hackintosh 那种高风险操作,Surface Go 2 不是拿来跑黑苹果的。
这台机器现在对我来说就是一台随时随地打开终端、跑 ROS 节点、写 Python/Shell、偶尔远程回台式机干重活的移动开发终端。它的性能上限不高,但足够轻、足够安静,配合 Ubuntu 20.04 的稳定和 linux-surface 内核的硬件支持,比刚买回来时那个只能开浏览器的 Windows 平板强太多了。
如果你想照着做,我的最后一条建议是:别一次性把所有优化都做完,先让我上面这些关键步骤跑通,用上两天,再根据自己实际需求去加东西。Surface 设备在 Linux 下的生态已经比以前成熟很多,但最稳妥的办法仍然是"小步快跑,随时回滚"。