把 Surface Go 2 装成 Linux 开发本这句话说出来轻巧实际折腾过的人都知道问题基本都集中在驱动上。尤其你选的还是 Ubuntu 20.04 双系统官方内核在触摸屏、摄像头、WiFi 这几个关键点上的表现都很勉强属于“能进系统但没灵魂”的状态。这篇文章我会把整个流程完整过一遍从制作启动盘、关 BitLocker、分区装系统到安装 linux-surface 内核、配置触摸屏和电源管理每一步都尽量说清楚“为什么这么做”能帮你少踩的坑尽量提前避开。如果你手里正好有一台 Surface Go 2又想在保留 Windows 的前提下拿它当 Linux 开发机跑 ROS、写代码、做实验那这篇就是照着抄作业的版本。我不会用太新的发行版尊重标题里的 20.04但会告诉你哪些地方需要额外处理哪些坑是官方文档不会写的。1. 为什么是 Surface Go 2 Ubuntu 20.041.1 这台小机器的硬件底子Surface Go 2 在 Windows 阵营里不算性能机器但作为便携开发本有它独特的生态位10.5 英寸、无风扇被动散热、体积小、续航大半天。它有 4425Y 和 Core m3-8100Y 两种 CPU内存常见 4GB 或 8GB硬盘则分 eMMC 和 NVMe SSD 两种方案。这几点直接决定了你在 Ubuntu 里的后续体验。比如 eMMC 版本的磁盘在 Linux 下会显示为/dev/mmcblk0而 SSD 版本是/dev/nvme0n1分区的时候如果认错了盘后果会比较严重。再比如散热方面无风扇设计意味着你在高负载编译时会看到明显的降频这是被动散热的物理限制Ubuntu 下不会比 Windows 更热但也别指望靠软件解决。对我来说这台机器的最大价值在于“随手拿出来就能写点东西”。屏幕小但分辨率不低1920x1280 的 10.5 英寸屏幕配合触控笔码字、看文档、改配置都很舒服。缺点是接口只有一个 USB-C后面所有关于外设的准备工作都是围绕这个唯一的接口展开的。1.2 20.04 的执念与理性取舍很多人会问都 2025 年了为什么还装 Ubuntu 20.04答案对每个人不一样。对我这类做机器人、嵌入式相关开发的人来说Ubuntu 20.04 是 ROS Noetic 的官方支持系统很多课程、开源项目、工控设备的环境依赖都锁死在这套组合上。装新版本固然漂亮但你想跑的老代码可能连依赖都装不上。另外linux-surface 这个社区维护的内核仓库对 Ubuntu 20.04 有稳定的打包支持它不要求你升级到 22.04 或 24.04而是通过独立内核包解决 Surface 驱动问题。所以从 20.04 入手后续想升级再走升级路线完全来得及。我的建议是如果你只是想要一个好看的 Linux 桌面做日常使用那就别守 20.04直接上 22.04 或 24.04 更省事。但如果你和我一样需要在 ROS Noetic 生态里做开发、跑实验、跟教程那 20.04 就是最稳妥的底座。这篇文章后面所有的分区和驱动步骤都按 20.04 展开。2. 安装前的准备工作每一步都可能决定成败2.1 制作启动盘用 DD 模式而不是默认 ISOUbuntu 20.04 的镜像建议用 20.04.6 版本这是该系列最后一个维护版本内置的安装器对较新硬件的兼容性比初版好很多。下载地址用清华大学镜像站或者阿里云镜像站都行下载完顺手做一次 SHA256 校验避免拿到损坏的镜像。Windows 下制作启动盘我用的是 Rufus。重点在写入模式上打开 Rufus 选择 U 盘后分区类型选 GPT目标系统选 UEFI文件系统保持默认但写入方式建议直接选 DD 模式而不是 ISO 镜像模式。注意DD 模式会把镜像按字节写入 U 盘ISO 模式则是解包写入两种模式在多数机器上都能启动但 Surface 的 UEFI 固件对某些 ISO 模式启动盘的兼容性不佳。如果你插上 U 盘后开机找不到启动项先把写入方式改成 DD 模式重做一次这是最常见的启动失败原因。Linux 或者 macOS 下就简单了一条dd命令搞定sudo dd ifubuntu-20.04.6-desktop-amd64.iso of/dev/sdX bs4M statusprogress这里的/dev/sdX是你的 U 盘设备节点千万别写错。写完后系统可能会提示“无法读取介质”不用管弹出重插就行。2.2 关闭 BitLocker 和 Secure Boot 的顺序问题Surface 设备出厂默认开启“设备加密”也就是 BitLocker。很多教程告诉你要关 Secure Boot但没说顺序结果一堆人折腾完以后 Windows 直接弹恢复密钥界面要输入 48 位密钥才能进系统。正确顺序分三步先在 Windows 里彻底解密再关闭 Secure Boot然后重新启动确认 Windows 正常。在 Windows 里以管理员身份打开 PowerShell输入manage-bde -off C:它会开始解密 C 盘这个过程需要一段时间。用manage-bde -status查看状态直到Conversion Status显示为Fully Decrypted再往下走。如果把 BitLocker 关掉后重启 Windows 出现要求恢复密钥的情况大概率是只做了“暂停保护”而没真正解密。注意BitLocker 未解密时Ubuntu 的安装器在手动分区里能看到 Windows 分区但无法读取里面的文件而且如果你在后面操作中动过 EFI 分区Windows 很可能直接进不了系统。所以解密和备份永远放在最前面。Secure Boot 的关闭方法完全关机按住音量加键再按电源键开机会进入 Surface UEFI然后到 Security 菜单里把 Secure Boot 设为 Disabled。这一项关掉后Windows Hello 人脸和指纹登录可能不可用这是硬件层面的限制不是系统坏了。2.3 硬盘空间与分区规划在 Windows 磁盘管理里找到 C 盘右键压缩卷给 Ubuntu 留出足够空间。Space Go 2 的硬盘容量有限不同型号差异还很大我给个参考。硬件方案磁盘情况我的建议4425Y / 4GB / 64GB eMMC空间极紧张不推荐双系统建议单 Ubuntu 或直接用 WSLm3 / 8GB / 128GB SSD勉强够用压缩 60-80GB 给 Ubuntum3 / 8GB / 256GB SSD比较宽裕压缩 100GB 给 Ubuntu为什么我不建议在 64GB eMMC 上做双系统因为 Windows 本身加 Surface 驱动和预装软件就要占掉四十多 GB剩下空间给 Ubuntu 最多三十 GB还要算上根分区和交换分区更新几次系统就满了。开发机最怕的就是磁盘被塞满后编译中途报错那个感觉很痛苦。分区这一步不需要提前做好Ubuntu 安装器里可以处理。但建议你先在 Windows 里把空间压缩出来形成一个“未分配”的连续区域后面安装时直接选这块区域新建分区比在安装器里调整 Windows 分区要安全得多。压缩出来的空间不用新建卷保持未分配状态就行。3. 双系统安装实操从 U 盘启动到进入系统3.1 启动方式与安装界面导航U 盘插上后有两种方式进入启动设备选择。第一种是关机后按住音量加键再按电源开机进入 Surface UEFI 的 Boot Configuration然后从列表里选 U 盘。第二种是在 Windows 里设置 - 系统 - 恢复 - 高级启动然后选择“使用设备”里的 U 盘。这里有个特别容易翻车的问题安装界面下Surface 的原装键盘盖很可能没反应。因为官方内核还没来得及加载 Surface 的键盘固件键盘盖在安装器里表现为完全失灵。而触屏在安装界面通常也不可用所以你必须准备一个外接 USB 键盘鼠标或者一个 USB-C 扩展坞把键盘鼠标接上。注意Surface Go 2 只有一个 USB-C 口如果被 U 盘占用了就没法同时插键盘鼠标。我自己的做法是买了一个带 PD 供电的 USB-C Hub一边插 U 盘一边插键鼠还能顺便给机器供电。不带 PD 的 Hub 在安装过程中有可能因为外设耗电导致充电变慢这是很实际的经验。安装界面选择语言、键盘布局时用鼠标点击即可。如果只是键盘能用鼠标没反应可以用 Tab 切换焦点、回车确认再配合方向键操作也能撑过安装向导但体验很折磨。所以外接键鼠真的不能省。3.2 手动分区选择 Something Else安装类型界面里有三个常见选项Erase disk、Install alongside Windows、Something else。这里我建议直接选 Something else也就是手动分区。Install alongside 虽然能做双系统但它对分区大小的自动调整策略不够透明有时会把 swap 建在不合适的位置不太推荐。进入分区界面后先确认磁盘设备再找到那块“未分配空间”。假设你的机器是 128GB SSD你在 Windows 里压缩出 80GB这里会看到类似这样一块空闲区域。选中它点击加号新建分区大小比如 72GB类型为主分区使用为 ext4挂载点选/剩余 8GB类型为主分区使用为“交换空间”如果后续想单独给/home分一个区可以在分配根目录后再从剩余空间里划一块挂载点选 /home。但 Surface Go 2 的磁盘总量不大我个人不推荐过度细分一个/加一个 swap 就是最稳的组合。关键的一步窗口底部的“安装启动引导器的设备”选择整块磁盘比如/dev/nvme0n1或/dev/mmcblk0而不是某个分区。安装器会自动找到现有的 EFI 分区写入 GRUB保留 Windows 启动项。如果选错了目标磁盘的分区可能导致 GRUB 找不到 EFI 位置或者干脆把 Windows 引导信息弄乱。3.3 第一次进系统后先做三件事安装过程大概十分钟完成后拔掉 U 盘重启。正常情况会看到 GRUB 菜单第一项是 Ubuntu第二项是 Windows Boot Manager。如果你进的是纯黑屏或者直接进 Windows优先检查 UEFI 启动顺序在 Surface UEFI 里把 GRUB 或 Ubuntu 设为第一启动项。进入 Ubuntu 后第一件事是打开终端确认系统状态uname -r20.04 默认内核版本大概率是 5.4 或 5.15取决于你下载的是不是 20.04.6此时触摸屏可能没反应WiFi 可能搜不到网络但这都是正常的因为还没装 Surface 专用内核。第二件事是连接网络。建议手边准备一根 USB-C 转网口的线或者直接手机开 USB 共享网络。WiFi 如果暂时不能用USB 共享是最快的应急方案。第三件事很多人会忽略但双系统一定会遇到——Windows 和 Ubuntu 时间相差 8 小时。执行这条命令可以根治sudo timedatectl set-local-rtc 1 --adjust-system-clock原理很简单Windows 认为主板 RTC 存的是本地时间Linux 默认认为存的是 UTC两边一换算就差了 8 小时。设置 local-rtc 后Linux 会按照 Windows 的习惯去读取硬件时间两边就一致了。接着更新系统sudo apt update sudo apt upgrade基础工作做完接下来进入驱动配置重头戏。4. 驱动配置让 Surface Go 2 真正“活”过来4.1 为什么要用 linux-surface 内核官方 Ubuntu 内核不是不能用只是对 Surface 设备的支持非常有限。Surface 的触摸屏走的是 Intel Precise Touch 协议摄像头、传感器、固件校验都需要专门补丁。这些补丁没有合入 Ubuntu 官方内核所以你可以看到的现象是系统装好了但触摸屏像块砖头摄像头黑屏合盖睡眠之后电量跑得飞快。linux-surface 项目就是干这个的。它把 Surface 设备需要的驱动补丁维护到一套独立内核源码里并且为 Debian/Ubuntu 提供了现成的软件仓库。装它的内核不会影响 Windows因为 GRUB 和 Windows Boot Manager 是分开的启动项同时它和 Ubuntu 自带的官方内核也不冲突装完后你可以通过 GRUB 高级选项在内核版本之间自由切换。功能Ubuntu 官方内核linux-surface 内核触摸屏基本不可用iptsd 支持触控笔压感无效libwacom-surface 支持摄像头可能黑屏firmware-surface 补齐WiFi/蓝牙固件看型号碰运气固件包覆盖更全键盘盖有时能识别基本即插即用所以这一步不是“锦上添花”而是整个方案的核心。装不装 linux-surface 内核决定了 Surface Go 2 是“一台能跑 Ubuntu 的平板”还是“一台可用的 Linux 笔记本”。4.2 添加仓库并安装内核几条命令搞定先安装必要工具sudo apt install wget ca-certificates apt-transport-https gpg然后导入 linux-surface 仓库的 GPG 公钥并添加软件源wget -qO- https://raw.githubusercontent.com/linux-surface/linux-surface/master/pkg/repos/linux-surface.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/linux-surface.gpg echo deb [archamd64] https://pkg.surfacelinux.com/deb release main | sudo tee /etc/apt/sources.list.d/linux-surface.list sudo apt update接着安装内核和关键驱动包sudo apt install linux-surface linux-headers-surface iptsd libwacom-surface firmware-surface如果你的仓库列表里找不到firmware-surface可以先执行apt-cache search surface看看当前仓库实际提供了哪些包。不同时期包名可能略有差别以实际输出为准但linux-surface、iptsd、libwacom-surface这三个基本稳定存在。关于 Secure Boot因为我前面已经关掉了所以不用额外装 MOK 签名包。如果你出于某些原因不想关 Secure Boot需要装linux-surface-secureboot-mok并在首次重启时完成 MOK 密钥注册这一步比较麻烦而且平板按键少操作起来更费力所以我个人还是推荐直接关闭。装完以后重启在 GRUB 菜单里选择刚装的新内核。进入系统后执行uname -r看到内核版本后缀带-surface就说明启动到了新内核。同时确认触摸服务正常sudo systemctl enable --now iptsd systemctl status iptsdiptsd 是驱动 Intel Precise Touch 和触控笔的服务如果这里状态是 failed触摸屏和笔基本都没法用。4.3 触摸屏、触控笔与键盘盖的验证和微调触摸屏在 GNOME 桌面下几乎不需要额外配置。你可以用“设置 - 设备”里找触控相关选项或者直接用软件验证。终端执行libinput list-devices能看到Touchscreen和Tablet Pen相关的设备条目说明内核已经正确识别。触控笔压感这块我常用的验证方法是打开 GIMP 或者 GNOME 自带的“画图”应用用笔在画布上试一笔粗细随压力变化就说明 iptsd 和 libwacom 工作正常。如果没反应多半是 iptsd 服务没起来或者 Wayland/Xorg 的会话配置有问题。可以先切到 Wayland 再试因为 Wayland 对笔事件的传递比 Xorg 更直接。键盘盖的问题通常出现在启动阶段。如果合盖开机后键盘没反应优先检查dmesg | grep -i -E surface|keyboard|hid正常能看到 hid 键盘设备的注册信息。如果完全没有试着在 Surface UEFI 里确认 Type Cover 固件没有被禁用然后在 Windows 固件更新里升级一次键盘固件。我踩过的坑是在启动 U 盘安装时键盘失灵但装完新内核后重启就好这属于内核驱动缺失不是硬件问题。声卡方面Ubuntu 20.04 默认可能缺少 SOF 固件导致没有声音。直接安装sudo apt install sof-firmware装完重启如果还是没声音执行一次sudo alsa force-reload再在声音设置里检查输出设备。Surface Go 2 的扬声器在 linux-surface 内核下工作正常至少我手头这两台都稳定。5. 日常使用调优从“能开机”到“好用”5.1 电源管理、睡眠与充电Surface Go 2 的电池在 Ubuntu 下基本不需要额外驱动就能显示电量但电源管理策略还是值得调一调。我习惯装 TLPsudo apt install tlp tlp-rdw sudo tlp startTLP 会自动管理 CPU 频率、磁盘休眠、USB 自动挂起等参数。对无风扇的 Surface Go 2 来说最明显的好处是轻度使用时的发热和耗电会收敛一些。睡眠是 Surface 设备在 Linux 下的老话题。默认内核的睡眠模式是s2idle也就是现代待机合盖看似睡了实际还在低功耗运行一晚上能掉好几格电。你可以先看一下当前支持的睡眠模式cat /sys/power/mem_sleep输出一般是s2idle deep其中方括号标出的是当前默认项。如果你想让系统在 suspend 时使用 deep真正的 S3 睡眠可以临时测试echo deep | sudo tee /sys/power/mem_sleep sudo systemctl suspend秒睡秒唤醒或者正常睡眠都可以那就说明这台机器能用 deep。想永久生效可以在 GRUB 配置里加内核参数编辑/etc/default/grub把GRUB_CMDLINE_LINUX_DEFAULT里加上mem_sleep_defaultdeep然后运行sudo update-grub。但注意不同批次 Surface Go 2 对 deep 的兼容性不完全一样我手头有一台 deep 模式稳得很另一台唤醒后触摸屏就丢设备只能回滚回 s2idle。所以这个参数务必自己测别抄作业抄出问题。5.2 亮度、自动旋转与系统细节亮度调节在 Surface Go 2 上建议直接用 brightnessctlsudo apt install brightnessctl brightnessctl set 60%亮度键在 linux-surface 内核下通常能映射到 GNOME 的快捷键里但如果按键没反应brightnessctl 是最可靠的后备方案。自动旋转依赖加速度传感器Ubuntu 20.04 桌面默认带了iio-sensor-proxy你可以在“设置 - 显示”里打开自动旋转。如果转屏不跟手检查一下设备是否被识别systemctl status iio-sensor-proxy还有一个细节10.5 英寸屏幕配上 1920x1280 分辨率默认缩放对很多人来说都偏小。我建议在“设置 - 显示”里把缩放调成 150%键鼠摸起来会舒服很多。Wayland 会话下缩放和旋转的体验比 Xorg 好不少所以我在登录界面左下角直接把会话切成 Ubuntu on Wayland。5.3 开发环境配置与性能取舍系统稳定以后这台机器才算是真正能干活。Ubuntu 20.04 ROS Noetic 是嵌入式、机器人方向最常见的组合安装方式走 ROS 官方源即可。装完以后Surface Go 2 就能当成移动测试平台跑节点、看日志、连串口设备都没有问题。我日常还会装这些基础工具sudo apt install build-essential git curl vim htop ssh net-toolsVS Code 有 Ubuntu 20.04 的 deb 包装上以后写代码、远程开发都顺手。Docker 在 linux-surface 内核里跑起来很干净容器网络没有遇到过问题。性能方面受制于内存和硬盘Surface Go 2 不适合做大规模编译但轻量开发完全够用。8GB 内存版本建议用 zram 压缩交换来缓解内存压力sudo apt install zram-tools默认配置已经能工作你可以在/etc/default/zramswap里调整ALGOzstd和PERCENT50系统会在内存紧张时自动压缩换页相当于变相给内存扩容。对 4GB 内存版本来说这个优化非常重要不开它开几个浏览器标签加 IDE 就可能卡。6. 常见问题与排查技巧实录6.1 高频问题速查表我把折腾过程中遇到过和身边朋友经常问的问题整理成了一张表遇到问题先对照排查。现象可能原因解决方法安装后直接进 Windows启动顺序还是 Windows 优先按住音量加开机进 UEFI把 Ubuntu/GRUB 调为第一启动项GRUB 菜单没有 Windowsos-prober 没检测到执行sudo update-grubWiFi 搜不到网络固件缺失或驱动未加载先用手机 USB 共享联网安装 linux-surface 仓库和firmware-surface触摸屏没反应iptsd 未启动sudo systemctl enable --now iptsd确认服务状态触控笔有光标但没有压感libwacom 配置缺失安装libwacom-surface切换 Wayland 会话没有声音缺少 SOF 固件安装sof-firmware执行sudo alsa force-reload摄像头黑屏官方内核不支持 Surface Camera使用 linux-surface 内核并安装firmware-surface后测试合盖睡眠一晚上掉电 30%s2idle 逗留功耗测试deep睡眠模式能稳定则设置mem_sleep_defaultdeep键盘盖偶尔不识别驱动或固件问题重新插拔查看dmesg在 Windows 下更新键盘固件时间和 Windows 相差 8 小时RTC/UTC 规则不同sudo timedatectl set-local-rtc 1 --adjust-system-clock这些都不是玄学基本都能通过日志找到线索。重点是别急着一个一个乱试先看服务状态和内核日志再决定方向。6.2 几个我反复用到的排查技巧第一个技巧任何驱动异常先看这两条命令的输出。journalctl -b -p err dmesg | grep -i -E surface|ipts|firmware|error大部分驱动问题在日志里都有明确提示比盲目重装包高效得多。第二个技巧改坏配置或者新内核不稳定时不要慌。重启后在 GRUB 的“Advanced options for Ubuntu”里选旧内核启动系统就能回来。如果确认是 surface 内核的问题可以暂时卸载sudo apt purge linux-surface然后重启回到官方内核。这个回滚路径非常干净所以“尝试新内核”这件事本身风险很小。第三个技巧动手分区或者调整 EFI 之前先把启动项现状记录下来。在 UEFI 界面拍个照片或者在本子上写好磁盘布局。因为 Surface Go 2 的 UEFI 菜单比较简陋万一操作失误导致启动项失踪有原始记录能快速定位问题。最后再分享一个我自己的使用习惯Surface Go 2 上网本属性和开发属性并存但我基本不依赖合盖睡眠。离开的时候直接关机回来开机到进桌面大概十几秒比折腾 deep sleep、s2idle 和各种唤醒异常省心得多。这台机器关机状态下的电量损耗几乎可以忽略这也算是我实测下来最“无脑但稳妥”的方案。
