Surface Linux 安装指北

18年我拥有了一台SurfaceGo,这台平板由于其小巧的同时续航能力还不差的特点成为了我的出门携带电脑的首选,在外面把SurfaceGo作为远程机,使用IPSecVPN访问家里的主力机器成为我在外办公操作的主要方式。这种方式让我不用再携带笨重的主力机,只需要将SurfaceGo塞入背包就可以非常轻便的出门,为我提供了非常大的便利。但现在我想直接在SurfaceGo上写代码时,SurfaceGo的性能又不足以让我快乐的开Monorepo项目多端同时serve。因此我前几天淘了一个SurfacePro3,然后在SP3上装了FedoraOS用以延长续航并作为学习Linux系统的主力机。

本文用于记录在SurfacePro3设备上安装FedoraOS的过程及所踩的坑,同时安装后的一些简单设置。

使用SurfaceLinux的动机

在我已经在Vmware上使用CentOS虚拟机构建各种服务和网站的一年之久的基础上,我认为我对Linux系统的理解还处于非常浅显的层次,而每次安装Linux系统的虚拟机只是单纯的安装Docker之后跑Docker或者直接装一些其他服务,因此实际上没有真正的将Linux作为一个操作系统来使用,因此我打算淘一个老设备安装Linux的发行版使用,因为SurfaceGo的使用体验非常好,我首先就将目标机型选在了Surface系上,同时Surface老机型价格都不是太贵,看起来又非常Nice,便携性又不错作为一个需要带出门的机器是比较合适的。

在一些资料查找后,我发现SurfacePro3是一个兼容性比较好的机型,虽然是14年生产的老机子了,使用Win10系统已经开始比较吃力了,但YouTube上的博主装上Linux各种发行版之后的使用体验都还不错,因此我选择了SurfacePro3机型为目标。

Linux发行版选择

Linux有非常多很Nice的发行版,比如Ubuntu、ArchLinux、Linux Mint、FedoraOS、Debian、FishOS、PopOS等,但由于我这里将这台机子定位在软件开发,需要一个非常稳定且面向开发者设计的发行版,因此我选择了FedoraOS,然后直接选择当前Stable Release的Fodora35 WorkStation 系统。

需要注意的是,本文面向非专业背景下的用户

Linux on Surface Steps

这里提前说明一下,由于Surface的硬件有些比较特殊,因此可能安装上选定的发行版之后会出现WIFI异常、声音消失或相机无法启动等情况,这些情况可以在Reddit的LinuxSurface主题下搜索或提问,而后查看Github上SurfaceLinux的Repo。

这里贴一下SurfaceLinux的repo,这个repo提供了专为Surface魔改的SurfaceKernel,可以解决大部分的Surface安装Linux后出现的硬件和兼容性问题。同时对于某些机型有比较详细的安装指南,但我使用的SP3没有指南,可能是因为这个机型兼容性较好,都不需要特殊的安装技巧和前提。

在尝试安装之前先看看LinuxSurface中的兼容性列表,这里面会标明设备在Linux系统中的兼容性:

对于这种DIY操作,需要有较强的动手和资料搜集能力,因此推荐拥有一定Linux使用经验和编程背景的读者尝试。同时每个机型可能由于硬件出厂时间、硬件固件、BIOS版本等不同会有不同的问题和异常,因此需要进行仔细的问题排查。

Step1.制作启动U盘

我选择的FedoraOS直接有一个可以制作启动U潘的软件FedoraMediaWriter,因此可以非常方便的制作启动盘,这里不同的机型可能有不同的要求,SP3可以直接使用FedoraMediaWriter制作的启动盘,但我的SurfaceGo就无法识别(SurfaceGo无法识别MBR引导的U盘,只能识别GPT引导的U盘,Windows上可以使用Rufus使用GPT引导模式写入U盘)。

这里我选择的是最新的稳定版本FedoraWorkStation35,直接一键制作启动盘,非常的方便。

这里需要注意的是,FedoraMediaWriter制作的并不是单纯的系统安装程序,而是一个LiveCD,可以理解为在U盘上运行的系统,现在大部分现代Linux操作系统都可以制作LiveCD,而使用LiveCD有一个好处就是可以不安装系统的同时查看该发行版在设备上的兼容性,比如有些机型就在LiveCD模式下无法正常启动WIFI,对于某些没有有线网口的设备来说就需要先查找如何解决WIFI这个问题。在LiveCD中可以提前了解到系统实际安装到硬盘上后的一些硬件或驱动问题。比如我的SurfaceGO在LiveCD中就无法启动摄像头和WIFI,这两个问题就需要提前查找资料解决。

Step2.更新Windows

我们需要更新Windows到最新版本,因为Surface上的Windows更新并不止是更新系统,同时还包含一些固件和BIOS更新,而如果使用旧版的固件和BIOS可能会导致不可预期的问题,因此我们直接将Windows更新到最新版本。

