Termal Desktop

Porquê um ambiente de trabalho sobre SSH.

Um ambiente gráfico sobre um servidor remoto soa a solução à procura de um problema. Aqui fica o argumento honesto a favor, incluindo os casos em que deves fechar esta página e continuar com o teu terminal.

«Isto tudo já consigo fazer com ssh e vim»

Consegues. Absolutamente tudo o que está nesta página é possível com uma sessão SSH, uma shell e um editor que já sabes de cor. Se administras um só servidor, te desenvolves bem em vim e a tua maneira de trabalhar cabe num terminal, isto não é para ti, e preferimos que fiques com o que já tens.

A camada gráfica não está aqui porque o terminal seja insuficiente. Está aqui porque um terminal é uma interface sequencial, e há tarefas que não o são. Vigiar uma transferência enquanto lês um registo enquanto editas uma configuração são três janelas em qualquer ambiente de trabalho, e três painéis de tmux mais muita disciplina num terminal.

A afirmação é deliberadamente estreita: não «melhor do que o terminal», mas «mais rápido do que o terminal para um conjunto concreto de tarefas». O Termal OS traz uma shell PTY a sério precisamente porque o terminal continua a ser a ferramenta certa na maior parte do tempo.

Onde a camada gráfica ganha mesmo o seu lugar

Quatro situações, a começar pelas que mais nos contam.

  • Mover ficheiros, e ver isso acontecer. Copiar uma diretoria entre dois sítios com scp dá-te um cursor a piscar e alguma esperança. O Explorador fá-lo com uma fila de tarefas, uma percentagem em direto por transferência, e uma mudança de nome em vez de uma substituição silenciosa quando no destino já existe algo com esse nome. Com uma pasta de 4 GB por uma ligação lenta, «será que ainda está a andar?» é uma pergunta a sério.
  • Ler código que não foste tu a escrever. Editar um ficheiro que conheces é trabalho para o vim. Perceber uma base de código desconhecida -saltar entre ficheiros, seguir um include, procurar por toda uma árvore- é trabalho para uma árvore de ficheiros e uns separadores. É isso que te dá um editor Monaco sobre o sistema de ficheiros remoto, sem descarregares nada para local.
  • Aterrar num servidor que nunca viste. Este é o caso mais forte. O Termal deteta o que a máquina está a correr -Plesk, cPanel, nginx ou Apache e mais nada-, lista os sites que serve com a versão de PHP que cada um usa realmente, mostra os serviços e contentores em funcionamento, e encontra os ficheiros de registo. Chegar a esse mesmo retrato à mão são uma dúzia de comandos e saber onde é que cada distribuição esconde as coisas.
  • Testar a partir da posição de rede do próprio servidor. Uma rota interna que responde no servidor e em mais lado nenhum é incómoda de inspecionar a partir de um terminal. O cliente HTTP executa o curlno servidor e apresenta-te os cabeçalhos e o corpo. O navegador vai mais longe: por omissão navega a partir do teu próprio computador, mas podes mudar a sua saída de rede para o servidor; o tráfego passa então por um túnel SOCKS5 aberto sobre a ligação SSH que já tens, e um distintivo na barra de ferramentas diz-te em qual das duas estás. Com as ferramentas de programação acopladas em cada separador, uma página que só existe portas adentro passa a ser algo que olhas em vez de algo que deduzes.
Termal OS a mostrar a lista dos sites alojados num servidor, cada um com a versão de PHP que serve realmente e botões de estatísticas, registos de acesso, erros e git pull
O terceiro caso, num só ecrã: todos os sites que o servidor aloja, a versão de PHP que cada um serve de facto, e se há uma atualização à espera. Chegar aqui à mão são uma dúzia de comandos e saber onde a tua distribuição esconde as coisas. Os nomes de domínio estão desfocados.
Uma caixa de diálogo do Termal OS intitulada transferência entre servidores, com uma barra de progresso nos 41 por cento enquanto copia um ficheiro, e um explorador de ficheiros de cada lado
O primeiro caso: uma cópia a decorrer entre dois servidores, com uma barra de progresso em vez de um cursor a piscar.
Definições do navegador do Termal OS a oferecer duas saídas de rede: uma ligação direta a partir deste computador, ou um túnel SOCKS através do servidor SSH, cada cartão com o nome do respetivo fornecedor
O quarto caso é uma definição: o mesmo navegador, duas maneiras de sair -diretamente do teu computador, ou através do servidor pelo túnel SSH. Aqui estão pixelizados tanto os endereços IP públicos como a localização.

Tudo isto numa só ligação

Esta é a parte que importa do ponto de vista da arquitetura, e é a razão pela qual o ambiente de trabalho não é uma simples casca sobre um monte de chamadas SSH.

O Termal OS mantém um conjunto de ligações SSH reutilizáveis -uma por servidor-, com keepalive, e tudo viaja por aí: as métricas, o explorador de ficheiros, o terminal, o editor, o acompanhamento de registos. Abrir o gestor de ficheiros não abre uma segunda sessão. Não há nenhuma porta extra, nem agente, nem uma segunda autenticação, nem nada instalado na máquina. Do ponto de vista do servidor, és um único início de sessão SSH a fazer coisas correntes.

Essa restrição é também o que faz o ambiente de trabalho funcionar em alojamentos onde não tens root nem direito a instalar seja o que for: alojamento partilhado, alojamento gerido, a máquina de um cliente. Um painel de administração gráfico que precisasse de um serviço residente não serviria ali de nada.

