解决方案

ChromeOS 体验

seo靠我 2023-09-22 17:16:16

概述

作为一名开发人员,一直关注各种桌面级/移动级操作系统的进展,其中就包含 ChromeOS。

对于一个开发者(客户端、嵌入式、硬件开发者除外)而言,对于操作系统的要求如下:

流畅、稳定而现代化的系统 USEO靠我I。完整的 Linux 环境。好用的浏览器。丰富的开发者和娱乐软件生态。

对于这三个要求,ChromeOS,都可以比较完美的支持:

ChromeOS 是后发的桌面级操作系统,它的 UI 是现代化的。在诞生SEO靠我之处,ChromeOS 目标是可以在廉价的设备上流畅运行,因此流畅度没有问题。最后,ChromeOS 内核基于 Linux,且系统相对封闭,在专用设备上稳定性应该有所保证(FydeOS for PC SEO靠我这种无法面向一大类机器的发行版,无法保证稳定性)。ChromeOS 系统层面,通过虚拟机技术,提供了具有独立内核的 Linux 子系统。ChromeOS 就是对 Chrome 浏览器的操作系统化的产品SEO靠我,浏览器的体验毋庸置疑。ChromeOS 可以在 Linux 子系统中安装 Linux GUI 程序,因此可以直接安装如 VSCode、Jetbrains 等 IDE,开发者软件生态丰富。ChromeSEO靠我OS 系统层面,通过 Linux 容器化技术,提供了 Android 运行环境,可以安装和运行安卓 App,具有了 Android 应用生态。

在国内,有一家厂商燧炻创新发行的 ChromeOS 的国内SEO靠我适配版: FydeOS。

在过去的几年中,也曾经尝试几次在一台闲置的 x86 设备上,安装过几次 FydeOS,但是总是有一些严重的问题,比如:wifi 连不上,安卓运行时初始化失败、Linux 子系统SEO靠我初始化失败等。

这两天,又一次尝试安装 FydeOS,发现这个版本,可以完美的支持这台设备。于是,探索了下 ChromeOS 提供的核心能力的技术原理,就有了这篇文章。

注:本文的的内容和结论,基于在一台SEO靠我古早的 x86 设备上安装的 FydeOS 系统上进行的探索和实验,并结合网络上 Chrome OS 的相关技术文档而得到。

设备信息

这台是一个台 15.6 寸的笔记本电脑(海尔 s500),购置于 2SEO靠我015 年 9 月左右,当时京东购机价为 3599 元左右,基本参数如下:

内存: 8G DDR3L 内存(原机 4G、后扩展到 8G)CPU: 英特尔 酷睿i5 4代系列, i5-4210M磁盘: 1SEO靠我TB 5400 转 SATA 机械硬盘WIFI: 802.11bgn (仅支持 2.4 Ghz)蓝牙: 本机无,后购置了一个外置 USB 免驱蓝牙 (jd)

系统版本和安装

本次安装 ChromeOS 版SEO靠我本为,燧炻创新发布的 FydeOS for PC - Intel 酷睿系列第三代至第八代处理器及 Intel HD 系列核心显卡,具体版本信息为:

版本号: 14.2-SP1 (更新日志)发布日期: 2SEO靠我022-05-31HASH(sha256): 8066c8e08129bd85838c00b5c96fb12a192b87e668657ca73634ecbf763ee8d2

安装方式基本上是傻瓜式的,SEO靠我非常简单,参见:首次运行 FydeOS for PC 文档。

Chromium 版本为(进入系统后查看): 96.0.4664.208

开发环境搭建

本小结,介绍如何使用 ChromeOS 的 Linux SEO靠我子系统,搭建一个可用的软件开发环境。

首先,在设置 -> 高级 -> 开发者 -> Linux 开发环境 中启用 Linux 开发环境。

安装 IDE (以 VSCode 为例)

打开 VSCode 下载页SEO靠我面,下载 .deb 包。打开 ChromeOS 自带额文件 App,我的文件 -> 下载内容,右击 通过 Linux 安装。

稍等片刻,即可安装完成。安装完成后可以直接在启动器 Linux 应用中看到图SEO靠我标。点击即可打开。

配置中文和字体

