181 lines
6.6 KiB
Markdown
181 lines
6.6 KiB
Markdown
# KVMote
|
|
|
|
> **KVM over Bluetooth** — controle teclado e mouse de um PC remoto usando um Arduino Leonardo como ponte HID, sem instalar nada no PC cliente.
|
|
|
|
---
|
|
|
|
## O que é
|
|
|
|
KVMote é um software KVM (*Keyboard, Video, Mouse*) que funciona de forma semelhante ao [Barrier](https://github.com/debauchee/barrier) e [InputLeap](https://github.com/input-leap/input-leap), mas com uma diferença fundamental: **o PC cliente não precisa de nenhum software instalado**.
|
|
|
|
A comunicação acontece via **Bluetooth Serial (HC-06)** até um **Arduino Leonardo**, que se apresenta ao PC cliente como um teclado e mouse USB padrão (HID). Para o Windows do cliente, é como se um teclado e mouse físicos tivessem sido conectados.
|
|
|
|
```
|
|
┌─────────────────┐ Bluetooth SPP ┌────────────┐ USB HID ┌──────────────┐
|
|
│ PC Host │ ──────────────────────► │ HC-06 │ ─────────────► │ PC Cliente │
|
|
│ KVMote.exe │ (virtual COM) │ Arduino │ (teclado + │ (sem sw) │
|
|
│ teclado+mouse │ │ Leonardo │ mouse USB) │ │
|
|
└─────────────────┘ └────────────┘ └──────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## Por que usar
|
|
|
|
- ✅ **Zero instalação no PC cliente** — o Arduino é reconhecido como HID nativo
|
|
- ✅ **Funciona em ambientes corporativos** — sem software, sem porta de rede, sem VPN
|
|
- ✅ **Sem driver especial** — Windows, Linux e macOS reconhecem HID automaticamente
|
|
- ✅ **Clipboard de texto** — Ctrl+C no host, Ctrl+V envia o texto digitado ao cliente
|
|
- ✅ **Suporte a layouts** — US Internacional e PT-BR ABNT2
|
|
|
|
---
|
|
|
|
## Hardware necessário
|
|
|
|
| Componente | Detalhes |
|
|
|---|---|
|
|
| Arduino Leonardo | ATmega32U4 com suporte a USB HID nativo |
|
|
| Módulo HC-06 | Bluetooth SPP escravo, configurado para 9600 baud |
|
|
| LED RGB (ânodo comum ou cátodo comum) | Opcional, mas recomendado para feedback visual |
|
|
| PC Host | Windows 10/11, com Bluetooth |
|
|
| PC Cliente | Qualquer sistema operacional |
|
|
|
|
### Conexão do HC-06 ao Arduino Leonardo
|
|
|
|
```
|
|
HC-06 TX → Arduino RX1 (pino 0)
|
|
HC-06 RX → Arduino TX1 (pino 1) [use divisor de tensão: 5V→3.3V]
|
|
HC-06 VCC → Arduino 5V
|
|
HC-06 GND → Arduino GND
|
|
```
|
|
|
|
### LED RGB (pinos PWM)
|
|
|
|
```
|
|
R → pino 5
|
|
G → pino 6
|
|
B → pino 9
|
|
```
|
|
|
|
**Significado das cores:**
|
|
| Cor | Estado |
|
|
|---|---|
|
|
| Azul | Conectado, aguardando (modo host) |
|
|
| Laranja | Modo cliente ativo (mouse no PC remoto) |
|
|
| Flash verde | Ação executada / voltou ao host |
|
|
| Flash ciano | PONG recebido (heartbeat OK) |
|
|
|
|
---
|
|
|
|
## Software necessário (PC Host)
|
|
|
|
- Windows 10/11 (x64)
|
|
- .NET 8 Desktop Runtime — ou use o executável self-contained
|
|
- Arduino IDE com as bibliotecas `Keyboard` e `Mouse` (inclusas no suporte ao Leonardo)
|
|
|
|
---
|
|
|
|
## Como configurar
|
|
|
|
### 1. Arduino
|
|
1. Abra `KVMote.ino` na Arduino IDE
|
|
2. Selecione a placa **Arduino Leonardo**
|
|
3. Faça o upload
|
|
|
|
### 2. HC-06 (se necessário)
|
|
O HC-06 já vem configurado para 9600 baud de fábrica. Se você alterou, edite a constante no sketch:
|
|
```cpp
|
|
#define BAUD_HC06 9600 // ← altere se necessário
|
|
```
|
|
|
|
### 3. Par Bluetooth
|
|
1. Ligue o Arduino com o HC-06
|
|
2. No PC Host: Configurações → Bluetooth → Adicionar dispositivo → `HC-06`
|
|
3. Senha padrão: `1234`
|
|
4. Anote a porta COM criada (ex: `COM5`)
|
|
|
|
### 4. KVMote.exe
|
|
1. Compile o projeto ou use o executável publicado
|
|
2. Execute `KVMote.exe` no PC Host
|
|
3. A porta COM é **detectada automaticamente** via handshake PONG
|
|
4. Selecione a posição do PC cliente (Esquerda, Direita, Acima, Abaixo)
|
|
5. Selecione o layout do teclado do cliente
|
|
6. Clique em **Conectar**
|
|
|
|
---
|
|
|
|
## Como usar
|
|
|
|
### Controle de mouse e teclado
|
|
- Leve o cursor até a **borda da tela** na direção do PC cliente
|
|
- O cursor desaparece e o modo cliente é ativado (LED laranja no Arduino)
|
|
- Tudo que você digita e move o mouse vai para o PC cliente
|
|
- Para **voltar ao host**: mova o mouse na direção oposta (~15px além da borda virtual)
|
|
|
|
### Clipboard de texto
|
|
1. Selecione e copie texto no host (**Ctrl+C**) — máximo 300 caracteres
|
|
2. Mude para o modo cliente (leve o mouse até a borda)
|
|
3. Pressione **Ctrl+V** (ou **Shift+Insert**) — o texto é digitado caractere a caractere no cliente
|
|
|
|
> **Nota:** O clipboard é enviado como digitação, não como colagem nativa. Caracteres não-ASCII (acentos) e alguns símbolos dependem do layout configurado.
|
|
|
|
---
|
|
|
|
## Protocolo serial (binário)
|
|
|
|
| Comando | Bytes | Descrição |
|
|
|---|---|---|
|
|
| `M` dx dy | 3 | Movimento do mouse (int8 cada) |
|
|
| `W` delta | 2 | Roda do mouse (int8) |
|
|
| `K` char | 2 | Digitar caractere (Keyboard.write) |
|
|
| `P` key | 2 | Pressionar tecla (Keyboard.press) |
|
|
| `U` key | 2 | Soltar tecla (Keyboard.release) |
|
|
| `A` | 1 | Soltar todas as teclas |
|
|
| `C` L\|R | 2 | Clique do mouse |
|
|
| `D` L\|R | 2 | Pressionar botão do mouse |
|
|
| `E` L\|R | 2 | Soltar botão do mouse |
|
|
| `O` | 1 | LED laranja (entrou no cliente) |
|
|
| `H` | 1 | LED azul + flash verde (voltou ao host) |
|
|
| `~` | 1 | Ping → Arduino responde `[PONG]` |
|
|
|
|
---
|
|
|
|
## Gerar executável portable
|
|
|
|
> ⚠️ **Não use o "Publicar" do Visual Studio** — ele gera um setup ClickOnce com vários arquivos.
|
|
> Use o terminal (`cmd` ou PowerShell) na pasta do projeto:
|
|
|
|
```powershell
|
|
# Self-contained (~70MB) — roda sem .NET instalado, ideal para PCs externos
|
|
dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true
|
|
|
|
# Dependente do runtime (~2MB) — requer .NET 8 Desktop Runtime instalado no PC
|
|
dotnet publish -c Release -r win-x64 --self-contained false -p:PublishSingleFile=true
|
|
```
|
|
|
|
O `KVMote.exe` gerado fica em `publish\` — é só copiar e executar, sem instalação.
|
|
|
|
---
|
|
|
|
## Limitações conhecidas
|
|
|
|
- **Canal único (9600 baud):** durante o envio de clipboard, o mouse fica momentaneamente travado
|
|
- **Caracteres não-ASCII:** acentos (é, ã, ç) não são suportados no clipboard — são ignorados
|
|
- **Monitor único:** suporte a múltiplos monitores não implementado
|
|
- **PT-BR:** alguns símbolos (`/`, `?`, `\`, `@`) não podem ser enviados via clipboard no layout PT-BR ABNT2
|
|
|
|
---
|
|
|
|
## Roadmap
|
|
|
|
- [ ] Suporte a múltiplos monitores
|
|
- [ ] Layout US-International como destino
|
|
- [ ] Mapeamento completo PT-BR (símbolos restantes via HID raw)
|
|
- [ ] Aplicativo separado de clipboard (OneDrive / TCP) para textos longos e imagens
|
|
|
|
---
|
|
|
|
## Licença
|
|
|
|
MIT — use, modifique e distribua livremente.
|