两款 ChromeOS 仿制品:一个有驱动,一个没有
来源:dev.to — 2026-09-03
📋 概述
chromeos-boot 仓库里躺着两个共享同一名字却几乎毫无相似之处的脚本,因为它们为两台不同的机器解决同一问题(让 Linux 表现得像 Chromebook):stage 把一个全新的 Crostini 容器从零带起来、当其他一切所需都藏在私有 Cloud Storage bucket 里时读取凭据;flex 则把一台裸机 Debian 桌面变成 ChromeOS Flex 仿制品——书架、Web 应用、快捷键、壁纸,无需 bucket、无需 gcloud。分裂的根因在于 Crostini 的访客内核装不了 NVIDIA 驱动:Termina 用自带的签名内核、无头文件可编译 nvidia.ko、无写路径、图形走 virtio-gpu 而非原始 PCI 设备。于是真需要 GPU 的人只能把 Debian 直接装到金属上——而这正是 flex 存在要解决的问题。
🔑 核心要点
- Crostini 的 Linux 跑在自带签名内核的 Termina 轻量 VM 里,Debian 容器共享内核而非自带;NVIDIA 驱动要针对运行中内核编译 nvidia.ko 并 insmod,而 Termina 内核既无头文件也无写路径更不会收未签名的树外模块
- Crostini 内图形走 virtio-gpu 半虚拟显示设备,适合合成与 OpenGL/Vulkan 透传,却不是独显真实所在的原始 PCI 设备——NVIDIA 驱动要直接绑定 PCI,Crostini 从不给它一个
- 解法是别再从 ChromeOS 走:把 Debian 直接装到笔记本金属上,apt install nvidia-driver 对着你真控制的核心里、对着 PCI 总线上真实可见的 GPU 构建
- stage 是给「仍在 ChromeOS 内」的人跑的:用进程替换而非管道 curl,让 stdin 保持连接给 gcloud auth login 读答案;先装 tarball 版 gcloud 只读一次 bucket,再换成 apt 托管的正式版
- flex 是给「被内核赶出来」的人跑的:十个命名阶段(pkgs/theme/icons/shelf/webapps/appgrid/look/keys/helpers/wallpaper)可整体或单独执行、可 revert、幂等、失败柔软
- flex 用 dash-to-panel 把任务栏与系统托盘合成一条栏(ChromeOS 的 shelf 是一条不是两条),shelf 的显示器布局经 Mutter DisplayConfig 运行时解析而非硬编码;壁纸用手写 PNG 编码器渲染
💡 金句
stage 解决的是「把凭据带上一个什么都没有的机器」,flex 解决的是「离开 ChromeOS 之后让桌面看起来像 ChromeOS」——为同一个根本原因、在两台不同机器上、除仓库与主题外毫无共享。
👍 0
👎 0
← 返回 dev.to 首页