O que há realmente no ambiente de trabalho

Um gestor de janelas com barra de tarefas, menu iniciar e ícones no ambiente de trabalho, e 23 aplicações. As que fazem o trabalho:

  • Explorador: explorador SFTP: copiar, mover, enviar, descarregar uma pasta como ficheiro comprimido, permissões, arrastar e largar, fila de transferências com progresso.
  • Terminal: uma shell PTY a sério, não uma caixinha para lançar comandos.
  • Termal Code: o Monaco (o editor do VS Code) com árvore de ficheiros e separadores, a editar diretamente sobre o sistema de ficheiros remoto.
  • Navegador: vários separadores, marcadores, descarregamentos, ver código-fonte, e ferramentas de programação acopladas em cada separador.
  • Monitor, Processos, Registos: métricas em direto, uma lista de processos a partir da qual podes terminá-los, e acompanhamento de registos com deteção automática dos ficheiros habituais do Apache, nginx, PHP, MySQL e syslog.
  • Pedido web, Zip, Git, FTP, Reciclagem: as ferramentas pequenas que, de outro modo, te mandam de volta para a shell a meio da tarefa.
  • Copiloto: perguntas em linguagem corrente, respondidas com um comando e uma explicação. Nada corre enquanto não clicares, e com a tua própria chave de API.

Há também um cliente de correio, notas, uma calculadora, um conversor, um seletor de cor e alguns jogos. Treze das vinte e três vêm desativadas por omissão -só a Loja de aplicações, as Definições, o Explorador e a Reciclagem são fixos- porque um primeiro arranque que enterrasse o explorador de ficheiros debaixo de um menu de jogos seria, por si só, um argumento contra toda a ideia. Ativa o que usares.

Ambiente de trabalho do Termal OS com o Termal Git aberto a mostrar um histórico de commits e um diff, ao lado do Termal Code, um editor Monaco aberto sobre um ficheiro PHP
O histórico do Git, um diff e o editor Monaco abertos ao mesmo tempo: o problema da interface sequencial, resolvido da maneira mais aborrecida.
Menu de contexto do botão direito sobre um ficheiro remoto no Termal OS, com as opções abrir, abrir com, descarregar, descarregar para o meu computador, criar atalho no ambiente de trabalho, comprimir, copiar, cortar, mudar o nome, permissões, mover para a reciclagem e eliminar definitivamente
Botão direito sobre um ficheiro remoto: abrir com, descarregar para o teu computador, comprimir, permissões, mover para a reciclagem. Comporta-se como um ambiente de trabalho porque é um.

A parte que os programadores deviam ver

O ambiente de trabalho é extensível, e o modelo de extensões é a coisa mais interessante que há na base de código.

Uma aplicação de terceiros corre dentro de um iframe isolado. Não pode tocar diretamente no sistema de ficheiros, na rede nem na área de transferência. Cada chamada privilegiada vai por mensagem ao anfitrião, que a confronta com as permissões que a aplicação declarou no seu manifesto, e só há seis: fs.read, fs.write, net, storage, clipboard, webview. São-te mostradas no momento da instalação. A regra, no próprio comentário de cabeçalho do runtime, não anda com rodeios: do iframe não se fia ninguém, o anfitrião valida tudo.

Aqui isso conta mais do que na maioria dos sistemas de extensões, porque estas aplicações correm contra servidores a que foste tu a dar acesso SSH. Uma loja de aplicações onde uma extensão pudesse ler-te as chaves sem fazer barulho seria indefensável.

E o SDK não é uma API à parte, de segunda, acrescentada para os de fora: a calculadora integrada é registada através de Termal.app(), o mesmo ponto de entrada público que uma aplicação de terceiros usa. Com o SDK vêm oito aplicações de exemplo completas, desde uma de notas até um contentor de webview ou um widget de servidor.

Uma aplicação Termal de terceiros a correr no seu ambiente isolado; o registo indica: permissões do manifesto clipboard e storage, escrita na área de transferência, setTitle, e que storage set persiste entre reinícios
O argumento acima, a funcionar. Isto é uma aplicação de terceiros no seu ambiente isolado: a primeira linha do seu próprio registo é o conjunto de permissões que declarou, e todas as chamadas abaixo são das que o manifesto permitia.

A referência completa -manifesto, runtime, caixas de diálogo, seletores de ficheiros, armazenamento, rede, webview, área de transferência, controlo de janelas, traduções, empacotamento- está na página do Termal App Studio.

O que não é

  • Não substitui o teu terminal. Traz um lá dentro, e vais usá-lo. Se o teu trabalho já cabe numa shell, o ambiente de trabalho não te acrescenta nada de que precises.
  • Não é um protocolo de ambiente de trabalho remoto. Não há X11, nem VNC, nem RDP, nem servidor gráfico no lado do cabo onde está o teu computador. O gestor de janelas corre em local, dentro da aplicação; pela ligação SSH só passam o tráfego de ficheiros, de shell e de métricas.
  • Não funciona sempre. A recolha de dados continua com a janela fechada, mas a aplicação tem de estar a correr numa máquina acordada. Fecha o portátil e ela para: vê a comparação com o Netdata, que é onde isto mais pesa.
  • Não é para mil servidores. De uns poucos a umas poucas dezenas. Só Linux por SSH: sem SNMP, sem Windows e sem descoberta de rede.