6 pontos por GN⁺ 2023-12-28 | 1 comentários | Compartilhar no WhatsApp

DeskHop - troca rápida entre desktops

  • Gratuito e de código aberto
  • Quase sem latência na troca
  • Permite alternar arrastando o ponteiro do mouse entre os computadores
  • Não requer instalação de software
  • Usa componentes baratos e fáceis de encontrar (menos de 15 euros)
  • Case snap-fit imprimível em impressora 3D
  • Isolamento galvânico completo entre as saídas
  • Funciona em Linux, macOS e Windows

Como funciona

  • O dispositivo atua como intermediário entre teclado/mouse e os computadores, mantendo conexão com dois computadores ao mesmo tempo
  • Decide para qual computador enviar o mouse e as entradas do teclado de acordo com a escolha do usuário
  • Ao arrastar o mouse para o outro desktop, o teclado também muda automaticamente

Mouse

  • Altera o descritor de relatório HID do mouse para usar coordenadas absolutas e acumula internamente os relatórios do mouse (movimento relativo) para manter a posição exata
  • Ao tentar sair da área do monitor na direção do outro monitor, mantém a coordenada Y e troca o X máximo pelo X mínimo, então muda a saída
  • Faz o cursor aparecer na mesma altura no outro monitor, para que a troca seja percebida como suave

Teclado

  • Como host USB, consulta periodicamente o teclado e procura atalhos pré-configurados (como Caps Lock) para enviar os caracteres para a outra saída
  • Reaproveita os LEDs do teclado para fornecer feedback visual sobre qual saída está em uso
  • Memoriza o estado dos LEDs de cada computador para que seja possível continuar do ponto em que estava

Uso de imagens pré-compiladas

  • É possível usar imagens pré-compiladas
  • Conecte a placa Pico ao slot A da PCB e mantenha pressionado o botão da placa enquanto conecta o cabo; ela aparecerá no sistema como uma unidade USB
  • Copie o arquivo board_A.uf2 correspondente e repita o processo para B

Upgrade de firmware

  • Opção 1: abra o case e copie o arquivo uf2 correto mantendo o botão pressionado ao conectar cada Pico
  • Opção 2: use uma combinação específica de teclas (Right Shift, P, H, X, Left Shift) para entrar no modo BOOTSEL e colocar os Picos no modo de upgrade do bootloader

Outros recursos

  • Quando for necessário ajustar o mouse com precisão, mover o mouse enquanto mantém Right ALT pressionado reduz bastante a velocidade do cursor, permitindo trabalho mais preciso

Hardware

  • O circuito é barato (4,10 euros por unidade), pode ser soldado manualmente e é baseado em duas placas Raspberry Pi Pico, que a maioria dos fornecedores mantém em estoque
  • Os Picos são conectados por UART usando um isolador digital de dois canais Analog Devices ADuM1201 (~3 euros)
  • Pode funcionar como host e dispositivo USB graças a um projeto impressionante que implementa USB usando a magia de I/O programável do RP2040

PCB

  • Para manter a montagem DIY o mais simples possível, as trilhas ficam em apenas um lado e a quantidade de componentes foi reduzida ao mínimo
  • As linhas diferenciais USB D+/D- precisam ter o mesmo comprimento, mas foram deixadas propositalmente um pouco assimétricas para compensar a diferença de comprimento das trilhas GPIO correspondentes na própria PCB do PICO, de forma que o comprimento total coincida

Case

  • Como o autor não tem muita habilidade com modelagem 3D, o case é simples e básico, mas cumpre seu papel
  • É fácil de imprimir, usa cerca de 33 g de filamento e fica pronto em poucas horas
  • O movimento horizontal da PCB é impedido por pinos que passam por furos, e o movimento vertical é travado por saliências snap-fit nas laterais, dispensando parafusos
  • O conector micro USB fica um pouco para fora da lateral do case, então fazer um furo um pouco maior permite a passagem do cabo
  • A tampa tem design snap-fit e inclui uma fenda para chave de fenda para poder ser aberta
  • As marcações na parte superior são em baixo-relevo, então é possível dar acabamento com giz de cera ou similar para aumentar o contraste (ou deixar como está)

Lista de materiais

  • 2 Raspberry Pi Pico, 1 ADuM1201BRZ, 2 capacitores SMD 1206 de 100 nF, 2 conectores USB-A para PCB, 2 headers 2.54 1x03
  • Preço total: 11,53 euros
  • O conector USB-A pode ser o Molex MX-67643-0910 ou uma alternativa mais barata com as mesmas dimensões
  • Etapas adicionais: fabricar a PCB (Gerber fornecido, a JLC fabrica por alguns dólares, escolher espessura de 1,6 mm), imprimir o case em 3D (arquivo .stl fornecido, cerca de 33 g de filamento)

FAQ

  1. Funciona apenas com dois Picos, sem PCB e sem o isolador?
    • O isolador é recomendado, mas pode funcionar sem ele.
  2. O que acontece se os monitores tiverem resoluções diferentes?
    • O movimento do mouse acontece em um espaço de coordenadas abstrato, e o computador calcula a correspondência com a tela física, então deve funcionar sem problemas.
  3. Onde posso comprar esse produto?
    • Não é vendido; é um projeto pessoal e não comercial de hobby.
  4. Quando a tela ativa muda pelo mouse, o teclado acompanha (e vice-versa)?
    • Sim, ele foi feito para funcionar como se fosse um único computador.
  5. Funciona com dongles combo de teclado/mouse, como o Logitech Unifying Receiver?
    • Na versão atual, não funciona porque assume que o mouse está conectado a uma porta diferente. Seria necessário investigar o funcionamento do Logitech Unifying Receiver e implementar suporte.
  6. Funciona com mouse e teclado sem fio que têm receptores sem fio separados?
    • Esses casos não foram testados, então podem surgir problemas inesperados, mas em teoria deve funcionar de imediato.

