2 个版本
0.0.3 | 2023年2月18日 |
---|---|
0.0.2 | 2023年2月9日 |
#1226 in 网页编程
14,324 星 & 79 关注者
130KB
3.5K SLoC
O O \ / O —— Cr —— O / \ O O |
Carbonyl |
Carbonyl 是一个基于 Chromium 的浏览器,旨在在终端中运行。 阅读博客文章。
它几乎支持所有 Web API,包括 WebGL、WebGPU、音频和视频播放、动画等。
它运行快速,启动时间不到一秒,以 60 FPS 运行,空闲时 CPU 使用率为 0%。它不需要窗口服务器(即在安全模式控制台工作),甚至可以通过 SSH 运行。
Carbonyl 最初始于 html2svg
,现在是其背后的运行时。
使用方法
Carbonyl 在 Linux 上(无需 Docker)需要与 Chromium 相同的依赖项。
Docker
$ docker run --rm -ti fathyb/carbonyl https://youtube.com
npm
$ npm install --global carbonyl
$ carbonyl https://github.com
二进制文件
演示
已知问题
- 尚不支持全屏模式
比较
Lynx
Lynx 是原始的终端网页浏览器,也是目前仍维护的最古老的浏览器。
优点
- 当 Lynx 理解一个页面时,它有最佳的布局,完全针对终端进行了优化
缺点
有些人可能听起来像优点,但 Browsh 和 Carbonyl 让您可以选择禁用其中大部分
- 不支持很多现代网页标准
- 无法运行 JavaScript/WebAssembly
- 无法查看或播放媒体(音频、视频、DOOM)
Browsh
Browsh 是原始的 "将普通浏览器转换为终端" 项目。它以无头模式启动 Firefox 并通过自动化协议连接到它。
优点
- 更容易更新底层浏览器:只需更新 Firefox
- 这使得开发更加容易:只需安装Firefox,然后在几秒钟内编译Go代码。
- 截至目前,Browsh支持扩展,而Carbonyl不支持,尽管它已在我们的发展路线图上。
缺点
- 它的运行速度较慢,需要的资源也更多。平均来说,相同的内容需要50倍以上的CPU功率。这是因为Carbonyl不会缩小或复制窗口帧缓冲区,它以终端分辨率原生渲染。
- 它使用自定义样式表来修复布局,这比Carbonyl对其HTML引擎(Blink)所做的更改更不可靠。
操作系统支持
根据测试,以下操作系统得到了支持
- Linux(已测试Debian、Ubuntu和Arch)
- MacOS
- Windows 11和WSL
贡献
Carbonyl分为两部分:一个是“核心”,它被构建为一个共享库(libcarbonyl
),另一个是“运行时”,它动态加载核心(carbonyl
可执行文件)。
核心是用Rust编写的,从头开始构建需要几分钟时间。运行时是Chromium无头外壳的修改版本,从头开始构建需要超过一个小时。
如果您只是对Rust代码进行更改,则构建libcarbonyl
并将其替换为Carbonyl的发布版本。
核心
$ cargo build
运行时
一些注意事项
- 构建运行时几乎与构建Chromium相同,只需额外的步骤来修补和捆绑Rust库。
scripts/
目录中的脚本只是gn
、ninja
等工具的简单包装。 - 在Linux上为arm64构建Chromium需要amd64处理器
- Carbonyl仅在Linux和MacOS上进行了测试,其他平台可能需要修改Chromium的代码
- Chromium体积庞大,构建时间较长,会使您的计算机大部分时间无法响应。例如,使用M1 Max或i9 9900k的8核CPU,并通过10 Gbps光纤进行检索和构建大约需要1小时。它需要大约100 GB的磁盘空间。
检索
检索Chromium的代码。
$ ./scripts/gclient.sh sync
应用补丁
对Chromium所做的任何更改都将被撤销,请确保保存您所做的任何更改。
$ ./scripts/patches.sh apply
配置
$ ./scripts/gn.sh args out/Default
Default
是目标名称,您可以使用多个名称并选择您喜欢的任何名称,例如。$ ./scripts/gn.sh args out/release $ ./scripts/gn.sh args out/debug # or if you'd like to build a multi-platform image $ ./scripts/gn.sh args out/arm64 $ ./scripts/gn.sh args out/amd64
当提示时,输入以下参数
import("//carbonyl/src/browser/args.gn")
# uncomment this to build for arm64
# target_cpu = "arm64"
# comment this to disable ccache
cc_wrapper = "env CCACHE_SLOPPINESS=time_macros ccache"
# comment this for a debug build
is_debug = false
symbol_level = 0
is_official_build = true
构建二进制文件
$ ./scripts/build.sh Default
这应该会产生以下输出
out/Default/headless_shell
:浏览器二进制文件out/Default/icudtl.dat
out/Default/libEGL.so
out/Default/libGLESv2.so
out/Default/v8_context_snapshot.bin
构建Docker镜像
# Build arm64 Docker image using binaries from the Default target
$ ./scripts/docker-build.sh Default arm64
# Build amd64 Docker image using binaries from the Default target
$ ./scripts/docker-build.sh Default amd64
运行
$ ./scripts/run.sh Default https://wikipedia.org
依赖项
~2MB
~27K SLoC