Desde Linux Darkcrizt  

Carbonyl, un navegador web de terminal basado en Chromium

Carbonyl

Carbonyl un navegador web para consola

Se dio a conocer la noticia del lanzamiento de un nuevo navegador web de consola, Carbonyl, basado en el motor Chromium y capaz de mostrar cualquier sitio en la terminal, incluido YouTube.

El navegador es compatible con casi todas las API web, incluidas WebGL, WebGPU y herramientas para reproducir video, sonido y animación. La operación es posible tanto con lanzamiento directo del terminal como con conexión a través de SSH.

Sobre Carbonyl

El proyecto continúa con el desarrollo de la utilidad html2svg, que se desarrolló originalmente para convertir HTML y <canvas> en imágenes vectoriales (SVG, PDF) o de mapa de bits (PNG, JPEG, WebP), y ahora se utiliza como base para renderizar al Terminal.

Para mostrar gráficos, se usa la capacidad de terminales como xterm-256 para mostrar caracteres Unicode en color: el símbolo U + 2584 («▄») se usa como un píxel virtual. Aprovechando el hecho de que la relación de aspecto en este símbolo es 1:2, es posible mostrar dos píxeles cuadrados basados ​​en él, la parte superior de los cuales establece el color de fondo y la inferior establece el primer plano.

Descarga imágenes aceleradas por hardware desde la GPU, lo que explica el sorprendente uso del ancho de banda de la memoria. Podemos deshabilitar la recuperación e incluso deshabilitar la aceleración de hardware, pero todavía tenemos una costosa maquinaria IPC que nos detiene.

El renderizado por software sigue siendo muy común, incluso solía ser el predeterminado si puedes creerlo. Era bastante fácil en los días de un solo proceso, pero hoy en día las regiones de memoria compartida están configuradas para renderizar de manera eficiente utilizando múltiples procesos.

Si podemos colocar nuestros píxeles en una de estas regiones de memoria, solo tendríamos que notificar el proceso de nuestro navegador mediante un mensaje IPC simple.

Las secuencias de escape xterm se utilizan para rastrear el movimiento del mouse, el movimiento del cursor y los cambios de color del texto. Para el terminal xterm, es posible usar la paleta RGB 6x6x6, y cuando se establece el modo COLORTERM, es posible usar una paleta RGB a todo color de 24 bits.

El texto se representa en un tamaño fijo, separado de las imágenes, ademas de que para interceptar texto en la biblioteca de Skia, se conecta un controlador independiente. El código de renderizado está optimizado para ejecutarse en la terminal y le permite mostrar gráficos a una frecuencia de actualización de 60 FPS con una carga mínima de CPU.

Para el renderizado de las imágenes se menciona que CapturePaintPreview es genial para html2svg, pero no está diseñado para la renderización en tiempo real, ya que utiliza llamadas IPC para admitir correctamente iframes fuera del proceso, realizando viajes de ida y vuelta entre los procesos del navegador, la GPU y el renderizador.

Dentro de lo que se puede realizar Carbonyl se destaca:

  • Movear el cursor
  • Escribir caracteres Unicode
  • Establecer el color de fondo y de primer plano de un personaje
  • Use una paleta RGB de 6x6x6, o RGB de 24 bits si está configurado COLORTERM en truecolor.

Para los interesados en conocer más al respecto, deben saber que la vinculación del motor Chromium está escrita en TypeScript, C ++ y Rust. Puedes conocer más sobre el desarrollo en el siguiente enlace.

¿Como instalar Carbonyl en Linux?

Para los interesados en poder instalar este navegador web en su sistema, debo mencionar que es algo tardado, ya que es básicamente compilar Chromium y aplicar los parches necesarios para poder crear la imagen docker del navegador.

Lo primero es obtener el código de Chromium con:

./scripts/gclient.sh sync

Procedemos a aplicar los parches (cualquier cambio realizado en Chromium se revertirá, por lo que deben asegúrese de guardar los cambios que hayan realizado).

./scripts/patches.sh apply

Posterior a ello procedemos a configurar:

./scripts/gn.sh args out/Default

Default es el nombre de destino, puede usar varios y elegir el nombre que desee, es decir:

  • ./scripts/gn.sh args out/release
  • ./scripts/gn.sh args out/debug
  • ./scripts/gn.sh args out/arm64
  •  ./scripts/gn.sh args out/amd64

Después, cuando se le solicite, se deben ingresar los siguientes argumentos:

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

Procedemos a construir los binarios con:

./scripts/build.sh Default

Lo cual debería producir los siguientes resultados:

out/Default/headless_shell: browser binary
out/Default/icudtl.dat
out/Default/libEGL.so
out/Default/libGLESv2.so
out/Default/v8_context_snapshot.bin

Y finalmente para crear imagen de Docker basta con ejecutar lo siguiente (según sea el caso de tu arquitectura). Para ARM:

./scripts/docker.sh arm64 Default

Para x64:
./scripts/docker.sh amd64 Default

Finalmente, se puede ejecutar el navegador con:

./scripts/run.sh Default https://wikipedia.org

 

Leave A Comment

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.