Desvantagens

  • Atenção: para usar esse recurso, os dois computadores precisam estar conectados e ligados (cada placa é alimentada pelo computador ao qual está conectada).
  • O código precisa de limpeza, refatoração etc.
  • Ocasionalmente ocorrem bugs e comportamentos estranhos.
  • Não foi testado com vários dispositivos, então não dá para saber como vai funcionar no hardware de cada usuário.
  • O Pico-PIO-USB foi modificado com patch para dar suporte ao controle dos LEDs do teclado, algo que normalmente é tratado pelo TinyUSB no modo host.

Isenção de responsabilidade

  • Qualquer pessoa que tente este projeto deve entender e reconhecer que o autor não se responsabiliza por lesões, danos ou quaisquer outros resultados.
  • Como a segurança é importante, é essencial tomar as precauções necessárias e assumir a responsabilidade pelo próprio bem-estar durante todo o projeto.
  • Evite choques elétricos, queimaduras, estresse ou passar raiva; a ideia é trabalhar com segurança e se divertir.

Opinião do GN⁺:

  • Este artigo pode ser muito útil para quem usa dois computadores. É especialmente atraente para usuários que querem aumentar a eficiência compartilhando um único teclado e mouse.
  • Por ser open source e adotar uma abordagem DIY, pode ser um projeto interessante para quem se interessa por tecnologia. Os usuários podem ajustar e melhorar o sistema de acordo com suas necessidades.
  • Este projeto mostra o espírito inovador da comunidade ao tentar resolver problemas técnicos. Ao resolverem o problema por conta própria e compartilharem o processo, outras pessoas também podem se beneficiar.

1 comentários

 
GN⁺ 2023-12-28
Comentários do Hacker News
  • É notável que consiga detectar as bordas mesmo sem software cliente.

    • Para fazer o cursor do mouse atravessar as telas como mágica, o descritor de relatório HID do mouse é alterado para usar coordenadas absolutas, e os relatórios do mouse que chegam como movimento relativo são acumulados internamente para manter a posição correta.
    • Funciona de forma semelhante ao SynergyKM/Barrier, mas não exige recurso de área de transferência nem software cliente.
  • Uso uma solução de software chamada Synergy há mais de dez anos. A troca é instantânea via Wi‑Fi e também funciona entre Windows/Mac/Linux.

  • Às vezes, ao tentar mover o controle deslizante do YouTube exatamente para uma posição específica, o mouse fica sensível demais e você precisa mover a mão com muito cuidado.

    • No YouTube, mesmo sem hardware personalizado, é possível avançar quadro a quadro usando as teclas vírgula (,) e ponto (.).
  • No Windows, dá para usar uma ferramenta chamada Mouse Without Borders, desenvolvida pela Microsoft Garage e agora parte do Windows PowerToys.

  • Inspirado por outros projetos parecidos, alguém criou sua própria versão.

    • Um programa roda no desktop Linux e recebe eventos de entrada do subsistema de entrada do Linux (evdev). Quando uma certa tecla é pressionada, ele consome todos os eventos e os envia para um RPI Pico via USB serial. Ao pressionar a tecla novamente, ele volta ao modo de escuta passiva.
    • O RPI Pico é programado para converter eventos evdev do Linux em eventos USB HID e enviá-los para outro PC com Windows.
    • O resultado é um switch KM que permite alternância instantânea entre um PC Linux e um PC rodando o sistema operacional escolhido.
    • Como iniciante em hardware, a pessoa achou que este projeto é um bom ponto de partida para outros iniciantes, porque precisou de apenas 2 fios.
  • Comprei 4 hubs USB para alternar teclado e mouse, mas a maioria dos dispositivos era tão ruim que eu precisava desconectar fisicamente o hub várias vezes por dia.

    • Uso o software Synergy e ele funciona bem, mas queria um KVM de verdade que permitisse webcam, microfone, áudio etc.
    • Usuários de KVM definitivamente merecem opções melhores.
  • Um dos grandes incômodos é usar um switch USB 3.0 para alternar a entrada de mouse e teclado entre dois PCs.

    • Durante reuniões no Teams, quando mencionam meu nome ou recebo uma mensagem, de repente preciso sair procurando o botão para mudar a entrada para o PC em que o Teams está rodando.
    • Tive a ideia de conectar um ESP32 ou Rpi Pico W aos pinos do botão do switch USB e alternar a entrada entre as duas máquinas por meio de um endpoint HTTP, mas acabei desistindo porque não encontrei uma forma de determinar qual entrada estava ativa.
  • Atualmente uso um switch KVM, e como a troca leva de 2 a 3 segundos, na maior parte do tempo prefiro acessar o outro computador via SSH e usar uma sessão tmux.

  • Isso é um avanço impressionante.

    • Como alguém que usa há muito tempo uma configuração de desktop com máquinas Lin-Mac-Win organizadas da esquerda para a direita, esse tipo de setup ficou mais fácil à medida que os designs de SoC se popularizaram nos últimos anos.
    • Minha configuração atual é composta por 2 clones de Mac mini com SoC Ryzen, custando US$ 250 cada, vindos direto de Shenzhen, além de um M1 MBP.
    • É uma pena que o mundo antes próspero das soluções KVM de código aberto tenha degenerado em um pesadelo recursivo de forks, no qual é difícil conseguir um KVM por software, multiplataforma e de código aberto que funcione sem custo.
    • Minha configuração atual usa um bom e velho switch KVM, mas apertar o botão atrapalha.
  • O Synergy resolve bem esse problema só com software. Não é gratuito nem open source, mas é relativamente barato.