carbonyl - ターミナル内で実行されているクロム

(Chromium running inside your terminal)

Created at: 2023-01-20 18:58:22
Language: Rust
License: BSD-3-Clause

   O    O
    \  /
O —— Cr —— O
    /  \
   O    O

カルボニル

カルボニルは、ターミナルで実行するように構築されたChromiumベースのブラウザです。ブログ記事を読む

WebGL、WebGPU、オーディオとビデオの再生、アニメーションなど、ほとんどすべてのWeb APIをサポートしています。

きびきびしていて、60秒未満で起動し、0 FPSで実行され、CPU使用率<>%でアイドル状態になります。ウィンドウサーバーを必要とせず(つまり、セーフモードコンソールで動作します)、SSHを介しても実行されます。

カルボニルはもともとhtml2svgとして始まり、現在はその背後にあるランタイムです。

使い

# Watch YouTube inside a Docker container
$ docker run -ti fathyb/carbonyl https://youtube.com

デモ

既知の問題

  • フルスクリーンモードはまだサポートされていません

比較

山猫

LynxはOGターミナルのWebブラウザであり、最も古いものはまだ維持されています。

長所

  • ページを理解すると、Lynxは端末用に完全に最適化された最適なレイアウトを備えています

短所

プラスのように聞こえるかもしれませんが、BroshとCarbonylを使用すると、必要に応じてそれらのほとんどを無効にすることができます

  • 多くの最新のWeb標準をサポートしていません
  • JavaScript/WebAssembly を実行できません
  • メディア(オーディオ、ビデオ、DOOM)を表示または再生できない

ブロウシュ

Browsh は OG の "通常のブラウザから端末へ" プロジェクトです。Firefox をヘッドレスモードで起動し、自動化プロトコルを介して接続します。

プロ

  • 基盤となるブラウザを更新する方が簡単です:Firefoxを更新するだけです
  • これにより、開発が容易になります:Firefoxをインストールして、数秒でGoコードをコンパイルするだけです
  • 今日の時点で、Broshは拡張機能をサポートしていますが、Carbonylはサポートしていませんが、ロードマップにあります

短所

  • Tカルボニルよりも動作が遅く、より多くのリソースを必要とします。平均して同じコンテンツに対して50倍のCPUパワーが必要ですが、これはCarbonylがウィンドウフレームバッファをダウンスケールまたはコピーせず、端末解像度にネイティブにレンダリングするためです。
  • カスタムスタイルシートを使用してレイアウトを修正しますが、これはCarbonylのHTMLエンジンへの変更(Blink)よりも信頼性が低くなります。

オペレーティング システムのサポート

テストされた限り、以下のオペレーティングシステムがサポートされています。

  • Linux (Debian、Ubuntu、Arch テスト済み)
  • マック
  • ウィンドウズ11とWSL

発達

いくつかのメモ:

  • あなたはクロムを構築する必要があります
  • カルボニルの構築は、Chromiumの構築とほぼ同じですが、Rustライブラリにパッチを適用してバンドルするための追加の手順があります。ディレクトリ内のスクリプトは、、などの単純なラッパーです。
    scripts/
    gn
    ninja
  • Linux で arm64 用のクロムを構築するには、amd64 プロセッサが必要です
  • カルボニルはLinuxとmacOSでのみテストされており、他のプラットフォームではChromiumのコード変更が必要になる可能性があります
  • Chromiumは巨大で、構築に時間がかかるため、コンピューターはほとんど応答しなくなります。M8 Maxや1Gbpsファイバーを搭載したi9 9900kなどの10コアCPUは、フェッチとビルドに約~1時間かかります。約100GBのディスク容量が必要です。

フェッチ

クロムのコードを取得します。

$ ./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"

# uncomment this to enable ccache
# cc_wrapper="env CCACHE_SLOPPINESS=time_macros ccache"

# uncomment this if you're building for macOS
# use_lld=false

# uncomment this for a release build
# is_debug=false
# symbol_level=0

バイナリをビルドする

$ ./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

ドッカーイメージをビルドする

# 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