Step3.关闭SecureBoot和TPM并设置Boot Order

我们需要进入Surface的BIOS将SecureBoot关闭,SecureBoot和TPM都用于保证设备上运行的系统的完整性和合法性,SecureBoot开启后只有经过认证的系统才能在设备上运行。开启TPM后,设备将在引导过程中检查系统的完整性。

首先我们需要进入BIOS,这里进入BIOS的方法不同的机型有不同的方法,SP3需要关机后同时摁住上下音量键而后摁开机键,在出现Windows图标后松开即可进入BIOS。SurfaceGo则只需要在开机时摁住音量上键就可以进入BIOS。

SurfacePro3 BIOS
SurfaceGo BIOS

关闭上述两个选项后我们会在系统安装完时通过SurfaceKernel重新将这两个选项开启。

然后需要将启动设备的顺序改为USB优先启动,这个操作比较简单我就不放图了。

Step4.进入Fedora LiveCD

这里有两种方法进入U盘启动,第一种是在进入系统时通过组合音量键和开机键进入,第二种是通过Windows高级启动进入。第一种方法每一种机型组合按键可能不一样,同时我是只使用第二种方法因此就跳过。第二种方法需要进入Windows设置=>更新和安全=>恢复=>高级启动(立即重新启动)

Step5.通过高级启动界面进入LiveCD

在插上U盘后进入高级启动,在使用设备启动列表中会出现一个名为Linpus Lite的启动选项,点击就可以进入LiveCD加载了。

这里有两个Fedora是因为我的SurfaceGo我装的双系统,在写文章的时候已经装上了,因此会显示有两个Fedora选项,在没有装其他系统的电脑上应该只会出现左下角LinpusLite和右边两个选项。

选择Linpus Lite选项后会进入一个引导界面,这里选第一个就可以了。

Step6.在LiveCD中检查各项硬件

在LiveCD中可以对各项硬件进行检查,这里我们先选择TryFedora,不直接进行安装。

Fedora里需要摁下TouchPad才能点击,推荐先在设置里面把TouchPad中的Tap to Click开启,这样可以直接轻触TouchPad触发左键单机更加符合习惯。(双指轻触是右键,三指上下滑开关Activities,三指左右滑切换WorkSpace,和Windows上差不多)

这里简单列一下需要检查的列表:

  • 触屏(是否断触)
  • Surface 键盘(是否全键无冲)
  • Surface Pen(是否断触)
  • Surface TouchPad(是否能使用多指操作)
  • 电池显示(Reddit上有的无法充电)
  • 亮度设置
  • 音频播放(能否播放)
  • WIFI(网卡是否正常、是否能连上)
  • 蓝牙(一般没法用WIFI就没法用蓝牙)
  • 性能模式(SP3就没法用PowerMode)
  • 使用SystemMonitor查看资源消耗量
  • 有线网口
  • 麦克风
  • 前后置摄像头(这个我觉得比较重要,因为如果前置摄像头可以用可以使用Howdy模拟高延迟版的WindowsHello : ))
  • 分辨率(调整一下分辨率看看)

WIFI等需要通过右上角的状态栏查看:

SurfaceGo无法使用WIFI

其中摄像头可以通过Chess应用检查:

SurfaceGo暂时没法用摄像头

声音可以在Terminal内狂按退格键检查:

SurfaceGo有音频输出

在这些做完后,想必你已经对设备安装需要花费的精力有了一个评估,比如我的SP3在LiveCD中基本都正常,因此我顺利的安装上了Fedora,而在SurfaceGo上则出现了以上两个主要问题,WIFI和摄像头都消失了,这两个问题应该都可以解决,但需要花费时间在外网上搜索解决方法,其中音频问题可以通过安装SurfaceKernel解决,WIFI问题需要一个脚本进行配置。

如果当前使用的发行版很多硬件都出现了异常,那一个最简单的办法就是换一个发行版尝试,因为不同发行版对设备的兼容性是不同的,因此可以通过更换不同发行版的LiveCD来选择最适合的系统安装。

Step7.搜集问题的解决方案

可以在SurfaceLinux Github Repo上的ISSUE和Discussion中搜索之前的问题和讨论,或者在Reddit中SurfaceLinux或特定发行版下的Topics中搜索或提出问题。这个社区还是比较活跃的。同时Stack Overflow和Super User及各个发行版的Forum也是非常好的搜索方向。

Step8. 安装系统

这里安装系统就比较简单了,直接选Install如果是单系统直接一路按照默认就可以了,双系统需要设置一下硬盘分区,但总体来说现在的Linux系统安装已经没有之前只有命令行那么麻烦了。

Step9. 进行基础设置

这里首先还是按照上面的方法将TouchPad的Tap to Click设置好,然后通过找到的解决方案解决具体的问题。

