Новость о запуске новый консольный веб-браузер Carbonyl, основанный на мотор Chromium и способен отображать любой сайт на терминале, включая YouTube.
Браузер поддерживает почти все веб-API, включая WebGL, WebGPU и инструменты для воспроизведения видео, звука и анимации. Работа возможна как при прямом запуске терминала, так и при подключении по SSH.
О карбониле
В рамках проекта продолжает разработку утилиты html2svg, который изначально был разработан для преобразования HTML и в векторных (SVG, PDF) или растровых (PNG, JPEG, WebP) изображениях и теперь используется в качестве основы для рендеринга в терминал.
Для отображения графиков используются возможности терминалов типа xterm-256 для отображения символов Юникода в цвете: используется символ U+2584 («▄») как виртуальный пиксель. Воспользовавшись тем, что соотношение сторон в этом символе 1:2, на его основе можно отобразить два квадратных пикселя, верхний из которых задает цвет фона, а нижний — передний план.
Он загружает изображения с аппаратным ускорением с графического процессора, что объясняет удивительное использование пропускной способности памяти. Мы можем отключить восстановление и даже отключить аппаратное ускорение, но нас по-прежнему сдерживает дорогостоящее оборудование IPC.
Программный рендеринг все еще очень распространен, он даже использовался по умолчанию, если вы можете в это поверить. Во времена одного процесса это было достаточно просто, но сегодня области разделяемой памяти настроены на эффективную визуализацию с использованием нескольких процессов.
Если бы мы могли поместить наши пиксели в одну из этих областей памяти, нам просто нужно было бы уведомить наш процесс браузера с помощью простого сообщения IPC.
escape-последовательности xterm используются для отслеживания движения мыши., движение курсора и изменение цвета текста. Для терминала xterm можно использовать палитру RGB 6x6x6, а при установке режима COLORTERM можно использовать 24-битную полноцветную палитру RGB.
Текст отображается в фиксированном размере, отдельно от картинок, плюс для перехвата текста в библиотеке Skia подключается отдельный контроллер. Код рендеринга оптимизирован для работы в терминале и позволяет отображать графику с частотой обновления 60 кадров в секунду с минимальной нагрузкой на ЦП.
Для рендеринга изображений упоминается, что CapturePaintPreview отлично подходит для html2svg, но он не предназначен для рендеринга в реальном времени, поскольку использует вызовы IPC для надлежащей поддержки внепроцессных iframe, совершая круговые поездки между процессами браузера, графическим процессором и рендерером.
Среди того, что может сделать Carbonyl, выделяется следующее:
- переместить курсор
- Напишите символы Юникода
- Установите цвет фона и переднего плана персонажа
- Используйте палитру RGB 6x6x6 или 24-битный RGB, если для параметра COLORTERM установлено значение truecolor.
Для интересно узнать о нем больше, они должны знать, что компоновка движка Chromium написана на TypeScript, C++ и Rust. Вы можете узнать больше о разработке По следующей ссылке.
Как установить Carbonyl на Linux?
Для тех, кто заинтересован в возможности установить этот веб-браузер в своей системе, Я должен упомянуть, что это занимает немного времени, так как в основном компилирует Chromium. и примените необходимые исправления, чтобы иметь возможность создать образ докера браузера.
Во-первых, это получить код Chromium с помощью:
./scripts/gclient.sh sync
Мы приступаем к применению патчей (любые изменения, сделанные в Chromium, будут отменены, поэтому обязательно сохраните внесенные изменения).
./scripts/patches.sh apply
После этого приступаем к настройке:
./scripts/gn.sh указывает/по умолчанию
По умолчанию это имя назначения, вы можете использовать несколько и выбрать имя, которое вы хотите, например:
- ./scripts/gn.sh указывает/выпускает
- ./scripts/gn.sh аргументирует/отлаживает
- ./scripts/gn.sh аргументирует/arm64
- ./scripts/gn.sh аргументирует выход/amd64
Затем при появлении запроса необходимо ввести следующие аргументы:
import("//carbonyl/src/browser/args.gn")
# раскомментируйте это, чтобы собрать для arm64
# target_cpu=»arm64″
# раскомментируйте это, чтобы включить ccache
# cc_wrapper=»env CCACHE_SLOPPINESS=time_macros ccache»
# раскомментируйте это, если вы собираете для macOS
# use_lld = ложь
# раскомментируйте это для релизной сборки
# is_debug=ложь
# уровень_символа=0
Мы приступаем к сборке двоичных файлов с помощью:
./scripts/build.sh Default
Что должно привести к следующим результатам:
out/Default/headless_shell: browser binary
out/Default/icudtl.dat
out/Default/libEGL.so
out/Default/libGLESv2.so
out/Default/v8_context_snapshot.bin
И, наконец, Чтобы создать образ Docker, просто запустите следующее (в зависимости от случая вашей архитектуры). Для АРМ:
./scripts/docker.sh arm64 Default
Для x64:
./scripts/docker.sh amd64 Default
Наконец, браузер можно запустить с помощью:
./scripts/run.sh Default https://wikipedia.org