hrvach /deskhop

Fast Desktop Switching Device

★ 7,948⑂ 309👁 60⑃ 59● 215▤ 27
CCreated 2023-12-25
7,948
stars
+0+0+26
309
forks
60
watchers
59
prs
215
issues
27
releases
–
discussions

README

DeskHop - Fast Desktop Switching

Did you ever notice how, in the crazy world of tech, there's always that one quirky little project trying to solve a problem so niche that its only competitors might be a left-handed screwdriver and a self-hiding alarm clock?

I use two different computers in my daily workflow and share a single keyboard/mouse pair between them. Trying several USB switching boxes found on Amazon made me realize they all suffer from similar issues - it takes a while to switch, the process is quite clumsy when trying to find the button and frankly, it just doesn't get any better with time.

All I wanted was a way to use a keyboard shortcut to quickly switch outputs, paired with the ability to do the same by magically moving the mouse pointer between monitors. This project enables you to do both, even if your computers run different operating systems!

!DeskHop case and board

 Features

- Completely free and open source
- No noticeable delay when switching
- Simply drag the mouse pointer between computers
- No software installed
- Affordable and obtainable components ( Dragging the mouse from Mac to Linux automatically switches outputs. 

------

The actual switch happens at the very moment when one arrow stops moving and the other one starts.

 Keyboard

Acting as a USB Host and querying your keyboard periodically, it looks for a preconfigured hotkey in the hid report (usually Ctrl + Caps Lock for me). When found, it will forward all subsequent characters to the other output.

To have a visual indication which output you are using at any given moment, you can repurpose keyboard LEDs and have them provide the necessary feedback.

It also remembers the LED state for each computer, so you can pick up exactly how you left it.

!DeskHop Typing Demo

 How to build

To avoid version mismatch and reported path issues when building, as well as to save you from having to download a large SDK, the project now bundles minimal pico sdk and tinyusb.

On a Debian/Ubuntu systems, make sure to install these:

shell
apt update
apt install \
    build-essential \
    cmake \
    gcc-arm-none-eabi \
    libnewlib-arm-none-eabi \
    python3


You should be able to build by running:

shell
cmake -S . -B build
cmake --build build


additionally, to rebuild web UI check webconfig/ and execute ./render.py, you'll need jinja2 installed.

An alternative can be to use docker via 'docker compose' or 'docker-compose':

docker-compose -f misc/docker.yml run --rm build_container

This ensures reproducible builds.

To rebuild the disk, check disk/ folder and run ./create.sh, tweak to your system if needed. You'll need dosfstools (to provide mkdosfs),

 Using a pre-built image

Alternatively, you can use the pre-built images. Since version 0.6 there is only a single universal image. You need the .uf2 file which you simply copy to the device in one of the following ways:

 Upgrading firmware

Option 1 - (firmware 0.6 and later) Put the device in "config mode" by s

Snapshot: 2026-11-04T14:00:00Z · Data license Apache-2.0 · JSON