- 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.