← Back to Projects

MiSTer-deskflow

A client-only port of Deskflow to 32-bit armhf with some neat extra features.

Goal
Control retro computer cores over the network using the keyboard and mouse of my regular-use PC.
My role
Solo developer
Status
Active
Started
Ended
  • C++
  • Forgejo Actions

I started MiSTer-deskflow because I wanted to control the retro computer cores on my MiSTer FPGA with the keyboard and mouse already connected to my regular PC. Moving between the two should not mean reaching for another set of peripherals. Deskflow already provided network keyboard and mouse sharing between desktop systems; my goal was to bring MiSTer into that same setup and make it comfortable to use alongside my everyday computer.

My fork is a client-only C++ port for MiSTer’s 32-bit ARM Linux environment. A standard Deskflow server on Windows, macOS, or Linux supplies the input, while the MiSTer runs without a desktop windowing system. I added a Linux uinput backend that presents synthetic keyboard and mouse devices to MiSTer. Getting the port onto the stock system also meant building for its older runtime and bundling the libraries and keyboard-layout data it needs. A Docker-based cross-build produces the installable bundle and checks that it starts under ARM emulation.

Beyond receiving input, I wanted the fork to make everyday interactions between the two systems easier. That led to a few MiSTer-specific uses of Deskflow’s existing protocol, alongside a practical installation and update workflow. The major features are:

  • Sharing a desktop computer’s keyboard and mouse with MiSTer over the network.
  • Adjusting virtual screen dimensions for known cores and tuning mouse movement for their different resolutions.
  • Pasting desktop clipboard text into a core by simulating the necessary keystrokes.
  • Sending newly captured MiSTer screenshots to the desktop clipboard for pasting into other applications.
  • Scripted installation and updates, with public releases and Patreon preview builds.

One of the more interesting challenges was keeping mouse movement usable without being able to read the core’s actual cursor position. Deskflow can send absolute coordinates, but the MiSTer backend turns them into relative device movements and maintains its own virtual position. If MiSTer’s on-screen menu intercepts that input, the two positions can drift apart, leaving the cursor apparently stuck against an invisible wall. Using relative input with the cursor locked to MiSTer avoids that absolute-coordinate problem. For ordinary screen-to-screen movement, I added extra space around the virtual screen and adaptive movement scaling to reduce the impact. Those are mitigations, and absolute-mode desynchronization remains a documented limitation.

The fork is part of my own setup where it works great. It’s also picked up five GitHub stars, which is encouraging for something built around a fairly specific need. Public builds are available, and Patreage handles the membership verification and downloads for Patreon previews directly through the installer. I would like to hear how it behaves with other people’s cores, keyboards, and layouts, especially where their experience differs from mine. For me, the payoff is already concrete: convenient access to software libraries that I missed entirely during their prime, like the Amiga and Spectrum ZX.