# hrvach/deskhop

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/hrvach-deskhop).**

7,451 stars · 259 forks · C · gpl-3.0

## Links

- GitHub: https://github.com/hrvach/deskhop
- awesome-repositories: https://awesome-repositories.com/repository/hrvach-deskhop.md

## Topics

`arm` `c` `desktop` `diy` `embedded` `hid` `keyboard` `kvm` `mouse` `pi` `pico` `raspberry` `raspberry-pi` `rp2040` `switch` `usb`

## Description

Deskhop is a DIY hardware KVM switch and USB HID input router. It provides the PCB layouts and firmware necessary to build a physical device that routes keyboard and mouse inputs between two computers.

The project features a web-based configuration interface delivered via a virtual USB mass storage device, allowing users to manage hardware settings and calibration through a browser using WebHID. It supports seamless transitions between workstations via edge-of-screen cursor movement or hotkeys, including coordinate-mapped scaling to maintain vertical pointer position across monitors of different resolutions.

The hardware includes capabilities for gaming compatibility via relative mouse movement emulation, input locking to prevent accidental switching, and a precision mode for slow cursor movement. Additionally, it can simulate mouse movement heartbeats to prevent connected computers from entering sleep or standby modes.

The repository provides the necessary PCB layout generation and design files for manufacturing the physical hardware boards.

## Tags

### Hardware & IoT

- [HID Input Routing](https://awesome-repositories.com/f/hardware-iot/hid-input-routing.md) — Routes keyboard and mouse signals between two computers using edge-of-screen transitions or hotkeys. ([source](https://github.com/hrvach/deskhop#readme))
- [USB HID Routing](https://awesome-repositories.com/f/hardware-iot/usb-hid-routing.md) — Intercepts USB input signals and reroutes them between two target computers based on cursor position or hotkey triggers.
- [Web-Based](https://awesome-repositories.com/f/hardware-iot/connectivity-iot/internet-of-things/device-management/web-based.md) — Provides a locally hosted web interface delivered via a virtual USB drive to modify hardware settings. ([source](https://github.com/hrvach/deskhop/blob/main/README.md))
- [HID Device Communication](https://awesome-repositories.com/f/hardware-iot/hid-device-communication.md) — A hardware controller that manages Human Interface Device signals to enable seamless switching between multiple connected workstations.
- [WebHID Device Management](https://awesome-repositories.com/f/hardware-iot/peripheral-hardware-controllers/custom-hardware-controllers/webhid-device-management.md) — Manages device settings through a local web interface delivered via a virtual USB drive using WebHID.
- [Relative Mouse Emulation](https://awesome-repositories.com/f/hardware-iot/relative-mouse-emulation.md) — Ensures compatibility with games and virtual machines by emulating relative mouse movement instead of absolute positioning. ([source](https://github.com/hrvach/deskhop/blob/main/README.md))
- [Cursor Position Scaling](https://awesome-repositories.com/f/hardware-iot/cursor-position-scaling.md) — Implements coordinate-mapped scaling to maintain consistent vertical pointer position across monitors with different resolutions. ([source](https://github.com/hrvach/deskhop#readme))
- [PCB Design Assets](https://awesome-repositories.com/f/hardware-iot/pcb-design-assets.md) — Provides design files and routing specifications necessary for manufacturing the physical hardware boards. ([source](https://github.com/hrvach/deskhop/blob/main/pcb))
- [USB Keep-Alive Devices](https://awesome-repositories.com/f/hardware-iot/usb-keep-alive-devices.md) — A system that simulates mouse movement to prevent connected computers from entering sleep or standby mode.

### Artificial Intelligence & ML

- [Cross-Machine Cursor Routing](https://awesome-repositories.com/f/artificial-intelligence-ml/input-routing-strategies/input-routing-schemas/cross-machine-cursor-routing.md) — Moves a cursor seamlessly between different monitors connected to separate machines while maintaining a consistent vertical position.

### Part of an Awesome List

- [DIY Peripheral Routers](https://awesome-repositories.com/f/awesome-lists/devtools/hardware-projects/diy-peripheral-routers.md) — Provides a complete set of PCB layouts and firmware for building a custom hardware switch for peripheral routing.
- [Relative Mouse Emulation](https://awesome-repositories.com/f/awesome-lists/devtools/games-and-emulation/relative-mouse-emulation.md) — Switches between absolute positioning and relative movement packets to maintain compatibility with gaming and virtual machine environments.
- [Input And Peripheral Control](https://awesome-repositories.com/f/awesome-lists/devtools/input-and-peripheral-control.md) — Uses relative mouse movement and input locking to ensure controllers work correctly with games and virtual machines.

### Development Tools & Productivity

- [USB Configuration Drives](https://awesome-repositories.com/f/development-tools-productivity/virtual-file-systems/virtual-drive-emulation/usb-configuration-drives.md) — Hosts a local web server presented as a USB mass storage device to allow browser-based hardware settings.
- [Input Simulators](https://awesome-repositories.com/f/development-tools-productivity/input-simulators.md) — Generates periodic synthetic mouse movements to prevent the operating system from entering sleep or standby modes.

### Networking & Communication

- [Hardware KVM Switches](https://awesome-repositories.com/f/networking-communication/hardware-kvm-switches.md) — Shares one keyboard and mouse across two computers by switching the active connection via hotkeys or cursor movement.
- [Local Web Interfaces](https://awesome-repositories.com/f/networking-communication/local-web-interfaces.md) — A local web page delivered via virtual USB drive to manage hardware settings and calibration through the browser.
- [Software KVM Switches](https://awesome-repositories.com/f/networking-communication/software-kvm-switches.md) — A physical device that routes keyboard and mouse inputs between two computers using edge-of-screen transitions or hotkeys.

### Software Engineering & Architecture

- [Screen Boundary Triggers](https://awesome-repositories.com/f/software-engineering-architecture/event-driven-triggers/geofencing-triggers/screen-boundary-triggers.md) — Detects when the mouse pointer reaches screen boundaries to trigger a hardware switch between connected computers.

### Web Development

- [Browser Hardware APIs](https://awesome-repositories.com/f/web-development/browser-hardware-apis.md) — Uses the WebHID browser API to communicate directly with the device hardware for real-time configuration updates.

### Graphics & Multimedia

- [Coordinate Mapping](https://awesome-repositories.com/f/graphics-multimedia/graphics-engines-rendering/3d-math-and-geometry-toolkits/geometry-primitives/coordinate-mapping.md) — Implements coordinate translation to maintain a consistent vertical pointer position when moving the cursor across monitors of different resolutions.

### Operating Systems & Systems Programming

- [System Sleep Inhibitors](https://awesome-repositories.com/f/operating-systems-systems-programming/system-sleep-inhibitors.md) — Keeps computers awake and preventing standby mode by simulating mouse movements during periods of user inactivity.

### User Interface & Experience

- [Hardware Input Locks](https://awesome-repositories.com/f/user-interface-experience/form-and-input-management/interaction-and-event-handling/interaction-logic-hooks/interaction-controls/interaction-controls/input-method-toggles/hardware-input-locks.md) — Prevents accidental workstation switching by locking keyboard and mouse inputs to the current active computer. ([source](https://github.com/hrvach/deskhop#readme))
