Skip to content
 
 

Latest commit

 

History

16 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Connect Desk 🖥️✨

O Connect Desk é um software de suporte e controle remoto de alto desempenho baseado em tecnologias modernas de web e APIs nativas do Windows. Ele permite que você visualize e controle computadores remotamente em tempo real diretamente pelo seu navegador, sem a necessidade de instalar clientes pesados no lado do visualizador.

Com um design premium de última geração — utilizando dark mode, glassmorphism e efeitos fluidos —, o Connect Desk combina facilidade de uso com excelente performance.


🚀 Funcionalidades Principais

  • Dois Modos de Captura de Tela (GDI+ e DXGI): O Connect Desk oferece dois executáveis cliente, cada um otimizado para um tipo de ambiente:
    • connectdesk.exe (GDI+): Motor de captura via Graphics.CopyFromScreen — ideal para VPS Windows com RDP ativo e máquinas físicas.
    • connectdesk-vm.exe (DXGI): Captura via DXGI Desktop Duplication API (DirectX 11) — ideal para Máquinas Virtuais (VMware, Hyper-V, VirtualBox, KVM/QEMU) onde não há sessão RDP ativa. Funciona em modo headless, acessando o framebuffer diretamente pelo adaptador virtual.
  • Controle Interativo Completo:
    • Mouse: Movimentação, cliques (esquerdo e direito) e rolagem (scroll).
    • Teclado com Atalhos Completos do Windows: Envio de texto, teclas especiais e todos os atalhos de sistema (Ctrl+C, Ctrl+V, Ctrl+Z, Ctrl+A, Alt+Tab, Alt+F4, Win, F1–F12, PageUp/Down, Insert, etc.) via mapeamento nativo de Virtual Key Codes (VK) do Windows.
  • Transferência de Arquivos: Envie arquivos do seu computador local diretamente para o Desktop da máquina remota de duas formas:
    • Drag & Drop: Arraste o arquivo sobre a tela remota — uma borda vermelha indicará a zona de soltura.
    • Botão de Upload: Clique no botão "Enviar Arquivo" no painel HUD da sessão para selecionar o arquivo via diálogo do sistema.
  • Sincronização de Área de Transferência (Clipboard Bidirecional): O conteúdo copiado na máquina remota é automaticamente sincronizado com o clipboard do seu navegador local, e vice-versa.
  • Painel de Controle Web Responsivo: Interface web incrível baseada em fontes modernas (Outfit e Inter) com controle dinâmico de zoom/escala ("Ajustar à tela" ou "1:1 Real").
  • Conectividade Segura por Sessão: Cada máquina de destino recebe um endereço exclusivo de 9 dígitos formatado e uma senha temporária aleatória de 4 dígitos gerada a cada inicialização do cliente.
  • Servidor Web Coordenador Embutido: O próprio cliente consegue inicializar um painel web local na porta 4500 caso esteja em rede local, permitindo controle direto.
  • Empacotamento Standalone: Ambos os clientes podem ser compilados em executáveis .exe de clique único usando a ferramenta pkg.
  • Solução Inteligente para VPS Windows: Integração nativa de instruções e alertas para evitar o travamento de tela/tela preta comum ao minimizar ou desconectar sessões RDP em servidores virtuais.

🆕 Recursos e Melhorias Recentes

Recentemente implementamos diversas melhorias significativas para profissionalizar a ferramenta como uma solução SaaS completa:

  1. Persistência de Senha do Cliente:
    • Adicionada a opção de manter a última senha gerada no cliente entre as reinicializações.
    • No config.json do cliente, ao configurar "persistPassword": true, o sistema gerará a primeira senha e a gravará no arquivo. Nas próximas inicializações (incluindo resets de VPS), ele lerá e manterá essa mesma senha.
  2. Visualização de Versão no HUD:
    • O visualizador Web agora exibe a versão exata do executável do cliente que está sendo controlado diretamente no HUD superior, logo ao lado do ID de Conexão (ex: 867 031 409 (v1.0.0)).
  3. Servidor SaaS Compilado Standalone (connectdesk-server.exe):
    • O código do servidor central agora pode ser compilado em um único executável executável independente do Windows (dist/connectdesk-server.exe). Ele traz todas as dependências, páginas Web da pasta public/ e endpoints de API embutidos.
  4. Auto-Liberação Inteligente de Porta (EADDRINUSE):
    • O executável do servidor agora detecta automaticamente se a porta 4500 está ocupada na VPS no momento de sua inicialização. Ele localiza o PID do processo antigo que está bloqueando a porta, encerra o processo travado e inicia o servidor com sucesso sem falhas de inicialização.
  5. Aba de Dispositivos e Clientes no Painel Admin:
    • O Painel Administrativo agora possui uma seção de Gerenciamento de Dispositivos e Clientes em tempo real. O administrador pode visualizar todos os computadores cadastrados no sistema, o ID de conexão, a versão do cliente instalado, o status de conexão (ONLINE/OFFLINE) e qual operador o cadastrou.
  6. Mapeamento de Transações Explícitas (Firebird 5.0):
    • Refatorada toda a camada de persistência de escrita (db.execute) para utilizar transações explícitas com commit e rollback gerenciados. Isso elimina o risco de travamentos de tabela (database locks) e conflitos transacionais no Firebird em cenários multiusuário.