参考:安装 Android 应用、配置 Linux 环境:FydeOS 进阶使用教程

首先是设置时区,在终端中输入:

sudo dpkg-reconfigure tzdatSEO靠我a # 选择亚洲 (Asia), 上海 (Shanghai) 复制代码

安装中文字体:

sudo apt install fonts-wqy-microhei fonts-SEO靠我wqy-zenhei 复制代码

配置字符集为 zh_CN.uft8:

sudo dpkg-reconfigure locales 复制代码

字符集配置完成完成后需重启生效:

sSEO靠我udo reboot 复制代码

安装可视化包管理器

参考:ChromeOS Linux setup

sudo apt install -y gnome-software gnome-packSEO靠我agekit && \ sudo apt update 复制代码

安装中文输入法

Linux 子系统中是无法使用 ChromeOS 的输入法的,因此需要在 Linux 子系SEO靠我统中安装中文输入法。

具体步骤参见:FydeOS 知识库 。

注意:

上文做 3.1 之前,需要先执行 fcitx 命令。可以选择安装搜狗输入法:shurufa.sogou.com/linux 下载下来,然SEO靠我后在 Linux 子系统中通过 sudo dpkg -i xxx.deb 来安装可以选择安装 Google 拼音输入法,在 Linux 子系统中通过 sudo apt install fcitx-goSEO靠我oglepinyin 来安装(需重启才能配置)。

VPN 和 网络代理

ChromeOS 和 Android 是深度集成的。ChromeOS 可以使用 Android 代理 App 提供的代理作为整个系统SEO靠我的全局 VPN。也就是说 ChromeOS 的浏览器、Android App、Linux 子系统都会走 Android App 的代理。

打开一个 Android 代理 App 后,在 ChromeOSSEO靠我 的网络设置里面,可以看到该 VPN 已经生效了。

小提示

至此,即可在 Linux 子系统中开发应用程序了,此外还有一些小提示:

Linux 子系统的文件共享和 ChromeOS 的文件共享,参见下文:LSEO靠我inux 子系统分析开发调试 Android App,参见 FydeOS 官方文档: 在 FydeOS 下开发调试安卓程序指北

Chrome OS 浅析

crosh

通过 ctrl + shift + t SEO靠我可以进入 crosh (The Chromium OS shell) 终端,详细手册参见: Chromium crosh README。

通过 help 和 help_advanced 命令可以查看 cSEO靠我rosh 支持的命令列表(如 free 查看内存)。

这里通过 shell 命令,可以打开一个 bash 终端,这个终端运行在 ChromeOS 所在 Linux 内核中,用户为 chronos。

chrSEO靠我onos 用户就是 ChromeOS 运行 Chrome 的用户。在 FydeOS 中,chronos 用户没有设置密码,而且可拥有 sudo root 的权限(相当于 Android 系统 rootSEO靠我 了),这给我们很大的自定义空间,后文将介绍这一点。

相关命令如下(下文命令均在该 shell 中执行):

# ctrl + shift + t shell su su rSEO靠我oot 复制代码

内核版本

执行 uname -a 输出如下:

Linux localhost 5.4.188-16917-g3358c5a3654f-dirty #2 SMP PREEMPSEO靠我T Thu May 26 15:47:47 CST 2022 x86_64 Intel(R) Core(TM) i5-4210M CPU @ 2.60GHz GenuineIntel GNU/LinuSEO靠我x 复制代码

可以看出 Linux 内核版本为 5.4。

init 进程选型

执行 stat /proc/1/exe 输出如下:

File: /proc/1/exe -> /sbin/initSEO靠我Size: 0 Blocks: 0 IO Block: 1024 symbolic link Device: 5h/5d Inode: 783097 Links: 1 SEO靠我Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root) Context: u:r:cros_init:s0 SEO靠我Access: 2022-07-10 01:21:29.404407129 -0700 Modify: 2022-07-10 01:21:19.401406853 -0700 SEO靠我 Change: 2022-07-10 01:21:19.401406853 -0700Birth: - 复制代码

执行 /sbin/init 输出如下:

