A tela de um computador viaja direto para o outro, sem passar pelo servidor de ninguém. Alcança a tela de login e as janelas de administrador do Windows, onde programa comum não entra. Sem licença por técnico.
Do lado de quem controla: a tela remota ocupa a janela inteira, com atalhos de sistema na barra e o painel de medição, aberto aqui, mostrando o que está acontecendo por baixo.
Não foi para reinventar o AnyDesk. Foi porque três coisas específicas não fechavam.
O suporte acontece à distância o tempo todo: uma impressora que sumiu do sistema, um acesso que não entra, um relatório que não sai. Cada atendimento desses começa com alguém pedindo para ver a tela do outro.
O pedido chega com nome, ID e um recado de quem está do outro lado. As permissões são escolhidas antes de a sessão começar, uma a uma, e nenhuma vem marcada por acaso.
Nada fica trancado no que foi decidido no início. As permissões viram chaves que se mexem no meio da sessão, e a conversa acontece na própria janela, sem abrir o WhatsApp para explicar o que está sendo feito.
A parte que decide se a coisa é rápida ou não.
WebRTC ponto a ponto. O servidor só apresenta um lado ao outro e sai da frente, a imagem não passa por ele.
Um serviço em C# rodando como SYSTEM alcança a tela de login e as janelas de administrador, onde um programa comum é barrado.
Teclado e mouse entram por um executável próprio via SendInput, com o mapeamento de monitores corrigido para escala e posição.
Quando a rota direta não fecha, o desvio é por um servidor da própria empresa, não por uma nuvem de terceiro.
O app procura a versão nova no servidor da empresa, baixa e instala sozinho.
O servidor apresenta um computador ao outro e sai da frente. A partir daí, imagem, som, teclado e mouse vão direto.
Teclado e mouse não podem esperar por uma imagem que está sendo baixada. Por isso cada coisa viaja no seu próprio canal, com a regra que faz sentido para ela.
input
Um movimento perdido não faz falta, o próximo já corrige a posição. Esperar por ele, sim: o ponteiro trava.
sem ordem e sem reenvioctrl
Autorização, troca de monitor, mudança de permissão. Aqui nada pode se perder nem chegar fora de ordem.
ordenado e confiávelchat
As mensagens entre as duas pessoas, na ordem em que foram escritas.
ordenado e confiávelbulk
O que é copiado de um lado e colado no outro. Vai em canal próprio para não atropelar o ponteiro.
ordenado, com controle de filaNúmeros de uma sessão real, num Intel Core i3-14100 com gráficos integrados UHD 730, a máquina de trabalho, não um servidor.
Cada quadro de 1920×1080 é comprimido em treze milésimos de segundo.
Quem comprime é o Quick Sync da placa integrada, não o processador.
Teto da captura de tela do sistema, e não do aplicativo.
Zero tempo limitado por processador ou por banda durante a medição.
$ conectadesk bench --captura pedido 60 fps → 1920×1080 entregue 31,5 fps pedido 60 fps → 1280×720 entregue 28,6 fps pedido 60 fps → 960×540 entregue 32,0 fps codificador MediaFoundationVideoEncodeAccelerator (Intel® Quick Sync Video H.264 Encoder MFT) compressão 13,1 ms por quadro limite none cpu 0 ms, banda 0 ms
Reduzir a imagem de 1080p para 540p não trouxe um único quadro a mais. Se faltasse folga de processamento, a resolução menor teria disparado a taxa, não disparou. É um teto da captura de tela do próprio Windows, não do aplicativo, e nenhum ajuste de qualidade passa dele. Descobrir isso mudou o rumo do projeto: a versão 1.4 parou de reduzir a imagem por causa de latência, porque atraso de rede não se resolve mandando menos pixels, só deixava a tela borrada sem ficar mais rápida.
Um app de acesso remoto que falha em silêncio é pior do que não ter app nenhum.
PASS app empacotado abriu a tela inicial PASS está empacotado (não roda do código fonte) PASS injetor de entrada embarcado e encontrado PASS injetor iniciou e respondeu PASS ConectaDeskInput.exe em resources/ PASS ID de 9 dígitos gerado na primeira execução PASS aponta para o servidor público de fábrica PASS registrou no servidor sem configurar nada PASS busca de atualização respondeu sem erro versão 1.4.0 | electron 43.4.1
Nove verificações rodam contra o executável gerado, não contra o código.
Seis verificações provam que o número do computador sobrevive a reinícios.
Confere que a peça que alcança a tela de login está instalada e responde.
Teste que sobe as duas pontas e valida o aperto de mão da conexão.
Verifica que o executável de teclado e mouse sobe e responde a comandos.
Uma ferramenta que vê a tela inteira de alguém precisa ser chata com isso.
Por padrão, toda sessão espera alguém clicar em Aceitar no computador que vai ser acessado.
Para máquinas sem ninguém na frente, uma senha fixa libera a entrada, e é escolha explícita de quem instala.
Recusa automaticamente qualquer pedido novo, com exceção para os IDs de confiança.
Nove dígitos presos a uma chave secreta do próprio computador, outra máquina não assume o número.
Senha e credenciais ficam cifradas pelo cofre do próprio Windows, não em texto puro.
Cada versão resolveu um problema que só apareceu quando a anterior já estava rodando.
Descoberta de máquina por ID, aceite manual, tela transmitida e controle de teclado e mouse funcionando entre dois computadores.
Escolha de qual tela transmitir, permissões que mudam no meio da sessão e chat embutido, para o suporte não precisar de um WhatsApp aberto ao lado.
O ponto mais difícil: o Windows guarda a tela de login e as janelas de administrador num lugar separado, onde programa comum não entra. Resolvido com um serviço rodando como SYSTEM. Junto vieram a área de transferência com imagens e arquivos e o TURN próprio.
A qualidade automática caía para meia resolução sempre que a latência subia, e latência de rede não melhora mandando menos pixels. A sessão ficava borrada sem ficar mais rápida. Passou a decidir pelo limite real informado por quem transmite, e o painel de medição nasceu aqui.
Medido: registrar no servidor pela internet levava 1459 ms; pelo endereço interno, 45 ms. O app passou a testar o caminho curto e preferi-lo quando existe. Também passou a deduzir um servidor STUN a partir do TURN, sem STUN, dois computadores fora do mesmo segmento de rede eram obrigados a desviar tudo pelo servidor. E o serviço do Windows deixou de quebrar em atualização que muda a pasta de instalação.
Comparar com as ferramentas de mercado só vale a pena se eu contar as duas metades.
| Capacidade | Ferramentas de mercado | ConectaDesk |
|---|---|---|
| Custo por técnico | ✕ | ✓ |
| A tela não sai da empresa | ✕ | ✓ |
| Tela de login e janelas de administrador | ✓ | ✓ |
| Permissões escolhidas por sessão | – | ✓ |
| Área de transferência com imagens e arquivos | ✓ | ✓ |
| Vários monitores | ✓ | ✓ |
| Conversa dentro da sessão | ✓ | ✓ |
| Ctrl+Alt+Del e bloqueio remoto | ✓ | ✓ |
| Imagem a 60 quadros por segundo | ✓ | – |
| Celular e tablet | ✓ | ✕ |
As duas últimas linhas são reais e eu sei por quê. Os 60 quadros exigem capturar a tela por fora do motor do navegador, o caminho já está mapeado, é o próximo passo. Celular ainda não existe: hoje é Windows para Windows.
Aplicativo instalável em Windows, com instalador e atualização própria
Vídeo, áudio e canais de dados direto entre os dois computadores
Serviço de sistema e injetor de teclado e mouse
Servidor de sinalização que apresenta os dois lados e sai da frente
Servidor TURN próprio para quando a rota direta não fecha
Posso mostrar por dentro: a arquitetura, o que já mediu e o que vem na próxima versão.
Falar comigo