Logitech Flow — for the OS Logitech skipped

One key.
Every device follows.

Your MX keyboard already jumps between three computers. This makes your mouse come with it — and your clipboard too. On Linux, where Logitech's own Flow has never worked.

$pip install logitech-flow-kvm Read the setup guide →

MIT licensed Python 3.10 – 3.14 71 ★ on GitHub HID++ over your existing Unifying / Bolt receiver

A finger reaching for the host-2 key on an MX Keys Mini keyboard, its indicator light lit. host 2 · lit
Device panel demo — press a host key
On the keyboard
1workstationFedora 42
flow-server
2thinkpadDebian 13
flow-client
3macbookmacOS 15
flow-client
    The keyboard is the leader — it moves the instant you press the key. Everything else is a follower, told where to go a moment later.

    Why this exists

    Three computers, one desk, and a small tax on every switch.

    01

    Flow stops at Linux

    Logitech Options+ ships for Windows and macOS. If one of the machines under your desk runs Linux, it simply isn't part of the arrangement — no host following, no shared clipboard, no setting to turn on.

    02

    Every device switches alone

    Multi-host hardware is per-device by design. Press host 2 on the keyboard, then find the tiny button underneath the mouse and press host 2 again. Then do it in reverse, thirty seconds later, when you switch back.

    03

    The clipboard doesn't travel

    You copy an error message on one host and paste it… nowhere. So it goes through a chat window to yourself, or a pastebin, or gets retyped by hand.

    How it works

    Watch one device. Command the rest.

    There's no input streaming and no virtual monitor. Your mouse and keyboard stay on their own wireless link to whatever host they're on — this only tells them which host that should be.

    The leader

    It notices the moment your keyboard leaves

    Pick one device — a keyboard with host keys is ideal — as the leader. flow-server watches its receiver for connect and disconnect notifications, so a host change is observed, not guessed at.

    Devices are named by serial number, so they survive a replug or a reboot
    Live status panel in a terminal; plain log lines under systemd
    The flow-server terminal display: a status panel showing host, listening address, leader and follower state, above a scrolling log.

    The link

    Across the desk, or across the network

    Each host runs a client that subscribes to the server's event stream, so a switch propagates the instant it happens rather than on a poll. First connection walks through a pairing handshake: the client shows a six-digit code, you type it into the server, and from then on the link is TLS with a pinned certificate and a token.

    Every host keeps its own receiver and its own devices
    Reach the server by hostname with --hostname, or by IP out of the box
    The flow-server pairing prompt, asking for the six-digit code shown by a connecting client.

    The clipboard

    What you copied is already there

    When your keyboard leaves a host, that host's clipboard goes with it; when it lands, the clipboard is waiting. Copy on the workstation, switch, paste on the laptop. Not comfortable with that? --no-clipboard turns it off per host, on the server or on any client.

    The flow-client terminal display showing device status and a scrolling log.

    The stubborn part

    It doesn't assume the switch worked

    A Logitech device never acknowledges a host-change command — you send it into the dark. So instead of sleeping and hoping, this keeps issuing the command until it observes the device arrive where it was sent, re-checks devices it believes are gone, and treats a receiver's "no link to that device" as evidence in its own right. A dropped notification or a sleeping mouse doesn't leave you half-switched.

    # the loop, in the logs
    [INFO] Host 2 connected
    [INFO] Commanding F262458A → host 2
    [INFO] Device F262458A no longer here
    [INFO] Converged: 1 leader, 1 follower

    Setup

    Three commands, one pairing code.

    1

    Find your devices

    On the machine you'll use as the server. Note the IDs — those are serial numbers, stable across reboots, unlike the /dev/hidraw paths beside them.

    $ logitech-flow-kvm list-devices
    
    ┏━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
    ┃ ID       ┃ Product ┃ Name           ┃ Path           ┃
    ┡━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
    │ 08F5F681 │ B369    │ MX Keys Mini   │ /dev/hidraw4:1 │
    │ F262458A │ 406A    │ MX Anywhere 2S │ /dev/hidraw5:1 │
    └──────────┴─────────┴────────────────┴────────────────┘
    2

    Start the server

    The 1 is this machine's host number — the one lit on your keyboard when it's connected here. Then the leader, then every follower.

    $ logitech-flow-kvm flow-server 1 08F5F681 F262458A
    Listening on 0.0.0.0:24801
    3

    Connect the other machines

    Each with its own host number. The first time, the client prints a code and the server asks for it — after that they reconnect on their own.

    $ logitech-flow-kvm flow-client 2 10.224.224.120
    Pairing code: 481902 — enter this on the server

    Before you start

    Questions worth answering first.

    Does this work with my devices?

    You need Logitech devices that can pair with more than one host and connect through a Unifying or Bolt receiver — an MX Keys or MX Keys Mini with the 1/2/3 keys is the ideal leader, and MX Master or MX Anywhere mice make good followers. The tool talks HID++ to the receiver directly, so it needs read and write access to the matching /dev/hidraw device.

    How is this different from Solaar?

    Solaar is a full Logitech device manager for Linux, and its documentation of the HID++ protocol is what made this possible. This tool does one thing instead: keeps a group of devices on the same host, across machines, and moves the clipboard with them.

    How is this different from Barrier or input-leap?

    Those share one machine's mouse and keyboard with another over the network, so your input travels as packets. Here nothing about your input changes — your devices keep their own wireless link to whichever host they're on, and only the instruction to switch crosses the network.

    Do the other machines have to be Linux?

    The host running the server does. Clients run wherever Python 3.10+ runs and can reach a receiver — and a machine with no receiver of its own still benefits, since the leader's arrival is what drives everything else.

    Can I run it as a service?

    Yes. Run it non-interactively and the terminal display gives way to plain log lines, which is what you want under systemd. Either way, everything is also written to a rotating log file — 5 MB apiece, five backups deep — in your platform's standard log directory.

    Stop pressing the same button twice

    Give your Linux box its host keys back.

    $pip install logitech-flow-kvm View on GitHub →