Usage: init [SEO靠我OPTION]... Process management daemon.Options:-q, --quiet reduce output to errors only-v, --vSEO靠我erbose increase output to include informational messages--help display this help and exit--version oSEO靠我utput version information and exitThis daemon is normally executed by the kernel and given process iSEO靠我d 1 to denote its special status. When executed by a user process, it will actually run /sbiSEO靠我n/telinit.Report bugs to <upstart-devel@lists.ubuntu.com> 复制代码

可以看出 ChromeOS 的 init 进程为: upstSEO靠我art。经过搜索,可以找到:ChromeOS 的 boot 设计文档,该文档中确定了 ChromeOS 的 init 进程为 upstart。

知道了 init 是 upstart,我们就可以通过在 /SEO靠我etc/init 目录里面添加自定义的开启自启配置文件,即可做到在 ChromeOS 的所在的内核,开机自动运行一些进程/服务(下文有介绍)。

libc 库选型

执行 /lib64/libc.so.6 输SEO靠我出如下:

GNU C Library (Gentoo 2.32-r17 p8) stable release version 2.32. Copyright (C) 2020 Free SEO靠我Software Foundation, Inc. This is free software; see the source for copying conditions. SEO靠我 There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. SEO靠我 Compiled by GNU CC version 10.2.0. libc ABIs: UNIQUE IFUNC ABSOLUTE For bug SEO靠我reporting instructions, please see: <http://crbug.com/new>. 复制代码

可以看出 ChromeOS 采用的 liSEO靠我bc 为 Linux 标准的 glibc,版本为 2.32。这篇文档介绍了 ChromeOS 编译 glibc 的 FAQ,印证了 ChromeOS 使用 libc 版本为 glibc。

不同的 libSEO靠我c 可能是相互不兼容,确认 ChromeOS 使用的是标准的 glibc,那么直接在 ChromeOS 所在内核运行程序的难度将会大大降低,因为 Linux 上主流的 C/C++ 编写的程序多数是首选SEO靠我兼容 glibc 的。

文件管理

在 ChromeOS 文件 APP 只能看到有限的一些目录,主要是我的文件目录。该目录 ChromeOS 所在内核文件系统的哪里呢?经过查找,发现位于 /home/chrSEO靠我onos/user/MyFiles 路径下。

Linux 子系统分析

首先在 设置 -> 高级 -> 开发者 中开启 Linux 开发环境。

经过检索,可以发现 ChromeOS 开发了一个半虚拟化的软件 SEO靠我crosvm 来运行 Linux 子系统内核。

通过 ps aux | grep crosvm 可以看出运行了很多 crosvm 相关的进程。

下面介绍一下 Linux 子系统和 ChromeOS 文件共SEO靠我享的机制。

将 Chrome OS 的文件共享到 Linux 子系统中

在 ChromeOS 的文件 APP 中,右击 我的文件 ,选择 与 Linux 共享。此时即可在 Linux 子系统中,在 /mnSEO靠我t/chromeos/MyFiles 目录中看到,Downloads 等目录。该目录是有读写权限的。

读取 Linux 子系统 $HOME 目录

在 ChromeOS 的文件 APP 中,可以看到:我的文SEO靠我件 > Linux 文件,通过这个目录可以访问 Linux 子系统中的 $HOME 目录。在 ChromeOS 的 shell 中,如何访问该目录呢?

通过 mount | grep linux 查看,SEO靠我输出如下

fuse:sshfs://rectcircle@penguin.termina.linux.test: on /media/fuse/crostini_ba1970ad840cb1d1a334SEO靠我4784b0d0cc65044919aa_termina_penguin type fuse.sshfs (rw,nosuid,nodev,noexec,relatime,nosymfollow,diSEO靠我rsync,user_id=1000,group_id=1001,default_permissions,allow_other) 复制代码

输出的第二行,可以该目录是通过 sshfs SEO靠我的方式挂载到的了 ChromeOS 的 /media/fuse/crostini_ba1970ad840cb1d1a3344784b0d0cc65044919aa_termina_penguin 路径SEO靠我下。

该目录是有完整的读写权限的。也就是说,也可以通过该目录来实现共享。

“SEO靠我”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与 我们联系删除或处理,客服邮箱:html5sh@163.com,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同 其观点或证实其内容的真实性。

网站备案号:浙ICP备17034767号-2