Skip to main content

从此,我再也不在 Surface 上使用 Windows 了

· 14 min read

本文旨在记录我的使用方法以及帮助更多的人学会使用 FydeOS,ChromeOS 可以用作参考。
注意,本人建议在没有独显的二合一设备上使用 ChromeOS 系列的操作系统,比如 Microsoft Surface、Lenovo MIIX。
本文仅限于按照无独显的 64 位英特尔酷睿 CPU 设备进行描述,其他类型的硬件仅作参考

为什么要用 ChromeOS

以 Surface 为例,作为一个二合一 PC,Surface 的标准配件就是 Surface Typecover 和 Surface Pen。虽然我认为用鼠标实在是多此一举,但在 Windows 10 环境下,Surface 确实是一个不讨好的设备。因为 Windwos x86 应用对触屏优化太差 Windows UWP 应用生态又差,所以 Surface 的体验会很差,但纵观目前主流的操作系统:Windows、Linux、MacOS、Android、IOS、IpadOS,前三者拥有更丰富更强大的功能,后三者拥有良好的移动设备优化。如果我们想同时满足两个要求,入手点就在于 Linux 和 Android。特别是对于开发人员来说,Linux 是不可割舍的,而 Andoid 又是基于 Linux 虚拟机开发的,并且两者都有开放源代码,在理论上一定有办法实现基于完整 Linux 系统的安卓。第一个把这件事做大的,是安卓亲爹 Google,这个融合出的系统就是 ChromeOS。虽然一直宣称是云操作系统,但仍然是有办法本地化的。
Google 只对 ChromeBook 系列的机器推出 ChromeOS 适配,而其他机器想要使用 ChromeOS 就需要选择基于 ChromeOS 的开源项目二次开发的类 ChromeOS 系统,FydeOS 是其中之一。在内容相同的情况下,我会优先将 FydeOS 称为 ChromeOS。

在使用前先了解系统结构

目前阶段想要用好 ChromeOS 仍然需要有一定的 Linux 基础

  • Linux 底层
    • Chrome 浏览器
      • Chrome 插件
      • Chrome APP
    • ARC++ 安卓运行时环境
      • Android APP
    • crosvm 虚拟机
      • Termina 虚拟机映像
        • Linux 容器

本体

ChromeOS 本身的 Linux 系统是一个高度阉割版的 Linux,很多 Linux 必备的功能都没有,并且 ChromeOS 会将一块硬盘分为多个分区存储不同路径下的内容,而 Linux 系统关键目录都会自动挂载为只读并且所在分区不会有太多剩余空间。这种特性使得修改系统变得十分困难。
这也是我选择 FydeOS 的一个原因,FydeOS 可以将原本的多分区安装方法变为单分区安装,除启动引导文件外其他文件都会存储于一个.img 映像中,大小正好占满整个分区。

Chrome 浏览器

Chrome 浏览器是 ChromeOS 的核心,整个系统界面的显示都是由 Chrome 负责的,在使用上与普通的 Chrome 浏览器并无不同,能够安装插件和网页应用,唯一的不同就是使用组合键 Ctrl+Alt+T 能够打开 crosh,而 crosh 提供了系统本身的 Linux 终端入口。
在使用键盘的时候,ChromeOS 支持常用的组合键,比如说 Alt+Tab,也支持触控板三指横滑切换标签页、三指下滑显示所有已打开窗口。

Android 子系统

这是 Google 专门为 ChromeOS 定制的安卓系统,比虚拟机效率高很多还和 ChromeOS 本身高度融合,主要体现为:

  1. 安卓设置 APP 里只显示 Chrome 设置页面中没有的项目,两个系统都有的设置项目是共用的,显示在 Chrome 设置页面中。
  2. 安卓中安装 AIDA64 等软件之后看到的系统硬件信息是完整的真实信息
  3. 安卓软件的显示方式与安卓 x86 相同
  4. 安卓使用 Chrome 作为 webviewer(注意此处并不是指安卓版的 Chrome),网页也可以正常调用 APP 打开链接 可以说安卓子系统的存在极大的满足了日用的很多需求,需要注意的一点是有些 APP(比如 ONENOTE)的 arm 版本和 x86 版本是不同的安装包,Google Play 可以保证下载正确的安装包,其他应用商店未知。 对于应用兼容性,由于本人只玩音游,所以只能说除了万恶的CYTUS其他的音游没有遇到不能玩的。

Linux 子系统

ChromeOS 本身是一个 Linux 却又使用了一个 Linux 容器,其初衷是为了满足用户对 Linux 功能的需求又能保证本身的系统结构不被破坏,运行速度不会因为使用时间延长而变慢。Linux 容器默认使用 Ubuntu,也可以自行修改发行版,容器通过Crostini与 ChromeOS 高度融合。

下载安装以及初始化设置

由于目前 FydeOS 仍处于开发阶段,安装配置过程小白不友好,此处也不再赘述,可以参考我的内测版体验报告

如何满足日常需求

首先对于 Chrome 浏览器和 Android 子系统来说,首要要解决的问题就是访问外网,因为无论是 Chrome 插件还是 Android APP,在无法访问外网的情况下下载和及时更新都得不到保证,本文仅仅提出这个问题,并不会提供解决方法。

Chrome 浏览器

Chrome 浏览器我推荐仍然当作一个普通浏览器使用,Chrome APP 跟 Android APP 比起来体验差很多。
FydeOS 关闭了 Google 帐号功能,如果想要自行开启请参考XDA 的文章。这个文章的方法随着 FydeOS 更新可能会失效。