🛠️ Arquitetura do Projeto

O projeto é dividido em três partes principais:

  1. server/ (Servidor Coordenador):

    • Baseado em Node.js, Express e Socket.io.
    • Atua como um intermediário leve e de baixa latência que redireciona comandos de mouse/teclado dos visualizadores para a máquina alvo e redistribui os frames de vídeo da máquina alvo para os visualizadores.
  2. client/ (Cliente para VPS — GDI+):

    • Aplicativo Node.js que inicia um processo PowerShell persistente.
    • O PowerShell carrega código C# nativo via Add-Type, usando GDI+ CopyFromScreen e user32.dll.
    • Requer uma sessão GUI ativa (RDP conectado ou console físico) para capturar a tela.
    • Ideal para: VPS Windows, servidores com RDP, máquinas físicas.
    • Executável gerado: client/dist/connectdesk.exe
  3. client-vm/ (Cliente para VMs — DXGI) 🆕

    • Variante do cliente que substitui o subsistema de captura por DXGI Desktop Duplication API (DirectX 11).
    • Acessa o framebuffer diretamente pelo adaptador de vídeo virtual via PInvoke C#, sem depender de sessão RDP ativa.
    • Funciona em modo headless — a VM pode estar sendo acessada apenas pelo console do hypervisor.
    • Requer: Windows 8+, DirectX 11 e driver WDDM 1.2 (aceleração 3D ativada no hypervisor).
    • Ideal para: VMware, Hyper-V, VirtualBox, KVM/QEMU.
    • Executável gerado: client-vm/dist/connectdesk-vm.exe

📋 Pré-requisitos

  • Servidor Coordenador: Qualquer sistema operacional (Windows, Linux, macOS) com Node.js v16+ instalado.
  • Cliente VPS (connectdesk.exe): Windows com sessão GUI ativa (RDP ou console). APIs Win32, GDI+, user32.dll. Node.js v16+ (ou executável standalone).
  • Cliente VM (connectdesk-vm.exe) 🆕: Windows 8 / Windows Server 2012 ou superior, DirectX 11, driver de vídeo WDDM 1.2 e aceleração 3D ativada no hypervisor. Não requer sessão RDP.
  • Visualizador (Viewer): Qualquer dispositivo moderno com um navegador web atualizado (Chrome, Edge, Firefox, Safari).

⚙️ Instalação e Execução

Passo 1: Instalação das Dependências

Primeiramente, baixe ou extraia o projeto. No terminal do diretório raiz, instale as dependências gerais do projeto e do servidor:

npm install

Em seguida, navegue até a pasta client/ e instale as dependências específicas do cliente remoto:

cd client
npm install
cd ..

Se for utilizar o modo VM, instale também as dependências do client-vm/:

cd client-vm
npm install
cd ..

Passo 2: Inicializar o Servidor Coordenador

Inicie o servidor de conexão para que as máquinas possam se registrar e se comunicar. Por padrão, ele escutará na porta 4500:

node server/server.js

Você verá a seguinte saída no terminal:

Server (Controller) running at http://localhost:4500

Nota: Se você for implantar o servidor em uma VPS ou nuvem, certifique-se de expor a porta 4500 (ou a porta configurada na variável de ambiente PORT) em seu firewall.


Passo 3: Configurar e Inicializar o Cliente

No computador que você deseja controlar:

  1. Verifique as configurações no arquivo client/config.json:

    {
      "id": "411988342",
      "serverUrl": "http://localhost:4500"
    }

    Substitua http://localhost:4500 pelo IP público ou domínio do seu servidor coordenador, se ele não estiver rodando localmente.

  2. Inicialize o cliente:

    node client/client.js
  3. O console do cliente limpará a tela e exibirá as credenciais de conexão seguras formatadas:

    ==================================================
          CONNECT DESK REMOTE CONTROL CLIENT (PoC)    
    ==================================================
      Endereço Remoto:      123 456 789
      Senha Temporária:     4321
    ==================================================
      Conectando ao Coordenador: http://localhost:4500
    ==================================================
      ► SE DETECTAR TELA PRETA EM VPS WINDOWS:
        Caso sua sessão RDP caia ou seja fechada, a GUI trava.
        Para desconectar mantendo a tela ativa, rode no cmd:
        tscon 1 /dest:console (troque 1 pelo ID da query session)
    ==================================================
      ► PARA CONTROLAR OUTRO COMPUTADOR:
        Pressione [Enter] para abrir o Painel de Controle
    ==================================================
    

