DeskHop – Fast Desktop Switching
github.com
github.com
> 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.
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.
Links:
- https://www.microsoft.com/en-us/garage/profiles/mouse-without-borders
- https://github.com/microsoft/PowerToysEdit: 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.
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.
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
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.
Also, havent heard Full Sail in a really long time... Had a friend from growing up that went there and became famous...
THanks for the link - Ill be installing this around my place today :-)
https://github.com/input-leap/input-leap
Keep an eye on that for anything new
Synergy doesn't work on Wayland, so I can't use it on Fedora anymore (unless I switch it back to X).
There's always new feature requests. Drag and Drop files is a common one. I personally think that's scope creep, but I can see the appeal. Synergy and barrier already establish an encrypted connection between machines, so copying a file seems a good fit. At very least a "Synergy send to ${computer}" share/send to option would make sense.
Here's Synergy's roadmap, and since Synergy and Barrier are the commercial/open-source fork of the same ancestor, Barrier probably has received similiar requests over time.
Technies almost always have a laptop, phone, and home desktop up at once, often have some media/fileshare, and then there are VMs to further the complexity.
Here's what I've been wanting for years: a big ass 8k wraparound monitor, and it has clickable widgets in the desktop to turn on the computer/VM and activate the display feed into some part of the desktop.
There's a primary desktop area, and that area is surrounded by "neutral zones/buffer zones where if you take the mouse into that area and click on it, it would swap the "primary" area to that machine and place the former machine's display into one of the peripheral areas of the large display, or secondary monitors.
With "cores to spare" in modern Moore's law scaling, I should be able to have several OSes seamlessly running at once, not the virtualbox stuff or other clunkiness, a much more seamless experience. There's a lot of hardware/CPU features to support it, but of course the OS vendors/distros have no prioritization to do something like that. It's also a fundamental failing of IoT.
We are all moving towards a world where we have a dozen decent-class computing devices (Multicore multiGhz phone, 2x that for a tablet, 2x that for a laptop, and 2x that for a desktop) even not counting IoT, media, etc.
We need a truly distributed OS that can handle this stuff. Windows/Android/iOS/OSX won't do it, they are in the walled garden business we need Linux to do it. The cloud projects, k8s / etc wanted a "datacenter OS" but basically failed.
No. The hardware features that allow running multiple OS's at once is what VirtualBox/QEMU/HyperV/Xen/etc. use, and those feature require a privileged OS to manage it.
The hardware does not support having multiple OS's manage the machine at once - even if they could be made to run, they'd step on each other and make hardware crash as they all try to configure it differently at the same time, and with them all in ring 0 they'd be able to arbitrarily compromise each other. Plus, you'd be annoyed that each of, say, 3 OS's could only use 1/3rd of all resources - 16 cores and 64 GB of RAM may seem like lot, but 5 cores and 21 GB of RAM does not.
It's a dumb idea. Just get a better OS, a better hypervisor, better "fastboot to other OS" features (say, 1-5 seconds "hibernate and resume other OS"), or another desktop.
What definition are you using here? I like tech and worked as a software engineer (not working now), and I haven't owned a desktop in over a decade. If we're talking "almost always", I think these days I have 0 phones/laptops up most of the time followed by 1 in pretty close second place, and even having 2 (let alone 3 or more) is uncommon for me.
The product is sometimes called a boundless, borderless, or roaming KM switch.
https://www.cdw.com/product/siig-4-port-roaming-km-switch-wi...
The only downside is that you have to "renew maintenance" to continue receiving updates to ShareMouse after a year. But I haven't done that yet and it still works fine for me.
I wish any solution had custom monitor interleaving. My personal setup is such that the monitors are not set up linearly, and each monitor can independently switch to each machine. Specifying the boundaries on a per-monitor and per-machine basis would be amazing, but it doesn't seem to exist in software or hardware form.
I spoke to Synergy recently and they said it is on the road map as a popular feature request. Hopefully soon!
Even if it's not true, I feel like I'm going to be nickel+dimed or hit with mysterious and surprising fees.
As someone who creates software, I want to comply with the licensing out of principle and respect/admiration for creators. It shouldn't be so difficult to understand what it would cost me.
Opaque pricing is an immediate "no thanks" for me. I honestly don't care how good an app is; if it's not easy to buy, I'm not going to buy it.
I’m not affiliated with the maker in any way but if anyone’s curious I can go look up which one I have. It was just a random Chinese thing under ~$45 or so.
I'd love to have a more sophisticated device that switches in under a second.
Hdmi is also slightly glitchy. All in all, it's a slight improvement but not what I'm looking for.
My Amazon cheap DP KVM is fast enough for me when switching, my guess is somewhere in the 0.75-2 second range, I'll have to time it for you. I'll reply again with the results.
*Note: i mean for monitors, i'm aware that i'm not gonna avoid it in the living room :)
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
[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 saying that as a long-time user of a desktop setup consisting of Lin-Mac-Win boxes arranged left-to-right for at least two decades. Polyglot is to programming languages as multi-platform is to hardware. Fortunately, that's gotten easier as system-on-a-chip or SoC designs have proliferated in the last few years.
My current setup consists of 2x $250 Ryzen SoC Mac-mini copies straight outta Shenzhen and an M1 MBP.
I only wish that the once resilient world of open source KVM solutions such as synergy had not devolved into a recursive nightmare of forks where getting a working multi-platform open source software KVM without cost is challenging. Sadly, my current setup uses a good 'ole KVM switch but the button pressing is distracting.
I look forward to trying something like this again one day. Thanks for sharing!
> Both computers need to be connected and powered on for this to work
That's a deal breaker for me
Frankly I'd be far more inclined to pay the "ridiculously expensive" prices for one that is well documented and open, and where the firmware is easily modifiable.
https://github.com/tiny-pilot/tinypilot
It's pretty easy to extend since it's just Python and vanilla HTML/JS/CSS, so there's not much of a toolchain to install.
You can buy it pre-made for $399 or make a DIY one for under $100.
Note no "V"; it's to have the mouse seamlessly move from one desktop to the other when the machines are each connected to their own screen. Browser-based is also a non-starter for that use.
I'll definitely have a look if/when I need a KVM over IP switch, though.
Excellent work.
Essentially I found that the easiest way to swap between my computers is to physically disconnect a thunderbolt cable from one and plug it into another. As far as I can tell there's no such thing as a thunderbolt switch, so this is the local minima I'm stuck in until I try and make my own solution.
I have one keyboard and mouse connected to one "host" machine, and two machines connected as clients.
Sometimes if the host machine bogs a bit (like running a build or something) then the clients will have some latency but I've used this setup for gaming and work for two years and it's been pretty good.
My only complaint (about my personal setup, not the software) is that one machine has absolutely no peripherals attached to it aside from a monitor, so if I need to update the software, I need to connect a keyboard and mouse in order to do so.
Again, an issue with my setup and a caveat of using software as opposed to hardware.
I have my mouse, keyboard, and webcam plugged into my monitor. The monitor is connected to both my work laptop and personal desktop. I wrote a script using `ddccontrol` that I have bound to a hotkey on the laptop and desktop which toggles the active input. Switching the display and USB peripherals back and forth between the two machines is just a keyboard hotkey.
The commands look something like this: `ddccontrol -r 0x60 -w 3855 dev:/dev/i2c-7 >/dev/null 2>&1'
With the exact arguments dependent on your particular hardware.
Who will pick up the gauntlet and allow those of us without a soldering iron to buy a ready-to-use box?
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
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?
I also discovered logitechs k860 keyboard which has 3 buttons on the top for switching between computers. I use it with the USB receiver and a bluetooth laptop. No noticeable lag and works very well.
Also, is it possible for one device to keylog when the keyboard is switched to the other?
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...
I used one of these manual USB switchers, (https://sabrent.com/products/usb-sw30), and connected its switch to a Raspberry Pi 4B via GPIO (4B is overkill by wanted hardwired network). There's a small separate keyboard (which will later be a macro keypad of some sort), connected to the Pi. Using inputexec (https://github.com/rbarrois/inputexec) to detect keypresses and then firing off a specific script to send a network request to the LG TV I use as a monitor to switch the source, and then set the GPIO connected to the USB switcher to high or low to switch the keyboard/mouse to the other machine.
I can also turn on/off the TV using the same WebOS API (and Wake-on-lan) as used during the source switch. A Kasa smart outlet also gets toggled to turn on/off a BenQ ScreenBar Halo (https://www.benq.com/en-us/lighting/monitor-light.html).
So with 4 different keypresses, I can switch to Work, to Personal, turn off monitor and light, and turn on monitor and light.
So, I setup "holding" down CTRL which allows the mouse to pass. Its just a nice way to stop accidents and for when I want auto window sizing at borders. This project looks great if it can support holding down CTRL to allow the mouse to pass into the other screen.
I also love clipboard copy. That is kinda a biggie some days.
I was testing a "nudge" feature, where you need to move a mouse a little faster towards the other screen to have it jump across. It was not bad, even though I've found it to be most intuitive when the cursor simply moves freely like it was one big desktop.
Clipboard would be awesome to have, but considering privacy, security and data protection concerns, it's just too risky.
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.
I prefer just having two trackballs, especially since they don't move, they're very ergonomic. The keyboard is the style of a Microsoft Ergonomic Keyboard, but it supports multiple devices. The keys are exactly how I wanted them (flat), and its been a good keyboard, supports one USB dongle connection, and two bluetooth connections, which is what I wanted. I was surprised how good the keyboard is after passing on it on Amazon a few times, which led me to try their trackballs, and I was not disappointed with either purchase.
I prefer to just hard switch the keyboard, so I don't get confused as to which computer I'm going to be typing on, sometimes I switch computers to google something personal that I rather not type on a work machine.
Unrelated - surprised JLCPCB does not have a way to share a link to a PCB so folks can buy a board without needing to upload the files themselves. Maybe I am missing it?
Does a reliable solution exist that includes all accessories built in/attached to the monitor? (Ethernet, monitor speakers, monitor camera, power delivery charging, etc.)
It hasn’t been enough of an issue to mess with it more or try a different one
They were quirky in their implementation, but it still felt cool to have it all done in a little USB switch device.
For my actual setup I still find barrier (forked as input-leap) excellent. I use Linux, Mac, and Windows machines without issue. I even play games with with my input going over the network this way.
Never used a Pico board, only exp is with a Tensor board that came out a few years back.
Any further advice on where / how to get started with is would be appreciated?
Also great work, the transition looks super smooth.
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!
With a device like this you'd be missing the on_usb_connect event, but presumably you could do something (a special HID device button, an extra device id appearing, who knows) to make it work.
It's not clear to me what would happen in the event that only one of the two computers was powered up. Would the powered pico pass the mouse off to a dead pico at the screen edge and then have no twin to pass it back, leaving the powered machine with no USB devices?
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.
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?
Having an accompanying explainer article or video is something I'd pay/donate for, just out of sheer curiosity of the work involved.
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?
Also another pet peeve with M&KC is that it will also switch when the other computer is off, which happens more often than I'd like and leaves the mouse "stranded" (forcing me to turn it over and press the Bluetooth button to cycle through the three channels).
Maybe it could be implemented using Raspberry Pico? I think I found me a new side project!
This is super flexible, as that computer can now be in another room or building.
I've certainly been guilty of doing something "a worse way" simply because it's what I first thought of and was available to me, and you gotta strike while the mental iron's hot.
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.
(or is the answer AliExpress)?
1: ADuM1201 - https://www.digikey.com/en/products/base-product/analog-devi...