55 puntos por GN⁺ 2025-09-11 | Aún no hay comentarios. | Compartir por WhatsApp
  • 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.

Aún no hay comentarios.