Also, it may be niche but I had the same thought in the past about this way being the solution for slow switching. Awesome to see someone did all of the work already. Now I just need to find someone selling it on AliExpress so that I won’t even have to lift a finger to have one :D
Input leap was forked two years ago and the Readme still says "we hope to have a release ready very soon", which doesn't sound very hopeful. Too bad, Synergy was always a very useful project.
This announcement was only added to the README in early October[1]. In the meantime you can of course compile it yourself/grab a build from GH actions. I'm sure they would appreciate the testing, especially leading up to release :-)
I haven’t tried Synergy. barrier and input-leap were useless for me as they don’t capture “ctrl-alt” so my crucial “open a terminal” shortcut always opens it on the primary computer. Maybe Wayland is to blame?
You might have to change the modifier keys on the server config. I have a Linux server and MacOS client, a few minutes trial and error fiddling those settings until I got it all working.
Synergy has some bugs they just don't seem to care about. For instance, if you use a macOS host, the calculation of where your cursor on a Windows/Linux client uses the macOS acceleration curve, but the actual movement of cursors does not. So you end up switching back unintentionally trying to do things on the third of the windows screen closest to your host.
I have a saying “nothing sucks like synergy but they all do”. Not a single one of these technologies is reliable. But synergy is the one that has multiple times made even the connected keyboard stop working to the point where the machine needs to be power cycled to become responsive.
Thing is, I used the old OSS Synergy some 15-20 years ago, across Linux, Windows and I believe OSX as well (although I am not 100% certain about the latter). It worked absolutely flawlessly for several years while I used it and I loved it dearly. Fast forward (I had no need for a software kvm until last year) and I use Barrier now and it barely works. Autostart on Windows doesn't work at all, the installer failed to create certificates so nothing worked until I created them manually and sometimes the keyboard dies completely or exhibits frustrating bugs which only a reboot can solve. It's baffling how this used to work so well and is barely usable 15+ years later.
Totally agree. Back in 2004 I used it daily to bridge between two PCs running on one network, behind a firewall with one running the synergy server and the other the client, and a laptop running the client. Both PCs were under my desk with my laptop and two screens from the PCs on top. I had one keyboard and mouse across three screens powered by three computers and could seamlessly not only move my mouse across all 3, but also copy paste text across too. I believe a newer version (which may never have materialized before it went closed source) was going to have drag n drop across too. It was so easy to work with and remember it very fondly. It was magic stuff.
It works until it doesn't. And clipboard sharing is "essential" to me. Wrt/ clipboard sharing, yes, I could work around not having it available but that's 50% of why I use it in the first place and as I said everything worked absolutely as expected in the olden days. Yet another tech that has only gotten worse over the last decate, similar to the shit show that instant messaging has become. I miss the times where I could run a well-integrated multi-protocol chat client on all of my computers regardless of OS which required basically no RAM or CPU usage to chat with all my contacts regardless of what protocol they used. Now it's mostly Electron crap eye candy taking too much resources by a factor of >100 and way too much screen estate. It's simply not practical anymore. "Things were better before" is in 99% of cases a factually untrue, romanticized view on the past, but sometimes it's objectively true, and in rare cases like IM there are serious negative effects on my personal quality of life that I cannot fix on my end because the system itself is broken.
The fact that TLS connection encryption is gated behind the $60 edition (vs the $30 personal edition) completely turned me off it. Not a fan of basic security being paywalled.
Does Synergy work with multi monitor setups? I've enjoyed Barrier but it doesn't work when any of the machines have multiple displays so I've ditched it for now.
Synergy works with multi-monitor (for me at least). I've been using it for close to two decades. Outside of the Linux kernel, it is probably the single piece of software I've used the longest.
I use barrier across 4 monitors and three devices, works fine.
Nowadays you have to look at the logs and search through a pile of github issues to find the right solution to make it work, but once it's up it's pretty trouble free.
Only real pain point is clipboard sharing, which works for small clipboards, but, copy too much text and it takes forever to switch.
I bought 4 USB hubs just to switch the keyboard and mouse, it's just so annoying how most devices are so terrible. Randomly you have to physically detach the hub several times a day. If you plug webcams and/or USB mics, it only gets even worse.
I'm using Synergy software and it works well, but I still want a proper KVM that can allow for webcams, mics, audio, etc. Features like moving only a group of plugged devices via keyboard shortcuts.
I want to share keyboard, mouse and monitor between a PC and a MacBook. A KVM with DP+USB on one side and Thunderbolt on the other doesn’t seem to exist.. I feel like this has to be a common use case :(
I know I could break out on a dock first, but I have a particularly high-res monitor which most of the docks baulk at, or only support at 30Hz
I know it's suboptimal, but can't you do the split on the macbook? The TB port should output pure DP, so you plug that on the DP-in on the KVM. You plug a second USB-only cable that goes to the KVM USB in.
Closest I’ve found is manually switching the machine plugged into a TB 4/USB 4 dock (CalDigit TS4), with the cables for each computer being managed when unplugged by a magnetic cable pad[0].
It’s a bit clunky but not too bad once you have a feel for swapping cables and is less flaky than the more affordable KVMs I’ve tried. Gets me a nicer port loadout to share between machines too, and can be expanded to support as many computers as you’ve got space and patience for.
This does however assume all machines involved can handle outputting a display signal via Thunderbolt or USB C. Not too much of an issue with laptops but it’s still unusual for desktop PCs to have their GPUs hooked up to support TB/USB alt modes.
I even got TB4 signal through one of those USB-C "magnetic" adapters [0], I figured that this would shift wear from repeated plugging from the expensive device to a cheap adapter.
Super annoying when you accidentally disconnect and then the entire device tree has to reboot, but on the hub side, accidental disconnect might be much less of a problem (I use it at the laptop side, to dock with different screen setups)
I'm in the same boat as you. After trying and returning a few KVMs, I found a decent USB-only KVM switch [0] that works with 4K HDR + PD devices (I think it just electronically connects and disconnects cables), it works amazingly with switching between Macs, but my PC GPU doesn't have USB output, just DP. I have bought a Thunderbolt PCI-E card (ASUS ThunderboltEX 4), it worked, but only turned on once Windows has fully booted, so I returned it too. I'm considering buying an USB-C signal muxer [1] but they are a bit too expensive for my liking. I guess there isn't enough market to produce them and sell them at reasonable price - most people, including myself, just accept having to switch video input separately from USB KVM.
I have a compromise setup but it seems to work ok. Two MacBooks, one pro, both M1.
One is plugged into a TS3+. The other is plugged into a USB-C dock to get Ethernet and a USB-A input, but I don't use the video out. Instead, I run a Thunderbolt to DP cable from a second TB port to the KVM switch.
I use this KVM ordered on Amazon: Cable Matters USB 3.0 KVM Switch DisplayPort 1.4 for 2 Computers with 8K@60Hz
Pros: preserves 5K@60Hz for both machines, switches keyboard, mouse, and a webcam just fine.
Cons: no hot key switching, another remote to lose, no EDID emulation so the computers fall asleep when they're not active, switching takes a bit. Sometimes a machine doesn't wake up when I switch back to it so I have to fiddle with cables, but that's been pretty rare.
Most monitors have 2-3 inputs. Mine has a desktop, a laptop, and occasionally my phone attached to it, using HDMI, DP, and another DP / USB-C respectively.
Unless you switch really often and want subsecond switching time, three's no need to even use a KVM to switch the monitor.
Even at twice per day switching using monitor controls would drive me nuts. The buttons, the menu, the delays, blanking and disconnects. By then I already forgot why I was even switching
Most of the time the reason for a KVM is wanting to switch the monitor, mouse and keyboard, and possibly other devices (e.g. I want to use the same webcam that remains in the same position) at the same time.
Switching just the monitor isn't really the use case they address.
I used one with 4x dual dp switching at home to run desktop with linux, pcie passthrough gaming vm on same machine and my work laptop via a dell thunderbolt dock connected to it.
Works extremely well, with modern features tested for (gsync, high refresh etc etc).
edit: one thing to note is that you need really good quality cables, so don't cheap out
It was pci passthrough so the vm had a dedicated gpu, usb controller and nvme drive which I wired to the hardware KVM as extra inputs.
There are other options like https://looking-glass.io/ , but I preferred having this option, which is like having 2 computers if there's enough resources to share to the gaming guest (cpu pinning + huge pages).
I share two monitors and audio equipment between a desktop and a windows laptop (dell XPS) using a "dumb kvm" that wrangles a few USB outputs and two DisplayPort inputs. the laptop only has USB-C output so it connects to a fancy thunderbolt dock borrowed from a friend which then goes to the KVM. I have a third monitor only connected to the desktop with a laptop stand in front of it for a third screen
It takes a couple seconds to switch but otherwise works flawlessly unlike my previous solution of shitty dongles, switching dual input monitors, and moving a usb hub input cable between machines. I also considered rebuilding the desktop to have a thunderbolt output and buying a thunderbolt switching KVM but I couldnt make it work
> I want to share keyboard, mouse and monitor between a PC and a MacBook. A KVM with DP+USB on one side and Thunderbolt on the other doesn’t seem to exist.
It does if you use the built-in KVM in a recent Dell Ultrasharp display, and change Thunderbolt to USB-C.
My setup is a MacBook Air plugged into the USB-C port, a Windows PC plugged into the Displayport/USB port. Mouse and keyboard are plugged into the display.
I switch inputs via a StreamDeck. The StreamDeck just sends a key command; on macOS, BetterDisplay handles input switching, and on Windows, the Dell Display Manager app does the job.
Switching is a touch slower than I'd like, but beyond that, it's flawless.
No affiliation with them except that I've got one their KVMs (not an USB-C version, though) myself and it's been quite reliable (only infrequent accidental hiccups, nothing unplugging the power for a second can't solve), much better than my previous pile of hacks juggling monitor inputs via DCI and using USB switches for the peripherals.
The best setup I've found is what I lucked into at work. It's a Benq monitor (32", 4k) that does the KVM itself. There's a couple of Displayport inputs, each if which has a couple of USBs with it, as well as a USB C which is both peripheral and display input (and decent power output). Then there's a little pick on the desk for switching.
The nice thing is that it continually presents a monitor to all the inputs even when they're not being displayed. Means you don't get the flickering as Windows sorts itself out and so a much faster and more seamless switch.
I've been very happy with my tesmart dual DP 4 port KVM. The only limitation I have is that it's only usb 2 host controller, so a lot of higher speed devices like some webcams can't get switched using it.
LAlso if you need Apple products in the mix, you have to use two physical usb3 cables from the mac just to distinguish the two display channels because apple hates MST for reasons (another reason to hate their arbitrary bs).
I have a TESmart and the other problem is that the autoswitch doesn't work with custom keyboards, as the KVM needs to emulate the HID and doesn't like a keyboard that shows as a hub.
I have an ATEN usb KVM that allows anything to be plugged in. I have an USB drive to quickly transfer files but works with anything USB powered. It's expensive if you go for USB 3+, DP, etc but cheaper ones work also just for USB stuff.
One big drawback, at least for me, some mice and keyboards that have special keys, do not work 100%.
I recently bought the 32" 6k monitor from Dell. It has its own thunderbolt 4 hub and kvm and it works flawlessly! It gets upstream from my Mac from a single thunderbolt 4 cable and from my PC from an HDMI 2.1 and usb3 10gbps. On the monitor I have connected the Ethernet cable and my keyboard/mouse that switch to the correct machine with a keyboard shortcut or from the monitor osd.
I can even see both machines on my monitor simultaneously using the PiP capability.
GP was indicating monitor switching, which your link doesn’t do. The equivalent of TFA for monitor switching would be full KVM switching when the mouse crosses the outer screen edge.
I'm referring to the fact that it maintains an independent connection to each monitor in order to facilitate fast switching. Almost no other DP switches do this.
Is there some documentation about this somewhere? I actually own both level1techs DP 1.4 KVM 4-computer/1 monitor switch and that new USB KM switch, so I'm familiar with their products.. but I'm not aware that their KVM does anything special other than support high response rates (where most KVM's only do 60hz) and passthrough USB properly.
I'm pretty sure I heard it in either an LTT or Gamer's Nexus video - most cheap switches simulate unplugging the cable from one computer and then plugging it into the other, so the monitor has to detect the new computer and negotiate and etc, usually takes a couple seconds for your desktop to appear. The Level1Techs one maintains an independent signal to each computer so that the monitor can start receiving a video stream immediately.
The video in the Readme is well worth watching. I expected some kind of clicking to enable the kvm and switch devices. This is moving your mouse and keypresses across devices instantly. While I like Synergy, a hardware solution would work without much software and potentially much configuration.
I recently had the idea of making similar hardware with ESP32 (some of them has USB hardware). You may lose mouse acceleration, but many do not like this to begin with, so it's fine.
Does absolute mouse work correctly when two systems have very different (total) resolution? For example, one is a laptop with a single screen, and another one is a desktop with three screens.
How does absolute mouse work? The mouse hw just reports delta x/y and has no idea how the corners of your screen map to your desk surface. So it sounds like special hw. or very frequent recalibration of “corners” after moving mouse when machine is off or lifting+moving (which would essentially be what would happen when using it on machine 2)
It is not putting your mouse itself in absolute mode (only graphics tablets really operate in absolute mouse mode). It's just outputting absolute mode reports to the host.
Absolute mouse HID report has a logical/physical min/max, not just delta.
Regardless of size of screen, min/max correspond to the boundaries in absolute mode.
So it's just keeping track internally of the incremental relative accumulation of your mouse as you move it, and i assume, when you hit the min/max, swapping screens.
I assume it's reporting a high enough min/max resolution to make this not happen crappily.
The polling rate on mice is usually only 125hz (8ms), so it has plenty of time to handle the input.
Even "gaming" mice are usually only 1000hz (1ms).
I would guess, looking at it, that it takes a few microseconds to handle the mouse moves, max.
As I understand GPIO speed is limited and below usb 2.0 speed if I am not mistaken. So what is the maximum speed of this setup? How ‘gaming” gaming mouse can be?
From a quick google search (to make sure I'm not just stating my memories, but actual facts) the RP2040 can toggle a GPIO at about 66MHz (via its PIOs. Otherwise a bit slower, and using more CPU). USB 1 is 1.5 or 12Mbps, so you should have no issues even if you bit bang it.
Despite the USB protocol overhead, it is plenty even for a gaming mouse. Pretty sure there's no point polling it at above 1 kilohertz or so.
You are talking transfer rate but these are polling in most cases. The gpio can easily handle 1000hz. It can 66 thousand times that speed in fact.
The amount of processing they do is negligible and probably amounts to a few microseconds delay at most.
Even with a non polling mouse there would be no point in reading the result more than a thousand times per second. If you move the mouse 3 inches per second (quite fast) and you only process 1000 reports a second you would still achieve a resolution of 0.003 inches.
Absolute mouse "works" in any situation. You are responsible for reporting the physical and logical min/max values for the mouse. The host translates these into screen coordinates.
So if you report the max x/y as 32767, and the current x/y as 32767, the host will translate it to the corner, regardless of size of screen.
> Ever tried to move that YT video slider to a specific position but your mouse moves too jumpy and suddenly you are moving your hand super-carefully like you're 5 and playing "Operation" all over again?
On YouTube specifically, you can scrub through a video frame-by-frame using the , (comma) and . (period) keys, no custom hardware required. :-)
That's nice. Btw, I'm curious, what kinda mouse do you guys use that makes you hold your breath while you scroll? I believe mice these days are super precise and works pretty well.
"fine grained" is relative, but you can go forwards/backwards 10 seconds in YouTube Android by doubletapping to the left/right of center on a video. If it's paused, doubletap to the left/right of the play button. It should also work on iOS, but I don't have an iPhone so can't confirm.
I use iOS and can confirm that double tap on left or right side works to jump forward backward there too. I often use it when I watch a video and I miss what was said so I jump back a bit and watch again.
1. There is enough room. Works fine for media controls where the bar is near the bottom of the screen, but not for sliders in most other places
2. The control is not close enough to the bottom of the screen for swipe up to trigger the multitasking action
There are many other reasons to have fine-grain control for sliders and imo “hold longer for finer control” works in more places than “slide up for finer control”
Seriously, if any VC is reading this, get this man some funding to make it a real project. Even at double or triple what it costs, it's still cheaper than any other commercial competitor.
This. So much this. It's also really cool as a 'niche' project, and felt even approachable to someone like me who hasn't ever done more soldering than his first PS1 and a modchip.
If it gets really popular here on hacker news won't be long before chinese devices based on it start appearing. Or if someone is willing to invest $10-20k they could have devices ready to sell in less than 2-3 weeks.
> 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.
Most KVM switches have a keyboard shortcut (mine is scroll lock, scroll lock, 1/2). Mine also supports the mouse based switching but it's unusable because to work it needs to emulate a mouse with zero acceleration. Also this doesn't switch video.
I've had the same idea tbh but the inability to switch video and the software complexity put me off. A KVM switch is better (except the cost).
with all the people switching USB-devices collected here: I also have an USB-switch to handle work/private machines (as well as the odd usually headless VM).
Oddly, there is no delay on switching with Windows. Devices are registered instantly and I can type. Linux needs 1-2 seconds... and I just don't know why. Anyone has an idea what to tune?
Why not use Remote Desktop? I work on multiple computers on one laptop and if your network is fast enough it’s silky smooth. For linux I use VNC and it works well but isn’t as nice as RDP.
I have used Remote Desktop through private VPNs and have been able to connect to my workstation from cities away and performance has been good enough to do video editing and some 3D work.
Because that doesn't do the same thing. The point is to have two monitors connected to separate machines, and use the same mouse and keyboard to control both of them.
The point is you don't always want both PCs dual screened. I have my setup prepared for both (using Synergy and a KVM switch): Sometimes I need the screens to show each separate machines desktops, but want to be able to quickly switch keyboard/mouse between them. Sometimes I want one machine to occupy both.
For the latter a hardware KVM switch is vastly superior to RDP. For the former, no RDP server/client I know of provides a solution.
I'm still not sold. RDP does all the configs you've mentioned, dual screen, single screen, being able to see both screens at the same time plus there is the very nice feature of being able to copy paste between computers and peripheral passthrough.
I've not seen an RDP client that provides the capabilities you're describing without e.g. having one of the machines control both screens and putting an RDP client full-screened on one of them, and because of the stutter and CPU overhead I get even with a hardwired network connection that's not a viable option.
I'd be overjoyed if there was a reliable way to do this, but it will need to have each machine controlling it's own screen and pass mouse events between them, similar to how synergy does - having one or both of them rendering desktop of the other is way too laggy, even hard-wired.
I also need a solution where I can disconnected either machine at any time without disrupting anything, which rules out a solution where one machine controls both screens, or where the keyboard and mouse is only physically connected to a single machine.
If there are any RDP clients which can work together to pass mouse events between them the way Synergy or this hardware hack does, I'd be overjoyed (but neither will replace my KVM switch for the occasions I want one machine to control both screens)
> plus there is the very nice feature of being able to copy paste between computers and peripheral passthrough.
Synergy also provides the copy-paste (though I'd actually prefer not to be able to, as I use it between a personal and work machine I don't want to pass more than the bare minimum of data between), and the KVM switch provides the peripheral passthrough.
Good to note that it doesn't require client software to detect edges.
> To get the mouse cursor to magically jump across, the mouse hid report descriptor was changed to use absolute coordinates and then the mouse reports (that still come in relative movements) accumulate internally, keeping the accurate tally on the position.
So it works like synergykm / barrier, without clipboard features and without client software.
This was a concern for me, that is why i've used Synergy over VPN and it worked quite well. It also works on networks where you can't reach the other pc's that way.
I initially used synergy at work between two computers and a coworker teased me about the security implications, so I found it very little effort to pipe over an SSH tunnel
Can you share some info about that? How is it different from synergy business/enterprise where it encrypts your data? (aside from owning the encryption)
I don't know how the business edition works, but how to set up SSH tunnels is easily found on Google search, and you'd just forward the port the server listens on, and connect to localhost on the client on the same port. Very simple, and at least as secure as SSH is proven encryption.
I doubt the reason for avoiding connection is a technical barrier but rather a security one. For example, I prefer to keep my personal and work laptops completely airgapped.
Would that completely break down if your cursor is moved by something other than the mouse? (An automation script, a game that locks the cursor to the middle of the screen, etc.)
I think that's to prevent the cursor from hitting the edge of the screen and the player being unable to turn further (though I'm not certian if every game does it this way)
Wow!! Very cool! I tried to use a KVM to switch from my personal macbook, work macbook, and gaming computer.... the hardware was awful, I had just ended up manually switching. The gaming computer had its own keyboard&mouse, so it was just switching the monitor (and there would be horrendous latency).
Anyway, I think this space has tons of low hanging fruit for improvement. And so many KVM products are insanely priced, and they're not even good.
One of the coolest hack projects I've seen in some time. Looking at the schematics took me back to my electronics technology class, learning the value of heat syncs and accidentally setting amps on fire :,)
Having an accompanying explainer article or video is something I'd pay/donate for, just out of sheer curiosity of the work involved.
Thank you so much for the kind words. I'm hardly an expert but I will try to write something when I find some extra cycles. It was done to fix a problem I was seeing on a daily basis, but then I figured out it might help others (also gave me an excuse to practice kicad and 3d modelling).
This been one of my biggest frustrations - I also use a USB 3.0 switch to toggle mouse & keyboard input between two PCs. I'll be on a teams call meeting where I don't have a lot to say and then someone mentions my name or messages me. I'm suddenly fiddling around looking to find the button to switch inputs back to the PC running teams. I thought about wiring up a ESP32 or Rpi Pico W with couple of optoisolators to the button pins on the USB switch. Then expose a http endpoint to simply toggle inputs between two machines via autohotkey script + keyboard shortcut. Only problem was that I couldn't come up with a way to determine which input is active. So gave up on the idea. But I like this solution.
Have you looked into a headset compatible with Teams that has a mute button? My work provided a Logitech branded headset that has volume, hang up, and mute buttons on the cord, which makes it much easier to unmute myself while multitasking.
Just responding to the clunky and slow switching that is available. I have this wireless DELL mouse+keyboard set that switches quite easily and fast. Supports up to three devices (dongle + 2x BT). Dedicated key for tge switch, wirelss is instant, BT takes roughly 2 seconds.
I can't recommend it though, as the mouse scroll wheel broke pretty quickly, and it's apparently a common problem. Can't "warranty it" individually. I do like the keyboard so far.
Some dell monitors also allow switching video input via keyboard + mouse using the Dell Display Manager utility. You can set custom hotkeys for each input. I have a dell monitor as my daily driver and its my central monitor in a multi display setup simply because of the display input switching capability. Beats having to buy a expensive DisplayPort KVM.
Its about 2 seconds. Although, there is slightly longer delay when switching from a dell laptop connected to the monitor's HDMI input than the PC connected to the displayport input. I suspect it has something to do with the dell laptop going through a thunderbolt4 dock and outputting via HDMI.
One program runs on a Linux desktop and listens to input events from the Linux input subsystem (evdev). When you press a specific key, it will start consuming all events and sending them over USB serial to a RPI Pico. Pressing the key again will toggle back into passive listening mode.
The RPI Pico is programmed to receive Linux evdev events over serial, translate them into USB HID events and send them to another Windows PC.
The end result is a KM switch that switches instantly between a Linux PC and a PC running an OS of your choice.
As a hardware noob, needing only 2 wires was a huge relief and I think this is a great starter project for other hardware noobs.
Both programs were < 100 LOC. There are tons of Rust crates and python packages to listen to Linux evdev. The program on the Pico was quite simple too, basically just a loop with a big switch statement and there are Rust crates to send USB HID events. You can use COBS to send stuff over serial without worrying about framing.
Ultimately I never ended up open sourcing it because of some USB serial bugs (it would not reconnect properly to the Linux desktop after getting disconnected). Not sure if it was because of Linux or the Pico. I still use it, the bugs aren't a problem because I never disconnect the wires.
I also specifically left out the absolute mouse feature since I play a lot of FPS games and it wouldn't work with those. I have the switch key bound to a button on the side of my mouse anyway so I can switch systems without even touching my keyboard.
That's an awesome idea, man. I wish I thought of that.
I learned about about that screen hopper project only yesterday, and it just confirmed my theory - whatever I try to do, somebody smarter than me already made, only better, smoother running and with nicer features :)
I play no games whatsoever so absolute coords would be perfectly fine, but one of the items on the to-do list is to make it configurable.
IMO the hardest part of open source is documentation and packaging so hats off to people like you who take that final step from tinkerer's project to open source! Also props to you for the galvanic isolation and actually designing a circuit lol.
I'm sure there's even more keyboard/mouse switching projects out there, there's just no good acronym or search query to find them. You could search for "KVM" but it's just dominated by PiKVM. We should really standardize on something for the SEO.
Your project is practically an example for Teensy boards. I made this exact gadget 10 years ago :)
Ultimately my friend was explaining his 'mouse jiggler' vbscript and I thought 'how can I make this a hardware version' this led to a design and once you have a design it is easy to query google for design hints at the component level "usb hid microcontroller" "usb passthrough [teensy|arduino]" "usb init host controller [teensy|arduino]" "mouse path [teensy|arduino]" etc etc
Many FPS games move the camera by listening to relative mouse movements and moving your camera a corresponding amount, while keeping your cursor hidden and in the center of the screen. Absolute movements cause different issues depending on the particular game.
I am not familiar with HID but I assume there is a way for the computer to provide feedback to the input device about the cursor’s current position. If that’s correct, it could probably be done with relative movements just fine.
I'm not very versed in gaming, so have very little knowledge about what games want. It should be possible to implement a relative mode too and some way to switch between the modes so when working use absolute, when playing use relative.
On Windows, you have the option of using a tool named Mouse Without Borders, which was developed by Microsoft Garage and is now part of Windows PowerToys.
How do modern KVMs address OSes thinking an HDMI or USB device is unplugged when switching? I’ve never found a solution that actually works because of this issue.
It seems this only addresses KB/Mouse by keeping them enumerated on the host PCs at all times and just sending no inputs to one. So that feels fairly solved. But what about monitors?
Wow this is awesome. I use a KVM switch currently and it takes a solid 2-3 seconds and for that reason I find myself usually just SSH'ing into the other computer and having a tmux session instead.
I've been using Synergy with my mac and windows desktop, and in the past I've used Input Director between two windows machines.
It was good enough to game on LAN parties.
284 comments
[ 3.4 ms ] story [ 273 ms ] threadAlso, it may be niche but I had the same thought in the past about this way being the solution for slow switching. Awesome to see someone did all of the work already. Now I just need to find someone selling it on AliExpress so that I won’t even have to lift a finger to have one :D
https://symless.com/synergy
[0] https://github.com/debauchee/barrier
[1] https://github.com/input-leap/input-leap
[1]: https://github.com/input-leap/input-leap/commit/78ca8f1ef7b6...
There is an open source fork that branches off version 1.9: https://github.com/debauchee/barrier#what-is-it
Way too much BS to get it running though.
Nowadays you have to look at the logs and search through a pile of github issues to find the right solution to make it work, but once it's up it's pretty trouble free.
Only real pain point is clipboard sharing, which works for small clipboards, but, copy too much text and it takes forever to switch.
I'm using Synergy software and it works well, but I still want a proper KVM that can allow for webcams, mics, audio, etc. Features like moving only a group of plugged devices via keyboard shortcuts.
KVM users are underserved for sure.
100%
I want to share keyboard, mouse and monitor between a PC and a MacBook. A KVM with DP+USB on one side and Thunderbolt on the other doesn’t seem to exist.. I feel like this has to be a common use case :(
I know I could break out on a dock first, but I have a particularly high-res monitor which most of the docks baulk at, or only support at 30Hz
It’s a bit clunky but not too bad once you have a feel for swapping cables and is less flaky than the more affordable KVMs I’ve tried. Gets me a nicer port loadout to share between machines too, and can be expanded to support as many computers as you’ve got space and patience for.
This does however assume all machines involved can handle outputting a display signal via Thunderbolt or USB C. Not too much of an issue with laptops but it’s still unusual for desktop PCs to have their GPUs hooked up to support TB/USB alt modes.
[0]: https://www.amazon.com/dp/B08XYZFM7D
Super annoying when you accidentally disconnect and then the entire device tree has to reboot, but on the hub side, accidental disconnect might be much less of a problem (I use it at the laptop side, to dock with different screen setups)
[0] like this, https://www.amazon.com/dp/B0BV7BPVCL/ but ordered from the Chinese site
[0] https://www.amazon.co.uk/dp/B0BN5D2NXX
[1] https://www.amazon.co.uk/dp/B0732W9DG8
Anker 553 USB-C Docking Station (KVM Switch): - https://www.anker.com/products/83k2?variant=42726922125462 - https://www.amazon.com/Anker-Docking-Station-Desktop-Display...
iDock C10 KVM Switch Docking Station - https://www.avaccess.com/products/idock-c10/
One is plugged into a TS3+. The other is plugged into a USB-C dock to get Ethernet and a USB-A input, but I don't use the video out. Instead, I run a Thunderbolt to DP cable from a second TB port to the KVM switch.
I use this KVM ordered on Amazon: Cable Matters USB 3.0 KVM Switch DisplayPort 1.4 for 2 Computers with 8K@60Hz
Pros: preserves 5K@60Hz for both machines, switches keyboard, mouse, and a webcam just fine.
Cons: no hot key switching, another remote to lose, no EDID emulation so the computers fall asleep when they're not active, switching takes a bit. Sometimes a machine doesn't wake up when I switch back to it so I have to fiddle with cables, but that's been pretty rare.
Two monitors. Both the mac and pc are connected to each monitor. I just switch inputs as needed.
It’s not as good as one button press but heck i can monitor something in both systems if I want
Unless you switch really often and want subsecond switching time, three's no need to even use a KVM to switch the monitor.
Switching just the monitor isn't really the use case they address.
I used one with 4x dual dp switching at home to run desktop with linux, pcie passthrough gaming vm on same machine and my work laptop via a dell thunderbolt dock connected to it.
Works extremely well, with modern features tested for (gsync, high refresh etc etc).
edit: one thing to note is that you need really good quality cables, so don't cheap out
But how does the KVM come into play for the Gaming VM when it is on the same host?
There are other options like https://looking-glass.io/ , but I preferred having this option, which is like having 2 computers if there's enough resources to share to the gaming guest (cpu pinning + huge pages).
It takes a couple seconds to switch but otherwise works flawlessly unlike my previous solution of shitty dongles, switching dual input monitors, and moving a usb hub input cable between machines. I also considered rebuilding the desktop to have a thunderbolt output and buying a thunderbolt switching KVM but I couldnt make it work
desktop - kvm - fancy dock - laptop Full diagram: https://imgur.com/a/ah54fjd
It does if you use the built-in KVM in a recent Dell Ultrasharp display, and change Thunderbolt to USB-C.
My setup is a MacBook Air plugged into the USB-C port, a Windows PC plugged into the Displayport/USB port. Mouse and keyboard are plugged into the display.
I switch inputs via a StreamDeck. The StreamDeck just sends a key command; on macOS, BetterDisplay handles input switching, and on Windows, the Dell Display Manager app does the job.
Switching is a touch slower than I'd like, but beyond that, it's flawless.
No affiliation with them except that I've got one their KVMs (not an USB-C version, though) myself and it's been quite reliable (only infrequent accidental hiccups, nothing unplugging the power for a second can't solve), much better than my previous pile of hacks juggling monitor inputs via DCI and using USB switches for the peripherals.
The nice thing is that it continually presents a monitor to all the inputs even when they're not being displayed. Means you don't get the flickering as Windows sorts itself out and so a much faster and more seamless switch.
LAlso if you need Apple products in the mix, you have to use two physical usb3 cables from the mac just to distinguish the two display channels because apple hates MST for reasons (another reason to hate their arbitrary bs).
I can even see both machines on my monitor simultaneously using the PiP capability.
Does absolute mouse work correctly when two systems have very different (total) resolution? For example, one is a laptop with a single screen, and another one is a desktop with three screens.
Absolute mouse HID report has a logical/physical min/max, not just delta. Regardless of size of screen, min/max correspond to the boundaries in absolute mode.
So it's just keeping track internally of the incremental relative accumulation of your mouse as you move it, and i assume, when you hit the min/max, swapping screens.
I assume it's reporting a high enough min/max resolution to make this not happen crappily.
The polling rate on mice is usually only 125hz (8ms), so it has plenty of time to handle the input.
Even "gaming" mice are usually only 1000hz (1ms).
I would guess, looking at it, that it takes a few microseconds to handle the mouse moves, max.
Despite the USB protocol overhead, it is plenty even for a gaming mouse. Pretty sure there's no point polling it at above 1 kilohertz or so.
Even with a non polling mouse there would be no point in reading the result more than a thousand times per second. If you move the mouse 3 inches per second (quite fast) and you only process 1000 reports a second you would still achieve a resolution of 0.003 inches.
So if you report the max x/y as 32767, and the current x/y as 32767, the host will translate it to the corner, regardless of size of screen.
On YouTube specifically, you can scrub through a video frame-by-frame using the , (comma) and . (period) keys, no custom hardware required. :-)
Once I was fast and precise, with sharp close vision. Now I'm not.
Enjoy your capabilities while you have them. Decline awaits us all.
https://www.majorgeeks.com/content/page/youtube_double_tap.h...
YT also has Premium Controls whcih is a widget but I think it's experimental and not on mobile yet.
1. There is enough room. Works fine for media controls where the bar is near the bottom of the screen, but not for sliders in most other places
2. The control is not close enough to the bottom of the screen for swipe up to trigger the multitasking action
There are many other reasons to have fine-grain control for sliders and imo “hold longer for finer control” works in more places than “slide up for finer control”
It's not really "slide up" its just a very tiny motion, maybe less than 1cm of travel to enable it.
We already have long press and 3D Touch events via the "hold longer" action, which might work, but I've had no real issues with the YT solution.
When your slider is not controlling video playback
YT implementation turns the fine-tuning seekbar into a series of thumbnails to help find where you are.
Stuff like this obviously doesn't make sense for controlling something that is not a video.
I do like some tools which let you fine-control slider once you have click-and-held by scrolling the mouse wheel, but no solution here for mobile.
This works in my modded old version of the YouTube app; Alphabet might have removed it in newer versions.
So yeah, sometimes niche markets can be profitable. And it doesn't have to be millions of dollars in VC money obviously to be invested.
Can you elaborate on this for someone unfamiliar with production? How one come up with the number and such time estimation?
Most KVM switches have a keyboard shortcut (mine is scroll lock, scroll lock, 1/2). Mine also supports the mouse based switching but it's unusable because to work it needs to emulate a mouse with zero acceleration. Also this doesn't switch video.
I've had the same idea tbh but the inability to switch video and the software complexity put me off. A KVM switch is better (except the cost).
[1]: https://www.amazon.co.uk/dp/B08GBXTW2Q?ref=ppx_pop_mob_ap_sh...
Oddly, there is no delay on switching with Windows. Devices are registered instantly and I can type. Linux needs 1-2 seconds... and I just don't know why. Anyone has an idea what to tune?
Security: remote desktop requires the machines to be on the same network.
Performance and compatibility: hardware accelerated rendering often does not play nice with remote desktop.
For the latter a hardware KVM switch is vastly superior to RDP. For the former, no RDP server/client I know of provides a solution.
I'd be overjoyed if there was a reliable way to do this, but it will need to have each machine controlling it's own screen and pass mouse events between them, similar to how synergy does - having one or both of them rendering desktop of the other is way too laggy, even hard-wired.
I also need a solution where I can disconnected either machine at any time without disrupting anything, which rules out a solution where one machine controls both screens, or where the keyboard and mouse is only physically connected to a single machine.
If there are any RDP clients which can work together to pass mouse events between them the way Synergy or this hardware hack does, I'd be overjoyed (but neither will replace my KVM switch for the occasions I want one machine to control both screens)
> plus there is the very nice feature of being able to copy paste between computers and peripheral passthrough.
Synergy also provides the copy-paste (though I'd actually prefer not to be able to, as I use it between a personal and work machine I don't want to pass more than the bare minimum of data between), and the KVM switch provides the peripheral passthrough.
> To get the mouse cursor to magically jump across, the mouse hid report descriptor was changed to use absolute coordinates and then the mouse reports (that still come in relative movements) accumulate internally, keeping the accurate tally on the position.
So it works like synergykm / barrier, without clipboard features and without client software.
Very nice.
Anyway, I think this space has tons of low hanging fruit for improvement. And so many KVM products are insanely priced, and they're not even good.
Also how the ADuM1201 works is very cool!
Having an accompanying explainer article or video is something I'd pay/donate for, just out of sheer curiosity of the work involved.
I can't recommend it though, as the mouse scroll wheel broke pretty quickly, and it's apparently a common problem. Can't "warranty it" individually. I do like the keyboard so far.
My own version of this consists of two programs.
One program runs on a Linux desktop and listens to input events from the Linux input subsystem (evdev). When you press a specific key, it will start consuming all events and sending them over USB serial to a RPI Pico. Pressing the key again will toggle back into passive listening mode.
The RPI Pico is programmed to receive Linux evdev events over serial, translate them into USB HID events and send them to another Windows PC.
The end result is a KM switch that switches instantly between a Linux PC and a PC running an OS of your choice.
Epic wiring photo: https://ibb.co/m0zhzgz. I used another Pico as a USB serial adapter.
As a hardware noob, needing only 2 wires was a huge relief and I think this is a great starter project for other hardware noobs.
Both programs were < 100 LOC. There are tons of Rust crates and python packages to listen to Linux evdev. The program on the Pico was quite simple too, basically just a loop with a big switch statement and there are Rust crates to send USB HID events. You can use COBS to send stuff over serial without worrying about framing.
Ultimately I never ended up open sourcing it because of some USB serial bugs (it would not reconnect properly to the Linux desktop after getting disconnected). Not sure if it was because of Linux or the Pico. I still use it, the bugs aren't a problem because I never disconnect the wires.
I also specifically left out the absolute mouse feature since I play a lot of FPS games and it wouldn't work with those. I have the switch key bound to a button on the side of my mouse anyway so I can switch systems without even touching my keyboard.
I learned about about that screen hopper project only yesterday, and it just confirmed my theory - whatever I try to do, somebody smarter than me already made, only better, smoother running and with nicer features :)
I play no games whatsoever so absolute coords would be perfectly fine, but one of the items on the to-do list is to make it configurable.
I'm sure there's even more keyboard/mouse switching projects out there, there's just no good acronym or search query to find them. You could search for "KVM" but it's just dominated by PiKVM. We should really standardize on something for the SEO.
Ultimately my friend was explaining his 'mouse jiggler' vbscript and I thought 'how can I make this a hardware version' this led to a design and once you have a design it is easy to query google for design hints at the component level "usb hid microcontroller" "usb passthrough [teensy|arduino]" "usb init host controller [teensy|arduino]" "mouse path [teensy|arduino]" etc etc
Does this mean your solution would break if someone was playing a FPS/game?
And is the solution to use relative coordinates but lose the auto transition feature? Meaning that you would have to manually switch?
I am not familiar with HID but I assume there is a way for the computer to provide feedback to the input device about the cursor’s current position. If that’s correct, it could probably be done with relative movements just fine.
Shouldn't that be a reason to open source it? Nerdsnipe someone else into figuring out the sublety that's causing the bug!
Here's the source, provided as is: https://github.com/null-dev/picokvm
Links:
Edit: I just noticed it is unmaintained (never bothered actually because it works. Input leap is the continuation
[0] https://github.com/debauchee/barrier [1] https://github.com/input-leap/input-leap
It makes it especially easy to drag and drop file copies across computers.
It seems this only addresses KB/Mouse by keeping them enumerated on the host PCs at all times and just sending no inputs to one. So that feels fairly solved. But what about monitors?
Excellent work.