55 pontos por GN⁺ 2025-09-11 | Ainda não há comentários. | Compartilhar no WhatsApp
  • Um programa CLI para Linux que permite executar aplicativos GUI diretamente no terminal
  • Usa um compositor Wayland próprio para enviar a saída gráfica ao terminal em vez de a um monitor
  • Também pode ser executado em ambientes ssh, permitindo rodar navegador web, gerenciador de arquivos e até o jogo Doom dentro do terminal
  • A qualidade da saída varia conforme a resolução do terminal (número de linhas e colunas), e em terminais com suporte a imagem, como iTerm2 e kitty, há suporte a renderização em resolução total
  • Foi desenvolvido com Typescript e bun, inclui algum código em C++, e atualmente suporta apenas parte dos apps, mas está sendo expandido com o objetivo de "Term everything❗"

Importância do projeto e vantagens comparativas

  • O Term.everything, diferentemente de visualizadores de arquivos para terminal ou ferramentas simples de saída de imagem, consegue executar “todos” os aplicativos GUI dentro do terminal
  • Como permite usar interfaces gráficas mesmo em ambientes de rede, incluindo SSH, tem pontos fortes em administração de servidores e desenvolvimento remoto
  • Aproveita ao máximo os recursos de imagem de terminais modernos como kitty e iTerm2, oferecendo opções para melhorar resolução e taxa de quadros

Visão geral

  • O Term.everything é um programa CLI para Linux, cuja principal característica é permitir executar janelas GUI diretamente no terminal
  • Seu núcleo é um compositor baseado em Wayland desenvolvido sob medida, que renderiza a GUI no terminal em vez de em um monitor convencional
  • Suporta ambientes baseados em X11 e Wayland, e também pode ser usado remotamente via ssh
  • As linhas e colunas limitadas do terminal afetam a qualidade da janela, e aumentar a resolução do terminal pode melhorar a qualidade (embora possa haver perda de desempenho)

Principais exemplos de uso

  • Execução de jogos: é possível rodar jogos como Fontemon e Doom (episódio shareware) dentro do terminal
  • Reprodução de vídeo: reprodução do filme Wing It!, com possibilidade de ajustar a resolução para equilibrar taxa de quadros e qualidade de imagem
  • Execução de navegador: é possível acessar um Ubuntu via iTerm2 + ssh e executar o Firefox
  • Substituto de visualizador de arquivos: em vez de criar um visualizador de arquivos específico para terminal, é possível usar diretamente um gerenciador de arquivos GUI existente no terminal
  • Execução recursiva: rodar outro terminal dentro do terminal, o famoso "terminal dentro de um terminal"

Como funciona e informações de desenvolvimento

  • Conceito básico

    • No passado, para um programa desenhar algo na tela, ele podia gravar diretamente em uma área específica da RAM
    • Nos sistemas modernos, o servidor de exibição (Display Server) gerencia entrada e saída, coordenando entradas como mouse/teclado e saídas gráficas/de imagem
    • Em ambientes Linux, normalmente são usados o protocolo Wayland ou o X11, e o Term.everything funciona com base no Wayland
  • Protocolo Wayland

    • Wayland não é o próprio servidor de exibição, mas um protocolo que define a comunicação entre o servidor e os programas
    • Os programas enviam ao servidor de exibição o resultado que renderizaram diretamente, e o servidor o mostra na tela
    • O ponto importante é que o modelo de renderização não é imposto → o programa pode desenhar da forma que quiser
    • Graças a isso, é possível enviar a saída para outro lugar em vez da tela (por exemplo, o terminal)
  • Processamento de saída no Term.everything

    • Recebe a imagem desenhada pelo cliente Wayland (o app GUI em execução) e a converte em saída de caracteres no terminal
    • Processo de conversão:
      • 1. Receber os dados de imagem enviados pelo cliente
      • 2. Convertê-los em caracteres UTF-8 + códigos de escape ANSI
      • 3. Na conversão, usar a biblioteca chafa para mapear pixels em caracteres de terminal
    • A entrada é repassada ao cliente Wayland como eventos de teclado e mouse enviados via stdin
  • Implementação real

    • A ideia central é simples, mas a implementação real exigiu cerca de dez mil linhas de código
    • Foi escrito em Typescript (baseado em bun) com um pouco de C++, desempenhando o papel de servidor de exibição Wayland customizado
    • O código-fonte pode ser visto no diretório src/
  • Potencial de expansão

    • O Term.everything pretende ir além de simplesmente executar GUI no terminal
    • Com um servidor de exibição customizado baseado em Wayland, também pode viabilizar outras ideias experimentais
    • Exemplo: conectar o dispositivo de saída não ao terminal, mas a um meio totalmente diferente (como impressoras, obras de arte físicas etc.)

Ainda não há comentários.

Ainda não há comentários.