ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Surface Go 2 安装 Ubuntu 20.04 全攻略:双系统、内核与驱动调校

2026/10/5 9:44:56 拓冰建站 浏览量
Surface Go 2 安装 Ubuntu 20.04 全攻略:双系统、内核与驱动调校 我前两天刚把一台吃灰的 Surface Go 2 从 Windows 里“解救”出来装上了 Ubuntu 20.04作为日常写代码和折腾嵌入式开发的主力机。很多人觉得 Surface 系列天生就是 Windows 的“形状”跟 Linux 八字不合但实测下来Go 2 这机器算是 Surface 家族里对 Linux 比较友好的型号之一只要把内核和驱动处理得当它完全可以变成一台称职的随身开发本。这篇文章我不打算给你抄一堆现成命令就完事。我会把从制作启动盘到双系统引导、再到触摸屏和 WiFi 这些关键驱动的完整链路都拆开讲清楚包括每一步的“为什么这么干”和实际操作中容易踩的坑力求做到真正的保姆级让没装过 Linux 的新手也能一步步跟着做成功。1. 为什么是 Ubuntu 20.04选型思路与避坑逻辑1.1 版本背后的“稳定压倒一切”逻辑先说系统选型。很多人第一反应是“Surface Go 2 都出了这么久了为什么不直接上 22.04 或者滚动更新的发行版”我的答案很直接20.04 这颗 LTS长期支持版是目前社区对 Surface 硬件适配信息沉淀最充分的版本。你遇到任何奇怪的问题不管是触屏失灵还是音频不出声一搜基本都有现成的解决记录用 22.04 可能也有解但很多坑你得自己重新踩一遍。另外20.04 对应的内核主线版本是 5.4虽然默认内核确实不完美但配合 surface linux 项目的预编译内核稳定性反而比追新版本更好。这就像你装修房子不会选刚建好的毛坯直接入住而是选交付时间长、问题都暴露过的小区住起来才踏实。1.2 双系统还是单系统先想清楚你的真实使用场景在我动手之前我纠结过到底是彻底抛弃 Windows 还是保留双系统。最后选了双系统原因很实际Surface Go 2 的 UEFI 固件和某些 Windows 专属的固件更新还是需要原生 Windows 环境来处理而且我偶尔要用的某些网银 U 盾和单位的办公系统只认 Windows。保留双系统等于是给自己留了条后路哪天 Linux 下某个硬件实在搞不定切回 Windows 还能继续干活。不过双系统的方案也有代价硬盘要分出一块给 Ubuntu而且 Windows 更新偶尔会“吃掉”Linux 的引导项这个在后续章节我会专门说怎么补救。如果你确定自己的工作和学习完全不需要 Windows那直接全盘安装 Linux 反而省事少很多引导上的幺蛾子。2. 安装前的关键准备把这些东西弄明白再动手2.1 制作启动盘最容易犯的错写入模式选错制作 Ubuntu 20.04 启动 U 盘是第一步最常用的工具是 Rufus。Surface Go 2 默认开启 Secure Boot安全启动所以 Rufus 的分区类型要选GPT目标系统类型选UEFI非 CSM文件系统保持默认的 FAT32 就行。很多新手卡在这一步是因为用了默认的 MBR 分区方案结果 U 盘在开机引导时压根不显示。写入模式要选DD 镜像模式而不是 ISO 镜像模式。虽然两者都能做启动盘但在 Surface 这种比较挑引导的机器上DD 模式的兼容性明显更好。Rufus 会弹窗提示你是否确认写入按确定等它跑完就行一个 8GB 以上的 U 盘足矣。2.2 千万别跳过先在 Windows 里压缩出磁盘空间双系统的关键一步是为 Ubuntu 腾出磁盘分区。在 Windows 的“磁盘管理”里找到主分区通常是 C 盘右键选择“压缩卷”然后输入你要压缩出来的空间大小。Surface Go 2 一般有 8GB 内存硬盘容量通常 128GB 或 256GB建议至少给 Ubuntu 分出 60GB 以上毕竟你要装开发环境、交叉编译工具链和各种依赖库空间太紧后期很痛苦。这里有个很容易被忽略的坑压缩出来的空间在 Windows 磁盘管理里会显示为“未分配”这个状态是正确的千万别把它格式化成 NTFS 或者其他文件系统。Ubuntu 安装程序能直接识别未分配空间在它上面新建分区。2.3 固件与 BIOS 设置进 UEFI 前的三件套Surface Go 2 进入 UEFI 的方式很特殊先彻底关机然后按住音量加号键不松手同时按一下电源键屏幕上出现 Surface Logo 后再松开音量键就能进 UEFI 设置界面。在这个界面里你把“Secure Boot”设置为Disabled把“Enable Boot from USB”设置为Enabled然后保存退出。关于安全启动我的建议是直接关掉。虽然 Ubuntu 20.04 支持 Secure Boot但后续安装第三方驱动模块比如 surface linux 内核里的某些 DKMS 模块时如果 Secure Boot 还开着每次加入新模块都可能要你去 BIOS 里确认 MOKMachine Owner Key麻烦且容易让新手一头雾水。关闭 Secure Boot 以后整个安装和配置流程会顺畅得多日常使用也不会有安全性上的明显损失。3. 保姆级实操从 U 盘引导到系统安装完成3.1 进入安装界面与分区方案选择把做好的 U 盘插到 Surface Go 2 上建议插 USB-A 口或者通过扩展坞接 Type-C 口然后重启并按住音量减号键直到出现引导菜单选择界面。在这里选中你的 U 盘一般会显示为 UEFI: USB 设备型号回车启动进入 GRUB 菜单选 “Try or Install Ubuntu” 就能进入桌面环境。点击桌面上的“Install Ubuntu”安装程序会让你选择语言、键盘布局到了“Installation type”这一步选Something else其他选项手动分区。这里比默认的“Install Ubuntu alongside Windows”更可控能避免安装程序把引导加载器的位置搞错。3.2 手动分区的最佳实践我只用了两个分区分区方案我建议简洁为主第一个分区大小 4GB用作EFI System Partition。如果你的 Windows 引导分区已经有 EFI 分区了理论上可以选择同一分区挂载到 /boot/efi但为了保险起见我会单独再建一个小的 EFI 分区给 Ubuntu 用避免两个系统的引导文件混在一起出问题。第二个分区大小是剩余的未分配空间挂载点选/文件系统选ext4。不单独分 /home 的原因很简单Surface Go 2 的硬盘容量本来就紧张分太细反而容易让某个分区剩余空间不够。系统全放根分区里日常使用完全没问题。如果之后要重置系统只备份 /home 目录里的数据就行没必要为了“规范”而牺牲灵活性。3.3 引导程序Bootloader安装位置别乱选在手动分区界面的最下方有一个“Device for boot loader installation”下拉菜单。很多人会直接选 /dev/sda硬盘本身这在小黑盒 ThinkPad 之类的机器上没问题但在 Surface Go 2 上建议选择刚刚创建的EFI System Partition 对应的那个分区设备比如 /dev/nvme0n1p1 或者 /dev/mmcblk0p1视你硬盘类型而定。这样 GRUB 引导程序会准确写入该 EFI 分区后续启动时不会出现“Operating System Not Found”这类让人心慌的报错。确认分区方案没问题后点击“Install Now”接下来就是等待系统安装完成。装好后重启拔掉 U 盘正常情况下你会看到 GRUB 引导菜单里面有 Ubuntu 和 Windows Boot Manager 两个选项。如果只看到 Ubuntu 而看不到 Windows也不用慌在终端里执行sudo update-grub就能重新扫描并加入 Windows 的引导项。4. 驱动配置的硬骨头内核、触屏、WiFi 与音频4.1 先换内核决定 Surface 硬件命脉的一步系统装好后直接在那套安装盘默认内核下用触屏大概率没反应WiFi 时断时续摄像头也不工作。原因很简单Ubuntu 官方内核里没有集成 Surface 硬件的全部驱动模块这些代码是社区开发者维护的。解决办法是使用linux-surface这个项目提供的预编译内核。在终端执行以下命令我把完整命令列出来方便你直接复制wget -qO - https://raw.githubusercontent.com/linux-surface/linux-surface/master/pkg/gpgkey/surface.asc | sudo apt-key add - echo deb [archamd64] https://pkg.surfacelinux.com/debian release main | sudo tee /etc/apt/sources.list.d/linux-surface.list sudo apt update sudo apt install linux-surface-secureboot-mok sudo apt install linux-image-surface linux-headers-surface libwacom-surface iptsd第一条命令是导入仓库的 GPG 公钥第二条是把仓库地址写入系统源列表。安装linux-surface-secureboot-mok这个包是为了后续内核更新时自动签名但因为我之前建议你关闭了 Secure Boot这个包也可以不装。接着安装linux-image-surface和linux-headers-surface是内核本体和头文件libwacom-surface和iptsd是专门为 Surface 触屏和笔支持服务的驱动。安装完成后执行sudo update-grub sudo reboot重启后在终端运行uname -r如果看到内核版本号末尾带-surface字样说明内核切换成功了。4.2 触屏与触控笔的适配细节新内核装好后触屏应该能基本工作但有个小问题可能会让你觉得“不完美”触摸屏的坐标在某些旋转角度下不准确或者说笔的压感不生效。别急着重装系统多半是校准和旋转配置文件的事。iptsd这个包负责将 Intel Precise Touch 的原始触摸数据转换成内核输入事件。它默认的配置是按平板模式的竖屏方向来的。如果你平时更喜欢用横屏模式连接键盘底座的状态需要去修改/etc/iptsd/iptsd.conf里的touch-rotation参数把它调整成你实际屏幕的方向。改完之后重启iptsd服务sudo systemctl restart iptsd校准触控笔的压感时如果发现笔悬停光标偏移明显可以在系统设置里的“Wacom 数位板”里重新校准。需要注意的是Surface Go 2 的笔走的不是普通的蓝牙协议而是基于 N-Trig 的主动笔技术所以一定要确认内核里的intel_sst相关模块没有被误删或禁用。4.3 WiFi 和蓝牙看似简单实则暗藏玄机Surface Go 2 的无线网卡型号是骁龙 X7 或者是高通 QCA6174Ubuntu 20.04 的内核通常能原生识别但实际体验中有人会遇到休眠唤醒后 WiFi 搜索不到任何网络的现象这就是网卡固件没有正确重新加载导致的。我的解决办法是禁用网卡的电源管理让系统在休眠唤醒时重新初始化网卡sudo nano /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf把文件里的wifi.powersave 3改成wifi.powersave 2保存退出然后重启 NetworkManagersudo systemctl restart NetworkManager至于蓝牙连接鼠标键盘基本稳定但如果蓝牙耳机频繁掉线可以先检查是不是因为 2.4GHz WiFi 频段的干扰。把无线网络切换到 5GHz 频段后蓝牙耳机的连接质量会有明显改善。这一步在路由器管理后台调整就行代价不大但体验提升很直观。4.4 音频和外放被忽略的音频路由问题音频这一块Surface Go 2 在 Ubuntu 下的支持比较微妙。外放声音时扬声器能响但插入 3.5mm 耳机孔后可能依然从外放出声或者耳机有声音但麦克风没反应。这通常是sof声卡固件加载顺序的问题。检查声卡是否被识别aplay -l如果发现声卡名称里带有sof字样说明固件加载是正常的。接下来打开/etc/modprobe.d/alsa-base.conf在文件末尾添加一行options snd-hda-intel modelauto这行配置会让内核自动匹配合适的 HDA 音频模型解决大部分耳机和外放切换不正常的现象。改完之后重启一下系统或者执行alsactl restore试试。如果耳机麦克风仍然无法工作还有一个笨办法但很有效买个 USB-C 转 3.5mm 的声卡转接头Surface Go 2 的音频路由有时在硬件层面就有点任性外置声卡一劳永逸。4.5 摄像头这个东西别抱太大期望坦白说Surface Go 2 的前后摄像头在 Ubuntu 20.04 下支持得不算完美。虽然新内核已经能驱动它们但色彩和曝光控制明显不如 Windows 下的优化。如果你有视频会议需求尤其是需要 Windows 专用滤镜效果的场景还真别指望 Linux 下能完全复现。我自己的处理方案是前置摄像头能用就行用来开个视频会议、扫个二维码完全 OK后置 800 万像素的摄像头基本不用反正也没人会举着平板去拍 4K 视频。如果你非常介意摄像头表现可以考虑安装v4l2loopback内核模块去做一些视频流处理但对绝大多数人来说这属于投入产出不成正比的事。5. 系统层面的调优把 Surface Go 2 调教成趁手开发机5.1 电池管理与功耗控制策略Linux 内核默认的电源调度在移动设备上往往偏“性能优先”对 Surface Go 2 这种电池容量不算大的设备来说不调一下续航会很难看。我建议安装tlp这个功耗管理工具它比内核默认策略更激进地偏向省电sudo apt install tlp tlp-rdw sudo systemctl enable tlp安装完成后tlp会自动接管电源管理。还可以在/etc/tlp.conf中手动调整CPU_SCALING_GOVERNOR_ON_BAT为powersave保证在电池模式下 CPU 不会因为频率飙升而烧掉电量。实测下来我开着浏览器十几个标签页再开着 VS Code 写代码同时连着 WiFi亮屏使用坚持个五六个小时问题不大对于 10.5 英寸的小本子来说这个成绩可以接受。5.2 散热控制小机身的老大难问题Surface Go 2 是无风扇设计用的还是酷睿 m3 处理器负载一旦拉满机身背部靠近摄像头的位置就会明显发热。Linux 下没有原生的风扇控制工具因为它压根没风扇热量的释放完全靠金属机身被动散热。我的经验是装一个throttled工具它能读取 Intel 处理器的温度阈值并智能调节功耗墙避免长时间高负载运行下出现过热降频的“幻灯片”体验。安装方法很简单sudo apt install git build-essential git clone https://github.com/erpalma/throttled.git cd throttled sudo ./install.sh安装后会有一个lenovo_fix的服务虽然名字里带 lenovo但它同样适用于 Surface 设备。服务启动后你可以在throttled.conf里调整功率限制。我建议不要调得太激进毕竟无风扇散热是物理限制强行解锁功耗可能会导致机身温度超标反而加速硬件老化。5.3 开发环境速配从裸系统到能写代码既然是当开发本用装完系统和驱动的第一步就是把开发环境拉起来。我会装下面这几样顺序也很重要sudo apt update sudo apt install build-essential git curl wget sudo apt install vim htop net-tools接着安装 Python 和 Node.js 的开发环境Ubuntu 20.04 自带 Python 3.8但我建议再装python3-pip和python3-venv这样可以用虚拟环境隔离不同项目的依赖不会搞乱系统级 Python 包。sudo apt install python3-pip python3-venv curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - sudo apt install nodejs如果你搞嵌入式开发交叉编译工具链是必须的sudo apt install gcc-arm-linux-gnueabihf gcc-aarch64-linux-gnu这一套装完写个 Web 服务、跑点 Python 脚本、编个 ARM 程序开发本的基础算齐活了。之后再按需安装 Docker、VS Code 或者 JetBrains 全家桶看个人喜好。5.4 远程访问把平板当“薄客户端”用Surface Go 2 的配置放在今天来看属于入门级m3 处理器加 8GB 内存SSD 速度还行但总容量不大。如果你想拿它干重活比如编译大型 Android 项目或者跑本地大模型明显力不从心。这时候我推荐一条更务实的路子把它当成一台移动终端远程连你家里的主力台式机或者服务器。安装 SSH 客户端是基础但我更推荐装VNC服务端或者直接用 VS Code 的 Remote-SSH 插件。前者适合图形界面操作后者适合纯代码开发写代码时把文件都放在服务器上本地只是渲染一个编辑器界面体验跟本地开发几乎没差别而且完全不占 Surface 的 CPU 和内存。6. 常见问题与排查技巧实录6.1 双系统引导项无故消失怎么办Windows 更新有时会把 EFI 引导顺序重置掉导致开机直接进 Windows 而不经过 GRUB。别慌准备一个 Ubuntu 启动 U 盘进 Live 环境后打开终端挂载你的根分区和 EFI 分区sudo mount /dev/nvme0n1p2 /mnt # nvme0n1p2 是你的根分区按实际情况改 sudo mount /dev/nvme0n1p1 /mnt/boot/efi # nvme0n1p1 是你的 EFI 分区然后 chroot 进去重装 GRUBsudo mount --bind /dev /mnt/dev sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/sys sudo chroot /mnt grub-install /dev/nvme0n1 update-grub重启之后 GRUB 菜单就回来了这个方法我在无数台双系统机器上试过屡试不爽。6.2 屏幕方向锁定在竖屏怎么改回横屏在平板模式下系统感应到物理方向会自动旋转屏幕但有时旋转回来会卡在竖屏状态。快捷键CtrlAlt方向键在某些桌面环境下能强制旋转但如果快捷键失效可以用命令行xrandr --output eDP-1 --rotate normal如果触屏坐标也跟着反了再用之前说的iptsd配置里的touch-rotation参数来调整确保触控方向和视觉方向一致。6.3 待机唤醒后系统卡死这个问题的元凶通常是核心显卡的 DRI3 和 Wayland 在某些内核版本下的老兼容问题。我的建议是干脆用 Xorg 会话登录Ubuntu 20.04 登录界面齿轮图标里可以选择Ubuntu on Xorg避开 Wayland 的实验性 bug。如果必须用 Wayland可以试着手动更新 Mesa 驱动版本但复杂度会上升收益却不一定明显。6.4 键盘盖上的触控板偶尔失灵Surface 的专业键盘盖走的是专有接口偶尔会出现触控板无响应的情况。一个快速解决方案是重新加载驱动sudo modprobe -r surface_keyboard sudo modprobe surface_keyboard这个操作不会影响系统稳定性如果失灵频率很高建议检查一下键盘盖的磁吸触点是否脏了或者有氧化层用橡皮擦轻轻擦拭能解决很多接触不良的问题。7. 这套方案还能怎么用更多进阶玩法7.1 用 Docker 快速搭一个 ROS 开发环境很多做机器人和无人机开发的朋友会关心 Ubuntu 20.04 和 ROS 的搭配。Surface Go 2 跑仿真可能吃力但用来写 ROS 节点、编译功能包、做传感器数据可视化还是绰绰有余的。建议直接用 Docker 装 ROS Noetic 镜像避免污染宿主机环境docker pull ros:noetic-ros-base-focal这样宿主机始终干干净净ROS 相关的依赖全隔离在容器里。即使哪天把容器弄崩了重新拉一个镜像也就几分钟的事。7.2 外接便携屏组成多屏桌面Surface Go 2 只有一个 USB-C 口和一个 USB-A 口但它的 USB-C 口支持 DisplayPort 输出协议配合一个 Type-C 转 HDMI 的扩展坞就能外接 4K 显示器。在开发时一块竖屏放代码一块横屏跑测试和文档写代码的幸福感直线上升。7.3 模板化备份让系统配置可复现折腾完所有驱动和开发环境之后建议做一次备份免得哪次手滑把系统弄崩了又要从零开始。最省事的方法是把/etc目录下的主要配置文件打包备份更重要的一步是用dpkg --get-selections导出已安装的软件清单dpkg --get-selections installed-packages.txt以后重新安装系统后执行dpkg --set-selections installed-packages.txt apt dselect-upgrade就能把软件包全部装回来省去一个个手动安装的痛。写在最后的一点心得整个折腾过程下来Surface Go 2 在 Ubuntu 20.04 下的体验能达到“日用主力开发机”的水平但前提是你愿意花时间去调校它。硬件层面这机器的轻薄便携是顶级优势性能层面你要清醒地认识到它的天花板别拿它去跟台式机比编译速度。我个人现在最常用的组合是背光键盘盖加 Ubuntu 的平铺窗口管理器写代码、开文档、连服务器干杂活移动办公场景下的体验非常舒服。如果哪天你拿到一台全新的 Surface Go 2也可以按我这条路线试试装好系统的那一刻你会觉得之前的折腾都是值得的。