Passo 4: Realizar o Controle Remoto

  1. No computador do suporte (Visualizador), abra o navegador e acesse o endereço do servidor coordenador (ex: http://localhost:4500 ou o endereço IP público/domínio da sua VPS).
  2. Na belíssima tela inicial do Connect Desk, insira o Endereço Remoto de 9 dígitos exibido no console do cliente.
  3. Clique em Iniciar Conexão.
  4. Uma janela pop-up estilizada solicitará a senha. Digite a Senha Temporária de 4 dígitos gerada no console da máquina alvo e clique em Confirmar.
  5. Pronto! A tela da máquina remota será renderizada de forma ultra fluida. Use o mouse e o teclado para operá-la como se estivesse na frente dela.

⌨️ Atalhos de Teclado do Windows

O Connect Desk transmite todos os atalhos nativos do Windows para a máquina remota usando Virtual Key Codes (VK), mapeados diretamente para as APIs keybd_event do user32.dll. Basta pressionar as teclas normalmente na janela do visualizador:

Atalho Ação na máquina remota
Ctrl + C Copiar
Ctrl + V Colar
Ctrl + X Recortar
Ctrl + Z Desfazer
Ctrl + A Selecionar tudo
Ctrl + S Salvar
Alt + Tab Alternar janelas
Alt + F4 Fechar janela ativa
Win (Meta) Abrir menu Iniciar
F1F12 Teclas de função
PageUp / PageDown Rolar página
Home / End Início / Fim de linha
Insert / Delete Inserir / Excluir
Setas direcionais Navegar

Como funciona: Cada tecla é transmitida como um evento keydown + keyup com o código VK correto. Modificadores (Ctrl, Alt, Shift) são mantidos pressionados enquanto você segura a tecla, permitindo combinações exatas como Ctrl+Shift+N, Alt+Tab, etc.


📁 Transferência de Arquivos

O Connect Desk permite enviar arquivos do seu computador local diretamente para o Desktop (Área de Trabalho) da máquina remota.

Método 1: Drag & Drop

  1. Com uma sessão remota ativa, arraste um arquivo do seu computador para qualquer área da tela remota exibida no navegador.
  2. Uma borda vermelha animada aparecerá, indicando a zona de soltura.
  3. Solte o arquivo — ele será transferido e salvo automaticamente no Desktop da máquina remota.
  4. Um toast de confirmação será exibido com o status da transferência.

Método 2: Botão de Upload

  1. Durante uma sessão ativa, clique no botão "Enviar Arquivo" (ícone de upload) no painel HUD superior.
  2. Selecione o arquivo desejado no diálogo do sistema operacional.
  3. O arquivo será transmitido e salvo no Desktop da máquina remota.

Nota: Arquivos de qualquer tipo e tamanho podem ser enviados. O arquivo é convertido para Base64 no navegador, transmitido via WebSocket (Socket.io) e gravado diretamente no disco da máquina alvo pelo cliente Node.js.


📦 Compilando para Executável Standalone (.exe)

O Connect Desk oferece dois executáveis independentes, cada um adequado para um tipo de ambiente:

connectdesk.exe — Para VPS e Máquinas Físicas (GDI+)

cd client
npm run build

O arquivo será gerado em client/dist/connectdesk.exe.

connectdesk-vm.exe — Para Máquinas Virtuais (DXGI) 🆕

cd client-vm
npm run build

O arquivo será gerado em client-vm/dist/connectdesk-vm.exe.

Qual usar?

Ambiente Executável recomendado
VPS Windows com RDP connectdesk.exe
Máquina física com Windows connectdesk.exe
VM VMware, Hyper-V, VirtualBox, KVM connectdesk-vm.exe
VM headless (sem RDP ativo) connectdesk-vm.exe

A ferramenta pkg empacota todos os scripts, dependências e arquivos estáticos da pasta public em um único .exe sem necessidade de instalar Node.js na máquina controlada.


💡 Dica Especial para VPS Windows (GUI Inativa / Tela Preta)

Ao utilizar o controle remoto em VPSs Windows, é comum se deparar com uma tela preta ao fechar ou minimizar o RDP. Isso ocorre porque o Windows desativa o renderizador GUI quando não há usuário RDP ativo.

Para solucionar:

  1. Abra o Prompt de Comando (CMD) como Administrador na sua VPS.
  2. Obtenha o ID da sessão RDP ativa:
    query session
  3. Anote o número da coluna ID da sua sessão (geralmente 1 ou 2).
  4. Transfira a GUI para o console:
    tscon ID_DA_SESSAO /dest:console
    Exemplo: tscon 1 /dest:console
  5. O Connect Desk continuará transmitindo a tela sem tela preta.

Usuário de VM? Se você está usando uma Máquina Virtual (VMware, Hyper-V, VirtualBox, KVM), use o connectdesk-vm.exe — ele não depende de RDP e captura diretamente pelo adaptador de vídeo virtual via DXGI.


🖥️ Modo VM — DXGI Desktop Duplication (Novo)

O connectdesk-vm.exe foi desenvolvido especificamente para ambientes de virtualização onde o connectdesk.exe padrão não funciona corretamente (tela preta, sem captura).

Por que VMs apresentam esse problema?

O connectdesk.exe usa GDI+ CopyFromScreen, que depende de uma sessão GUI ativa (RDP conectado ou console físico com monitor real). Em VMs acessadas apenas pelo console do hypervisor, o Windows não mantém essa sessão ativa e a captura retorna tela preta.

Como o modo VM resolve?

O connectdesk-vm.exe usa DXGI Desktop Duplication API — a mesma tecnologia utilizada por OBS, TeamViewer e AnyDesk. Ele acessa o framebuffer diretamente pelo adaptador de vídeo virtual (sem precisar de sessão RDP), funcionando mesmo em modo headless.

Requisitos mínimos para o modo VM

Requisito Detalhe
Sistema Operacional Windows 8 / Windows Server 2012 ou superior
DirectX DirectX 11
Driver de Vídeo WDDM 1.2 ou superior
Aceleração 3D Ativada no hypervisor
Privilégios Administrador (obrigatório para DXGI)

Ativando a aceleração 3D por hypervisor

Hypervisor Como ativar
VMware VM Settings → Display → ✅ Accelerate 3D graphics
VirtualBox Configurações → Display → ✅ Enable 3D Acceleration
Hyper-V Configurações → Vídeo → Enhanced Session Mode
KVM/QEMU Adicionar dispositivo virtio-vga com virgl=on

O que acontece se o DXGI não estiver disponível?

Se o executável detectar que o DirectX 11 / DXGI não está disponível (VM muito antiga ou aceleração 3D desativada), ele encerra com uma mensagem clara informando os requisitos mínimos — sem fallback silencioso.

[ERRO FATAL] DXGI Desktop Duplication não disponível
Requisitos mínimos:
  - Windows 8 / Windows Server 2012 ou superior
  - Driver de vídeo com suporte WDDM 1.2
  - DirectX 11 habilitado na VM
  - Aceleração 3D ativada no hypervisor
Para VPS com RDP, use connectdesk.exe.

🎨 Design Premium e Personalização

O Connect Desk foi desenvolvido sob os mais rígidos padrões de design moderno para proporcionar a melhor experiência do usuário:

  • Tipografia Fluida: Utilização das fontes Outfit e Inter via Google Fonts.
  • Aparência Premium Glass: Efeitos de desfoque de fundo (backdrop-filter) e gradientes elegantes que acompanham as interações.
  • Responsividade Dinâmica: O visualizador é compatível tanto com monitores ultrawide quanto com notebooks e telas menores, graças à capacidade inteligente de ajuste e redimensionamento automático do canvas.

💖 Contribuição e Doações

Se este projeto foi útil para você ou se você deseja apoiar o desenvolvimento contínuo do Connect Desk, sinta-se à vontade para fazer uma doação de qualquer valor!

Toda contribuição é extremamente bem-vinda e nos ajuda a manter o projeto ativo, aprimorando funcionalidades e trazendo novas atualizações.

QR Code para Doação
Escaneie o QR Code acima para doar qualquer valor via Pix 🚀


💬 Suporte e Comunidade

Para esclarecer dúvidas, reportar problemas ou interagir com outros desenvolvedores e usuários do Connect Desk, participe do nosso grupo oficial no WhatsApp:

👉 Acessar Grupo de Suporte no WhatsApp


📄 Licença

Este projeto é desenvolvido para fins educacionais e de demonstração de conceito (PoC). Sinta-se livre para customizar, expandir e integrar em suas próprias soluções de suporte de TI!

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages