Controle múltiplos computadores com um único mouse e teclado através da sua rede local.
One keyboard. One mouse. Your devices.
O Nexa é um software multiplataforma de compartilhamento de teclado, mouse e área de transferência (clipboard). Ele permite que você posicione seus computadores lado a lado e mova o cursor de uma tela para a outra simplesmente encostando na borda do monitor — exatamente como se fosse um monitor estendido, mas controlando sistemas operacionais completamente independentes.
Projetado em Rust, o Nexa elimina as dívidas técnicas de décadas de softwares legados, entregando criptografia de ponta a ponta, latência quase nula e compatibilidade nativa com compositores modernos (como Wayland no Linux e Windows 11).
- Transição de Borda Fluida: Mova o cursor suavemente entre telas de diferentes resoluções com conversão proporcional 2D automática.
- Segurança de Ponta a Ponta:
- Canal cifrado com ChaCha20-Poly1305 e proteção estrita anti-replay.
- Confirmação visual de pareamento via código numérico SAS de 6 dígitos (
XXX YYY), prevenindo ataques de homem-no-meio (MITM). - Identidade soberana por chave pública Ed25519: nenhum computador controla o outro sem autorização explícita do usuário.
- Conexão Direta por IP (Independente de Wi-Fi):
- Funciona perfeitamente mesmo que os computadores estejam em bandas Wi-Fi diferentes (ex.: um no Wi-Fi 2.4 GHz e outro no 5 GHz) ou conectados via cabo de rede (Ethernet).
- Suporte completo a IPv4 e arquitetura pronta para IPv6.
- Diagnóstico Granular Integrado (
--test-connection):- Ferramenta de teste passo a passo que diferencia se o computador está offline (Timeout), se a porta está bloqueada por firewall (Connection Refused) ou se o pareamento é pendente.
- Descoberta de Rede Automática (Opcional):
- Anúncios periódicos via UDP broadcast para encontrar aparelhos na mesma rede local com um clique.
- Sincronização Inteligente de Clipboard (Área de Transferência):
- Copie texto formatado em UTF-8 (acentos, símbolos e emojis) em uma máquina e cole na outra instantaneamente.
- Mecanismo Anti-Echo: algoritmo de hash SHA-256 que bloqueia loops infinitos de cópia e teto de segurança de 10 MB contra travamentos.
- Coalescência Adaptativa de Mouse:
- Compacta rajadas de movimento de mouses gamers (500 Hz – 1000 Hz) em janelas de 3 ms, reduzindo o consumo de banda em até 75% sem qualquer perda de precisão perceptível.
- Suporte a IP Dinâmico (DHCP):
- Se o roteador alterar o IP do seu computador, o Nexa atualiza o endereço com segurança sem exigir novo pareamento, pois a identidade é atrelada à chave criptográfica, e não ao endereço IP.
| Sistema Operacional | Modos Suportados | Ambiente Gráfico / Detalhes |
|---|---|---|
| Windows 11 (e Windows 10 x64) | Servidor / Cliente | Desktop interativo, suporte a Low-Level Hooks e injeção com scancodes ABNT2/US. |
| Linux (elementary OS 8.1) | Servidor / Cliente | Wayland nativo (Gala / Mutter) via org.freedesktop.portal.InputCapture e emulação /dev/uinput. |
| Linux (Ubuntu / Debian x64) | Servidor / Cliente | Pacote Debian .deb e serviço systemd --user. |
📘 Manuais Completos e Detalhados:
- Windows 10 (64-bit) ou Windows 11.
- Permissão de usuário para executar aplicativos na sua sessão de login.
Baixe o pacote executável mais recente do Nexa:
(Caso esteja compilando do código-fonte, utilize cargo build --release --bin nexa-daemon).
- Extraia o arquivo baixado em uma pasta de sua preferência (exemplo:
C:\Program Files\Nexa\ouC:\Nexa\). - A pasta conterá o executável
nexa-daemon.exe.
Para permitir que o Nexa receba conexões do seu outro computador na porta padrão (25800), abra o PowerShell como Administrador e execute:
netsh advfirewall firewall add rule name="Nexa KVM Share" dir=in action=allow protocol=TCP localport=25800Para que o Nexa inicie automaticamente quando você ligar o computador (com elevação de privilégios para funcionar em janelas administrativas):
nexa-daemon.exe --autostart-enable- Sistema operacional Linux baseado em Debian/Ubuntu de 64 bits.
- Sessão Wayland ou X11.
- Baixe o pacote oficial:
- Instale o pacote pelo terminal ou clicando duas vezes no arquivo:
sudo dpkg -i nexa_0.1.0_amd64.deb
- Garanta que o seu usuário tenha permissão para utilizar o emulador
/dev/uinput:(Pode ser necessário encerrar a sessão e entrar novamente para atualizar o grupo).sudo usermod -aG input $USER
Se você utiliza o UFW, libere a porta oficial do Nexa:
sudo ufw allow 25800/tcp comment "Nexa KVM Share"O Nexa roda perfeitamente integrado à sua sessão gráfica do usuário:
systemctl --user enable --now nexa.serviceNeste exemplo, o Computador A (Windows 11) tem o teclado e o mouse físicos conectados, e o Computador B (elementary OS 8.1) fica à direita na sua mesa.
No computador que receberá os comandos (Cliente), abra o terminal e consulte seu IP:
nexa-daemon --interfacesExemplo de saída:
=== Interfaces de Rede Locais ===
• Rede Local (Wi-Fi / Ethernet) [Ativa] : 192.168.1.20
No computador com o teclado e mouse (Windows):
nexa-daemon.exe --server --port 25800No computador com teclado/mouse, você pode rodar um teste para validar a conectividade:
nexa-daemon.exe --test-connection 192.168.1.20:25800Se tudo estiver correto, você verá:
┌────────────────────────────────────────────┐
│ Diagnóstico de conexão │
├────────────────────────────────────────────┤
│ Conectividade IP ✓ │
│ Porta TCP ✓ │
│ Serviço Nexa ✓ │
│ Handshake ✓ │
│ Autenticação ✓ │
│ Resultado: Conexão validada com sucesso! │
└────────────────────────────────────────────┘
No computador receptor (Cliente Linux):
nexa-daemon --client 192.168.1.10:25800(Substitua 192.168.1.10 pelo IP do computador Windows com o teclado/mouse).
Na primeira vez em que eles se encontrarem, um código de segurança de 6 dígitos será mostrado nos dois terminais (ex.: 482 731):
┌──────────────────────────────────────────────────┐
│ NOVO COMPUTADOR CONECTADO │
├──────────────────────────────────────────────────┤
│ Código de Pareamento de Segurança (SAS PIN): │
│ 482 731 │
│ │
│ Verifique se o código acima é idêntico na tela │
│ do outro computador para evitar ataques MITM. │
└──────────────────────────────────────────────────┘
- Olhe para os dois computadores e certifique-se de que os números coincidem.
- Pronto! A partir desse momento, basta mover o cursor até a borda da tela do Windows para que o mouse e o teclado comecem a controlar o Linux instantaneamente.
- Se precisar retornar o cursor para o Windows a qualquer instante, pressione a tecla
[ Scroll Lock ].
O Nexa salva suas configurações em formato declarativo nexa.toml na pasta do programa ou no diretório de dados do usuário:
# nexa.toml
device_name = "Meu-PC-Windows"
listen_port = 25800
edge_delay_ms = 100
auto_connect = true
log_level = "info"
[[peers]]
name = "Linux-Laptop"
ip_or_host = "192.168.1.20"
port = 25800
public_key_hex = "7f3a0981884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"
is_trusted = true
alias = "Meu Linux"
manual_ip = "192.168.1.20"
manual_port = 25800| Opção | Descrição |
|---|---|
-h, --help |
Exibe a mensagem de ajuda com todos os comandos. |
-v, --version |
Exibe a versão instalada do Nexa. |
-c, --config <ARQUIVO> |
Especifica um arquivo de configuração customizado. |
-p, --port <PORTA> |
Altera a porta TCP de escuta (Padrão: 25800). |
--server |
Executa em modo Servidor (Host que compartilha teclado e mouse físico). |
--client <IP[:PORT]> |
Executa em modo Cliente (Guest que recebe controle do cursor à distância). |
--connect <IP[:PORT]> |
Alias para --client. |
--test-connection <IP[:PORT]> |
Executa a verificação diagnóstica contra um computador remoto. |
--interfaces |
Lista todos os adaptadores de rede e endereços IP da máquina. |
--no-discovery |
Desativa a descoberta por broadcast UDP na rede local. |
--autostart-enable |
Configura o Nexa para iniciar junto com o sistema operacional. |
--daemon |
Executa o processo de forma silenciosa em segundo plano. |
- Sintoma: O teste de conexão resulta em
Conectividade IP: ✗ (Timeout). - Possíveis Causas:
- O computador de destino está desligado ou o IP digitado está incorreto.
- Isolamento de Clientes (AP Isolation / Client Isolation) ativado no roteador Wi-Fi (comum em redes de visitantes ou roteadores com isolamento entre bandas 2.4G e 5G).
- Solução:
- Verifique se o IP do outro computador não mudou usando
nexa-daemon --interfaces. - Acesse a página de administração do seu roteador Wi-Fi e desmarque a opção AP Isolation ou Client Isolation.
- Verifique se o IP do outro computador não mudou usando
- Sintoma:
Conectividade IP: ✓, masPorta TCP: ✗ (Connection Refused). - Possíveis Causas:
- O Nexa não foi iniciado no computador de destino.
- O firewall do sistema bloqueou a porta de entrada
25800.
- Solução:
- Certifique-se de que o
nexa-daemonestá em execução na máquina de destino. - Adicione a regra de liberação da porta
25800no Windows Firewall ou noufwdo Linux (conforme descrito na seção de Instalação).
- Certifique-se de que o
- Sintoma: O Windows indica conexão ativa, mas o cursor não se movimenta na tela do Linux.
- Possíveis Causas: Falta de permissão de escrita no dispositivo
/dev/uinput. - Solução:
Adicione seu usuário ao grupo
input:Reinicie a sessão para aplicar a alteração.sudo usermod -aG input $USER
O Nexa é desenvolvido em Rust como um workspace Cargo modular composto por 8 crates especializados:
nexa/
├── Cargo.toml
├── crates/
│ ├── nexa-common/ # Utilitários, logging e mascaramento de dados sensíveis
│ ├── nexa-protocol/ # Framing binário de 16 bytes e codec CRC32
│ ├── nexa-crypto/ # Criptografia Ed25519, X25519, ChaCha20-Poly1305 e SAS PIN
│ ├── nexa-net/ # Transporte assíncrono TCP, diagnóstico e descoberta LAN
│ ├── nexa-platform/ # Hooks Win32 e Portais Wayland Linux
│ ├── nexa-core/ # SessionEngine, Topologia 2D, FSM e Anti-Echo Clipboard
│ ├── nexa-ui/ # Estado reativo da UI, canvas de monitores e telas
│ └── nexa-daemon/ # Binário executável e daemon de sistema
└── scripts/ # Scripts de empacotamento para Windows e Debian (.deb)
# Clonar o repositório
git clone https://github.com/rafaelmaciels/Nexa.git
cd Nexa
# Executar a suíte de 71 testes automatizados
cargo test --all
# Compilar em modo release
cargo build --releaseContribuições são muito bem-vindas! Para contribuir:
- Faça um Fork do repositório.
- Crie uma branch para sua funcionalidade (
git checkout -b feature/minha-melhoria). - Faça o commit das suas alterações (
git commit -m "Adiciona suporte a nova funcionalidade"). - Envie para o GitHub (
git push origin feature/minha-melhoria). - Abra um Pull Request.
Distribuído sob licença dupla MIT ou Apache-2.0. Consulte o arquivo LICENSE para mais detalhes.
- Problemas e Sugestões: Abra uma issue no GitHub Issues.
- Discussões e Dúvidas: Participe do GitHub Discussions.
Se o Nexa é útil no seu dia a dia, considere deixar uma estrela (Star ⭐) no topo do repositório! Isso ajuda o projeto a crescer e alcançar mais pessoas.