- Programa CLI para Linux que permite ejecutar aplicaciones GUI directamente desde la terminal
- Usa un compositor Wayland propio para enviar la salida gráfica a la terminal en lugar de a un monitor
- También puede ejecutarse en entornos con
ssh, y permite usar navegadores web, gestores de archivos e incluso el juego Doom dentro de la terminal
- La calidad de salida varía según la resolución de la terminal (número de filas y columnas), y en terminales con soporte de imágenes como iTerm2 y kitty también admite renderizado a resolución completa
- Está desarrollado con Typescript y bun, e incluye algo de código en C++; por ahora solo soporta algunas apps, pero sigue ampliándose con el objetivo de “Term everything❗”
Importancia del proyecto y ventajas comparativas
- A diferencia de los visores de archivos para terminal tradicionales o de herramientas simples de salida de imágenes, Term.everything puede ejecutar “todas” las aplicaciones GUI dentro de la terminal
- Puede usar interfaces GUI incluso en entornos de red, incluido SSH, lo que le da ventajas para administración de servidores y desarrollo remoto
- Aprovecha al máximo las capacidades de imagen de terminales modernas como kitty e iterm2, y ofrece opciones para mejorar resolución y tasa de fotogramas
Resumen general
- Term.everything es un programa CLI para Linux, y su rasgo principal es permitir ejecutar ventanas GUI directamente en la terminal
- Su pieza clave es un compositor basado en Wayland desarrollado por el proyecto, que renderiza la GUI en la terminal en vez de en un monitor normal
- Soporta tanto x11 como entornos basados en Wayland, y también puede usarse de forma remota mediante
ssh
- La cantidad limitada de filas y columnas de la terminal afecta la calidad de la ventana; aumentar la resolución de la terminal puede mejorarla, aunque con posible impacto en el rendimiento
Principales casos de uso
- Ejecución de juegos: permite correr juegos como Fontemon o Doom (episodio shareware) dentro de la terminal
- Reproducción de video: reproduce la película Wing It!, con posibilidad de ajustar la resolución para equilibrar tasa de fotogramas y calidad de imagen
- Navegación web: permite conectarse a Ubuntu con iTerm2 +
ssh y ejecutar Firefox
- Alternativa a visores de archivos: en vez de crear un visor de archivos específico para terminal, se puede usar directamente un gestor de archivos GUI existente desde la terminal
- Ejecución recursiva: ejecutar otra terminal dentro de la terminal, es decir, un "terminal in a terminal"
Funcionamiento e información de desarrollo
-
Concepto básico
- En el pasado, para dibujar algo en pantalla, los programas podían escribir directamente en una región específica de la RAM
- En los sistemas modernos, el servidor de pantalla (Display Server) gestiona la entrada y salida, coordinando entradas como mouse y teclado, y salidas como gráficos e imágenes
- En Linux se usa principalmente el protocolo Wayland o X11, y Term.everything funciona sobre Wayland
-
Protocolo Wayland
- Wayland no es el servidor de pantalla en sí, sino un protocolo que define la comunicación entre el servidor y los programas
- Los programas entregan al servidor de pantalla el resultado que renderizan directamente, y el servidor lo muestra en pantalla
- Un punto importante es que no impone un modelo de renderizado → el programa puede dibujar de la forma que quiera
- Gracias a eso, la salida puede enviarse a otro lugar en vez de a la pantalla (por ejemplo, la terminal)
-
Procesamiento de salida en Term.everything
- Recibe la imagen dibujada por el cliente Wayland (la app GUI ejecutada) y la convierte en salida de caracteres para terminal
- Proceso de conversión:
- 1. Recibir los datos de imagen enviados por el cliente
- 2. Convertirlos en caracteres UTF-8 + códigos de escape ANSI
- 3. Para la conversión se usa la biblioteca chafa para mapear píxeles a caracteres de terminal
- La entrada se transmite al cliente Wayland mediante eventos de teclado y mouse enviados a través de stdin
-
Implementación real
- La idea central es sencilla, pero la implementación real requiere alrededor de diez mil líneas de código
- Está escrito en Typescript (basado en bun) y algo de C++, y cumple el rol de servidor de pantalla Wayland personalizado
- El código fuente puede revisarse en el directorio src/
-
Posibilidades de expansión
- Term.everything apunta a algo más que simplemente ejecutar una GUI en la terminal
- Con un servidor de pantalla personalizado basado en Wayland, también podría hacer posibles otras ideas experimentales
- Por ejemplo: conectar el dispositivo de salida no a una terminal, sino a otro medio completamente distinto (por ejemplo, una impresora, una obra de arte física, etc.)
Aún no hay comentarios.