Android 子系统

如果你使用过 Android x86 的话使用起子系统应该是得心应手的,因为在使用体验上是完全一致的。
如果你没有用过 Android x86 但是用过 Chrome 和 Android,你可以通过对比来决定到底使用网页端还是 Android APP。
如果你这两个都没用过。

Linux 子系统

相信需要用到 Linux 子系统的就更加不用多说了,这里仅放一个修改发行版的教程

Linux 本体

初始化配置

这部分是本文的最重要的部分,由于 FydeOS 本身就安装在轻薄设备上,这类设备对续航时间十分敏感,Android 子系统作为刚需是不可能关闭的,而如果我们合理使用 Linux 本体,关闭 Linux 子系统是完全可以实现的。并且通过自定义系统设置,我们也可以使续航时间进一步延长。
下文仅限于 FydeOS 单分区安装环境,其他环境可能不适用。
在 Chrome 浏览器任意页面按下组合键Ctrl+Alt+T进入 crosh,再输入shell回车即可进入终端。第一步我们将系统挂载为可读写,这个操作并不是必须的但有时是需要的。FydeOS各版本的root密码不尽相同,官网可查

sudo mount -o remount,rw /

这时如果你运行几个你在 Linux 上用到的命令就可以发现,它支持的命令实在是太少了!包管理器也理所应当的没有。
所以我们的下一步就是先解决包管理器的问题,没有包管理器依赖问题就会成为我们永远的痛。这里你有两个选择:

  1. 自己下载某个包管理器的二进制文件及其以来并手动放到正确的文件夹、手动配置。如果成功实现,你的 ChromeOS 将会拥有真正的包管理器,剩下的事情也会简单许多,但是难度很大。
  2. 使用ChromeBrew一键脚本。ChromeBrew 是一个由人工维护的专门为 ChromeOS 提供的包管理器,它安装使用都很方便,但是缺点是软件包很少而且由人工维护没有保障。

我目前仍然在使用 ChromeBrew,我同样建议先使用 ChromeBrew,如果有精力可以再尝试其他的包管理器。或者你也可以为 ChromeBrew 贡献代码使它成为一个好用的包管理器。解决了包管理器的问题,很多常用的依赖库也都自动安装上了。
下面介绍几个我遇到的 ChromeBrew 无法安装的软件。

TLP 电源管理

如果你嫌你的电脑不够省电的话,可以安装一个 TLP 查看设备信息及修改电源设置,安装方法参考自FydeOS 社区的帖子

在开始之前请安装好 git 和命令行编辑器(这里以 vi 为例),并且以普通用户执行。

cd ~/Downloads
git clone https://github.com/linrunner/TLP.git
cd TLP
vim Makefile
#前几行的内容修改如下,修改后保存退出

# Makefile for TLP

# Evaluate parameters
TLP_SBIN ?= /usr/local/sbin
TLP_BIN ?= /usr/local/bin
TLP_TLIB ?= /usr/local/share/tlp
TLP_FLIB ?= /usr/local/share/tlp/func.d
TLP_ULIB ?= /usr/local/lib/udev
TLP_NMDSP ?= /usr/local/etc/NetworkManager/dispatcher.d
TLP_CONF ?= /usr/local/etc/default/tlp
TLP_SYSD ?= /usr/local/lib/systemd/system
TLP_SYSV ?= /usr/local/etc/init.d
TLP_ELOD ?= /usr/local/lib/elogind/system-sleep
TLP_SHCPL ?= /usr/local/share/bash-completion/completions
TLP_MAN ?= /usr/local/share/man
TLP_META ?= /usr/local/share/metainfo
TLP_RUN ?= /run/tlp
#下面两个指令会很快执行结束并输出内容,只要没有报错就是正常安装
sudo make
sudo make install

至此安装完成,配置文件位于/usr/local/etc/defualt/tlp,启动 tlp 的命令是sudo tlp start,更多的功能及配置请查看官方文档

Visual Studio Code

VScode 是我目前认为最好用也一直在使用的编辑器,在 FydeOS 上无论是使用 Linux 子系统还是 ChromeBrew 的实现都是将原版的 VScode 通过各种中间层投到屏幕上,有缩放问题、触摸响应问题、还费电。经过我的不断尝试寻找,发现了一个完美的解决方案:code-server
众所周知 VScode 是基于 Electron 开发的,那么理论上浏览器也应该能打开 VScode 页面(官方已经准备推出网页版了),而实现了这个想法的就是 code-server。它将 VScode 前后端分离,后端运行于服务器上,前端由任意浏览器打开,实现了远程使用 VScode 修改文件。我们只需要在 ChromeOS 运行这个服务器再用 Chrome 打开前端就可以使用原生渲染的 VScode 修改本地文件了(本文就是在这种情况下写成的)。
code-server 提供了预编译的二进制文件,更是方便了我们的使用。首先使用浏览器从 GitHub 下载最新的 Linux-x64 二进制文件,再打开 shell 终端:

cd ~/Downloads
tar -zxvf code-server********-linux-x64.tar.gz
cd code-server******-linux-x64
sudo mv code-server /bin
#在我的电脑上不放入bin文件夹无法执行,表现为 Permission denied

至此安装就结束了,使用方式可以查看官方文档,最便捷的打开方式就是在终端输入

code-server --no-auth

然后打开 http://localhost:8443