三指上滑打开Activities界面,然后直接键入Terminal就可以快速搜索Terminal软件打开,然后执行以下指令更新一下系统。我安装的FedoraOS上的默认包管理器是dnf,因此我首先使用dnf更新一下,如果想换源就百度一下就出来了,已经有很多教程了。我这里下载速度是很快的最快有30MB/s左右,很快就下好了。

sudo dnf update

我们这里Terminal不一样因为我这里使用了DarkMode然后装了zsh。

这里默认是将界面放大到了200%,如果觉得界面太大可以调到100%。

Step10.软件安装

Fedora默认有一个Software商店可以安装软件,大部分开发用的软件都可以在上面找到,但还是有些软件比如VSCode上面没有。这里我们就可以使用SnapStore进行安装。SnapStore是一个第三方的开源LinuxDesktop软件仓库,在这里可以找到大部分日常需要的软件。但国内生态下的软件基本没有或无法使用,比如QQ音乐和QQ我就无法在我的SP3上安装使用,启动就崩溃。

这里简单说明一下SnapStore(桌面程序)的安装流程:

#安装 snap cli
sudo dnf install snapd
#将snap软件实际存放地址链接到/snap
sudo ln -s /var/lib/snapd/snap /snap
#安装snap store桌面程序
sudo snap install snap-store

安装好后就应该可以看到Activities的App Grid里面出现了SnapStore了,打开就可以搜索自己想要的软件了。

Step 11.安装Linux Surface Kernel

这一步需要查阅Linux Surface Kernel所提供的的文档根据不同的机型进行操作,同时文档中提供了不同发行版的安装流程,这里我就以FedoraOS为例了,直接执行以下命令:

#将Linux Surface的仓库加入dnf中
sudo dnf config-manager --add-repo=https://pkg.surfacelinux.com/fedora/linux-surface.repo
#安装Linux Surface Kernel及其依赖
#iptsd全称 Intel Precise Touch & Stylus是TouchScreen的一个支撑软件
sudo dnf install --allowerasing kernel-surface iptsd libwacom-surface
#启动ipstd服务
sudo systemctl enable iptsd

Step12.安装surface-secureboot以启用SecureBoot

之前我们为了安装Linux将SecureBoot关闭了,现在我们可以通过LinuxSurface提供的surface-secureboot包来启用SecureBoot以保证系统的安全性。

首先需要安装这个包,需要注意的是不同发行版的包名有一定差异,一定要根据文档中具体发行版来安装,这里是FedoraOS中的包。

同时在安装这个包是会输出一个秘钥,请记录下来,一会儿需要用到,我的秘钥应该是password(有点记不得了)。这个内核是独立于当前内核安装的因此如果surface-kernel内核安装异常后用户就可以回退到原来的内核恢复使用。

#FedoraOS中surface-secureboot包
sudo dnf install surface-secureboot

在安装并记录秘钥后,重新启动Surface,这时应该会出现一个蓝色的屏幕,然后选择添加秘钥,把刚才的秘钥输入进去就可以了,我在设置时没有截图同时网络上又没有找到具体的图片,因此就跳过了,但是这个设置不是很难。如果是双系统就要小心不要把Windows系统的SecureBoot秘钥删了,选择添加秘钥就行。

Step13.开启SecureBoot和TPM

重新回到BIOS然后开启SecureBoot和TPM,然后重启,这时你应该可以看到GRUB的启动列表,一共有三个可启动选项,其中第一个是FedoraOS第二个是Fedora用于Recovery的类似安全模式的系统,第三个是WindowsBootManager。

到这里整个Linux Surface 的系统安装就完成了。但应该在使用过程中有些小问题,但可以通过Google找到答案。

SurfaceGo双系统

我的SurfaceGo上基本没有啥大软件,而他又只有128G空间,上面只有用于远程的软件和一些SurfacePen适配的笔记软件,因此只占用了不到40G,有大概70G的空闲空间,因此我使用DiskManager将C盘空间压缩到了50G,剩下的40G左右的空间作为unallocated sapce。然后在Fedora的LiveCD中可以直接自动配置空闲的空间,然后自动安装多启动入口。非常的方便。

DiskManger入口在 控制面板=>系统与安全=>管理员工具=>计算机管理=>存储=>磁盘管理

这里我已经将Fedora装到了SurfaceGo上因此,这里从左往右第四个49GB的分区就是我原来压缩卷的出来的空闲分区,这里简单讲一下怎么压缩卷得到未分配空间:

对着装有Windows系统的分区右键点压缩卷,等待计算出可以压缩的空间大小:

可以看到我的Windows盘还有16GB左右的空闲空间可以压缩,这里我就不演示了,如果你在这里压缩卷后,硬盘上就会出现一部分未分配空间,然后FedoraOS就可以自动安装到这段未分配空间上。


本文粗略的讲解了如何安装Linux系统到Surface上,下一篇文章将会讲解关于Zsh、Neovim、Tmux的配置,同时将我的dotFiles仓库贴出来。


v1.0 wep 完成文章基本内容 2022-04-10

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注