Quite funny how you brought 1000 ms latency down to 200 ms. I wonder how this compares to iDRAC and that Raritan device.
Yeah, it was kind of like the perfect difficulty level for this kind of project. If it was two months of work to get it working at all, I probably would have gotten discouraged, but it worked out that every couple weeks I was rewarded with a breakthrough that substantially improved the latency until it was finally a practical tool.
For new servers, I just buy a supermicro motherboard with IPMI and stop worrying. You can set up an IP based firewall within IPMI, so that only a handful of IPs can even connect, plus a very strong password, and I am not too worried about exposing it to the WAN (I know it’s not a great idea but I don’t know any alternative that doesn’t require another U in a datacentre)..
Also if you use TPM / full disk encryption for a server in colocation, it only takes a firmware update for TPM to request to reenter the key on reboot.
>But wouldn't it just be simpler to attach a dumpster-sourced monitor and keyboard to the server in question for the 3-4 times a year you brick it?
Maybe it's just personal preference, but I'd much rather plug in a Raspberry Pi than a whole monitor and keyboard. My server is tucked away in the corner without a good desk surface to place a keyboard and monitor.
With the Pi, I can just plug it and go back to my desk and do everything through the browser. It's also nice for when I have to Google things about why it's not booting, I can just do it from another browser tab rather than physically walking back and forth between computers.
Although honestly I think some of the latency complaints by gamers are a little much. Personally I have a Bluetooth mouse/keyboard connected to my desktop with a super duper cheap projector pointed into the living room and can play FPS games on it just fine.
I did see something called Intel AMT, part of Intel vPro. https://www.howtogeek.com/56538/how-to-remotely-control-your... Does anyone have experience with this? (I have AMD box so doesn't help me) - actually looks like AMD has similar https://developer.amd.com/tools-for-dmtf-dash/
>Would a Pi Zero W work for this, or do you need a full-size Pi 4?
I tested Key Mime Pi (the keyboard-only version) on the Pi Zero W and it worked great. I haven't tested TinyPilot on the Pi Zero W, but I think it will work. The video encoding is happening in the HDMI dongle, so it doesn't hammer resources much. I don't have a USB to microUSB adaptor on hand, but I'll order one now and see if it works.
>be able to package everything into a tiny 3D printed case.
Yeah, that would be neat! One of the biggest issues I have with TinyPilot's setup right now is that it looks kind of like a bunch of random hobbyist parts stuck together. A 3D printed case would be good and wouldn't have the heat issues that Pi 4 has.[0]
[0] https://www.jeffgeerling.com/blog/2019/best-way-keep-your-co...
StarTech makes a USB-to-KVM that looked promising to me, but it's still >$400: https://www.startech.com/Server-Management/KVM-Switches/Port...
Thanks for reading!
>Do you have any plans to allow controlling more than 1 computer remotely? I'd love to implement this in my homelab.
Right now, I can't think of a way to do this. The Pi only has one USB OTG port, so I don't know of a way to share that among multiple machines.
A friend suggested an interesting solution of chaining TinyPilot together with a "dumb" multi-machine KVM that supports switching via hotkey. So it would go:
TinyPilot -> legacy KVM -> server1, server 2, ...
You could still use a web interface and hop between servers using keyboard shortcuts that the legacy KVM understands.
Anybody know of a good, cheap V4L2 USB-based VGA capture dongle?
I want to have main pc for running ROLLd20 and a daw - then use a mac mini to run the processed audio from my DAW into hangouts.
This is so I can properly play in audio and , music cues as well as altering my voice to suit the character eg a galdos style for a robot
- Most monitors have multiple digital inputs. Connect each computer to one of them
- Use a USB switch keyboard and mouse
- Before switching the USB switch, press the "lock screen" key combination and make sure locking the screen drops the video signal
- After switching the USB switch, pressing shift should bring up the login dialog and re-activate video output. Since the monitor has just lost the signal in the previous step, it will scan the inputs and switch to the desired signal.
Your biggest complication will be real-time re-encoding and compositing with effects.
[0] https://github.com/Fmstrat/diy-ipmi#setting-up-the-hardware
>Cool project, but what about power management? What happens if the PC being controlled crashes and does not let you reboot it using keyboard shortcut?
Yeah, that's one of the limitations. TinyPilot can't control power for the target computer.
I don't know of any way to manage power without connecting the Pi to the target machine's motherboard, but that increases complexity significantly. I'm using this for a homelab, so it's easy for me to walk over and cycle power if that ever comes up, but for this to support more remote scenarios, I'd need to address this.
Change:
ffmpeg -vcodec libxh264
To: ffmpeg -vcodec h264_mmal
[1] https://www.realvnc.com/en/products/viewerplus/ [2] https://blog.michael.kuron-germany.de/2011/10/using-intel-am...
//edit: link [2] added.
I got the idea from danman, but his setup is much cooler than mine:
https://blog.danman.eu/new-version-of-lenkeng-hdmi-over-ip-e...
The main idea was for GM's to use mood music to set the tone or for audio effects the classic red alert should for a sf based game.
What I wanted it for was real time voice changing for character voices - basically the flanged goa'uld or the glados formant shifting robot voice or the classic Dalek voice
Even more ideally, the display would also have a built-in Bluetooth controller that stays active regardless of the USB controller's attach state, such that Bluetooth peripherals could be paired to the display itself rather than to the OS (i.e. you'd manage the pairings through the OSD of the display); and then these devices would be presented through the display's USB controller as always-on direct-attached USB devices — much like VM hypervisors present host-attached Bluetooth HID devices to their VM guests. (As a side-benefit of that, as long as the computer's BIOS understood Thunderbolt well-enough to display anything during boot, then even Bluetooth peripherals would also work during boot.)
I'm not familiar with Barrier, but is my understanding correct that it requires software running on the target computer? If that's true, it wouldn't work for things like installing a new OS or managing BIOS because you'd have to wait for the computer to boot up fully before you're able to enter keyboard or mouse input.
Not sure what the magic is, though.
I use it to switch all of my peripherals (keyboard, mouse, wireless headset dongle, webcam, and mixer) between my desktop and my MacBook several times per day and have not had a single failure yet.
I did end up trying Parsec, since I saw some people recommending it, and that was terrible. Latency was fine (~10ms software <-> software) and video quality was alright, but audio quality was terrible despite being set to the highest option - which is especially bad, because there's no option to send uncompressed audio, and whatever "optimization work" they were doing to reduce bandwidth made their entire product unusable, despite the fact that there's no need to try saving 1mbps over a wired LAN.
A more extreme example was when I went down the rabbit hole of trying to set up remotely unlocked full disk encryption on a cloud, just to see what was possible. This was maybe 4-5 years ago. This involved a pre-boot environment that would run from memory only, packaged into an initramfs and used dropbear as an ssh server to accept a connection.
I really, really wish cloud VMs had virtual KVMs. It turns out, it's really easy to mess this up, and when you do recovery is Non Trivial.
The best I found was that Azure's cloud allows you to connect (read/write!) a virtual serial port via web interface so you can use the Linux serial console to recover. That was a game changer for playing with this. If dropbear failed to come up, I at least got a shell into the pre-boot environment.
Wendell at Level1Techs does good work and there's even newer ones that can do 8k30.
[0] https://store.level1techs.com/products/kvm-switch-dual-monit...
https://wiki.52pi.com/index.php/DockerPi_4_Channel_Relay_SKU...
It’s $17 for four relays, expandable to 16. If you wire it “normal closed” then the relays will only draw power while it’s resetting the other machine.
However, the relays are only rated for 3 amps. (360W at 120V). Also, the board is labeled backwards so, the NO port is normal closed, and NC is normal open.
Has anyone found something that’s similarly plug and play with a higher amperage rating?
Edit: this would work as a switched AC outlet (to replace a four outlet PDU) or for hot wiring the power / reset buttons. You could do both buttons and the AC line and have a relay left over.
I’d feel funny running AC that close to the lower button wires though (if cross those wires, it will certainly let the magic smoke out of your motherboard).
Actually, motherboards do not include integrated graphics, it's all in the CPU/APU. The mobo you linked would not provide graphics either.
AMD unfortunately does not have a high end APU released to consumers right now (there are some 4000 series, but only to OEMs I believe). However, for a HomeLab setup, you might find a cheap GPU to be useful for many things (including hardware video transcoding).
Oh, and thanks for using Proxmox VE! Was positively surprised when I saw our installer flash up out of nowhere :)
the point still stands: most games are very playable via a steam link.
It is possible but extremely tricky to set up AMT headless on a self built Intel. You basically need to press keyboard keys at the right time. Too challenging without a display.
Devices don’t load AMT configuration from USB by default unless a vendor configured them to. In which case the vendor just ships you AMT enabled in the first place.
Better to just image the disk on a different computer.
--
But anyway, TinyPilot is super cool! I'd love to get it set up one day. And the "life story" as to how it came to be was really neat, and made me feel like I understood the whole solution. Great article!
One thing I've ran into was root not having a password since the cloud images are typically SSH key auth only. That was annoying when trying to fix something simple like iptables or entering maintenance mode for a disk check.
If all your host machines are Windows 8+, then Parsec is fantastic and has clients for every major OS other than iOS.
https://www.startech.com/Server-Management/KVM-Switches/2-po...
e.g. https://www.supermicro.com/en/products/motherboard/M11SDV-4C... -- the line about AST2500 BMC graphics? That runs a VGA port.
I have AirPods but will only pair them to my phone.
You should probably qualify that as current generation. There's plenty of last gen Intel and AMD solutions with onboard dedicated graphics.
I think the advent of GPU acceleration in servers and APUs for low end machines has impacted demand for these motherboards in current gen products.
I tried Parsec on one machine and was super disappointed. Video quality and latency were fine, but audio sounded like crap, despite streaming at 512kbps. Since there's no option to stream uncompressed audio, and no debug options to figure out why it sounded so terrible, I had to write off their entire product as unusable.
There are most likely cheaper products which would work. You should probably implement some kind of power control interface that could be used. Calling a shell script would be enough and some example implementations provided by your users. :) It doesn't need to be complicated.
This is a superior solution to all of them.
A lot of these things seem to "help" by inserting their own USB host device that acts as a proxy for attached USB peripherals. This allows them to do (ostensibly) useful useful things such as intercepting keypresses and responding to them (e.g. by switching to another input).
Don't get one of those, get a physical switch that just connects the leads to the correct port when pressed. I got this USB 2.0 switch (all you need for input devices) for $12 [0]. I'm sure there are others available with more ports, but this is all I needed.
I'm happy doing some soldering. Is there anything that TinyPilot has that Pi-KVM doesn't?
Has Pi-KVM added support for the HDMI dongle you used?
Unfortunately, the much more powerful B102 bridge isn’t available. :(
(And thirdly because of the sibling comment noted footgun.. or silent foot-boobytrap more properly)
The official documentation[0] says all Pi devices have USB OTG, but I'm not sure if there's something else about the Pi 4 and Pi Zero W that allows USB gadget mode because I've never found anyone talking about using it before recent generations of Pi. This StackExchange answer says the A and the A+ had it, but that the 2 doesn't.[1]
[0] https://www.raspberrypi.org/documentation/hardware/raspberry... [1] https://raspberrypi.stackexchange.com/questions/71613/how-to...
Then you just have to pay attention to your certs (if you are using https), because browser policy will apply.
I have a boatload of Intel vPro machines spread throughout multiple countries (or the basement) and connect to them both via internet (mutual TLS authentication) and VPN. Never had any reliability issues at provisioning or operating. I had an old AMT v2.1 machine that was a bit unreliable, needed to be manually powered on once in a while or the remote connection wouldn't work.
I wholeheartedly recommend Meshcommander [1] for this.
1) Http://pibookpro.com
I just built a new homelab server and ended up buying a separate GPU again. My new mobo is the SuperMicro MBD-X10DAL[0], which has no onboard display.
[0] https://www.supermicro.com/en/products/motherboard/X10DAL-i
Its motherboard dependent but its definitely something to check with AMD Ryzen motherboards.
I'm curious why you use the browser instead of ffplay for decoding and display. I'd guess ffplay would be faster - but maybe not?
>I still don't know what KVM stands for!
Oh, keyboard, video, mouse. The article does define it, but it's a little buried.
>From a quick skim of your site it looks like you've worked at large companies and now are doing some independent projects. Do you think you'll go back to working for a company (perhaps a smaller one?), or do you see yourself working independently for many years?
I'd love to continue working for myself forever. My ideal would be if I could find a business sustainable enough that I can hire 2-5 developers and other teammates to work with me. If I did have to go back to being an employee, I'd probably lean toward something smaller.
It's very much about your temperament, what type of work you enjoy, and how much you value flexibility and autonomy. A good way to test the waters is by building a side business and see if you enjoy it more than your job. You can also read/hear more about the lifestyle in places like Indie Hackers[0], Starter Story[1], and WIP[2].
But I agree with you that you pass up certain kinds of growth by working on your own. I'm happy that I had ~10 years of experience with big companies before doing my own thing. I learn a lot on my own, but I don't think I could have learned a lot of my software "craftsmanship" kind of skills (e.g., designing for maintainability, creating repeatable, well-documented processes) had I not worked for Google and Microsoft.
[2] https://wip.chat
(I'd guess their newer models work similarly but I haven't confirmed.)
I believe so, but with the caveat that I haven't tested it. Does Fire TV take USB keyboard input?
I have successfully captured video from a Roku Premiere[0], even though it's HDCP protected. The LKV373A couldn't capture anything out of it, but the $11 dongle did just fine. But that was just video capture. I didn't have a way of sending input to the Roku.
>Is there an upper limit on resolution and frame rate for the dongle?
Yes, the limit is 1280x720px @ 30FPS.
[0] https://twitter.com/tinypilotkvm/status/1277994838210875392
1) https://www.adder.com/en/kvm-solutions/adderlink-digital-ipe...
1. A relay to reset the PC like iDRAC/iLO
2. 2 dual pole relay to move a USB flash drive to and from the PC it's connected to, in combination with (1) you could then boot ISOs remotely by dd-ing the ISO to the flash drive and then connecting it to the host PC with a relay
Now I work at home at a desktop with Ubuntu. It's a huge disruption to use iMessage now as I have to switch devices/keyboards.
I had the thought of doing almost exactly this with the Ligthning-> HDMI adapter and some form of Bluetooth keyboard emulation. I can't wait to build one of these and start experimenting.
Honestly, the overhead from TinyPilot is so small that it's just a question of how powerful you want the device for other activities.
Here's a screenshot I took earlier today on a Pi 4 with 2 GB of RAM. TinyPilot is streaming video over WiFi, and top shows that it's only using ~4% of CPU and ~2% of RAM:
A better way would be a relay and microcontroller, which you could also potentially use for the USB HID stuff too.
In theory, you could have a HDMI switch, a single Pi and HDMI grabber, and just a microcontroller board for each target machine that could have power button control, keyboard emulation etc built in.
[1] https://www.supermicro.com/en/solutions/management-software/...
[2] don't even try to talk about PXE booting if you've never tried to get DHCP+BOOTP to work over a WAN
If you don't want to touch anything related to electronics, you could rely on enabling a watchdog on boot-up. Or control if from a smart power supply (you likely have a UPS plugged in, for instance). Use the power after power loss BIOS feature, or WoL to wake it up.
There would be ways around this though, perhaps using a cheap microcontroller for the USB HID stuff.
It works great, If I could get it done with only a keyboard shortcut, I would only pick this solution if it does not induce additional lag.
I'd say, in short, Pi-KVM is more feature rich, while TinyPilot is simpler and more approachable with less functionality.
Pi-KVM has several nice features that TinyPilot doesn't yet have, including power management, mouse support, authentication, TLS, and USB storage mounting.
TinyPilot has a quicker install. Pi-KVM requires you to compile the OS locally, which takes about an hour. If you've got a Raspberry Pi OS system (aka Raspbian) already, you can configure it for TinyPilot with two commands, and the install takes 5-10 minutes.
One of my goals with TinyPilot was to avoid a requirement for soldering/jumper cables, but if you don't mind soldering, that might not matter much to you. Pi-KVM works without soldering as well, but the documentation assumes soldering/breadboards.
I hope that there's space for both projects, and Max and I have talked about ways to potentially collaborate.
I don't think there's a way to get the Pi to capture video or impersonate keyboards for more than one computer at a time.
A neat idea a friend proposed to me was to buy a "dumb" KVM that supports switching through keyboard hotkeys and use that to scale it to multiple machines. See my comment here: https://news.ycombinator.com/item?id=23928251
I think most people are better off building their own home (lab) server with a motherboard that supports IPMI (KVM over IP) natively.
Supermicro (only brand I've experience with) or other brands that build server motherboards all include IPMI with HTML5 support.
Doing so will save you a lot of trouble. Maybe you may not be able to run the kind of hardware you want, but it's all a tradeoff. You have to choose.
I have HP Microservers (quiet) and a Proliant (loud) all with ILo (HP IMPI) and it's awesome.
I got a company laptop recently and bought an Aten CS782DP KVM switch so I can reuse my gaming PC's monitor on it (using DisplayPort 1.4 cables). But when using my gaming PC the display now flickers very often when gaming and it's driving me crazy. Some people said it's the length of the DP 1.4 cables (they are very short though, <1m), some even say gas spring chairs introduce signal disturbance (wtf?), others say make sure the DP 1.4 cables don't touch any other cables.
In any case: would a KVM switch like the one in the post help? I suspected NVIDIA's G-Sync but turning it off for several days made no difference. :(
For the record, the display runs at 144Hz in both Win10 and Ubuntu. But it only flickers in Win10. The only thing that comes to mind is that the miniDP-to-DP cable that runs from my PC's videocard to the KVM switch is no good -- but not sure. I sadly can't use the KVM switch's DP-to-DP cable because my videocard only has miniDP on its rear.
Anybody had similar struggles in the past?
Combined with a HDMI switch, you could then control multiple devices with just one Pi+Cap device.
I've been looking to do something similar for a while, albeit possibly with Windows as that's where I've (very rusty Delphi) programming experience.
For those, like me, who were ignorant of this particular use of KVM, and couldn't find it in the article or comments.
As for another switch, I am open to ideas if you have them. In my local market I was only able to find like 2-3 of them [that support DP 1.4] and they are all north of $250 -- which I don't mind but it would be non-pleasant to buy 5+ of them just to experiment.
Maybe my requirement for DP 1.4 is silly though. Maybe HDMI would be fine.
https://www.amazon.com/SilverStone-Technology-Wireless-Compu...
Or possibly just wiring up a transistor to the power button pin (not sure if it sources or sinks) between motherboard and the Pi, and just hold it high until it boots.
RPis only have 1 OTG port, though. A device that could get it to handle more machines with that single port would functionally be a KVM-switch. I don't think there's a way around that, at least not one that'd be cheaper or more practical.
Most modern x86 systems support boot input/output via serial, as does grub/grub2, the linux kernel and the userspace. It takes some trial and error to get the serial console set up for all steps in the boot sequence, but once that’s done you’ve got out of band access in a standard terminal with output history, copy, paste, etc.
Pair this with a switched PDU or “smart” outlet and you’ve got a full remote managed server on a shoestring budget. Any adjacent or spare computer with a usb port can host a $5 usb serial adapter and play the role of the console server.
-Remotely mounting images (ISO/FS/IMG/etc) on the host for bare-metal installs or any other purpose
-Hard power options for unresponsive servers or emergencies
-Heavily integrated diagnostics (fan RPMs, thermals, RAID status, etc etc) with eg. snmp output
Those with multiple ports have a hub in between and are not capable of gadget mode.
The pi 4 is an exception, it is capable of gadget mode on its USB-C power input, not via the normal ports as there is a hub in between there too.
(Edit: No affiliation. Just happy to see something like this for hacking :) )
Some of the models have video-passthrough, which is an awesome feature. The ability to redirect an SMB share or local disk image to an emulated disk over the network is also a great feature for installing an OS.
I recently had seen some article on CNX about those cheap USB video adapters and wondered about doing something like this to replace these old Spiders.
There is definitely a market for a low-cost product here. It doesn't have to be perfect. As the article highlights, the pricing for this kind of product is just stupid.
So I only wanted to point out that there are good solutions out there, even though they might not be cheap. The solution have saved my bacon, and has been worth the money.
Looking at the original project, authentication, mouse support and audio are not supported (maybe in the future?), so if those things are important; a solution like the ipeps might be worth it as well.
But your mileage may of course vary . . . :-)
Edit: Grammar
One of the VMs is used for remote connection with SSH and reverse port forwarding, so i easily can connect, use RDP to Windows ++
For (integrated) mouse support you could take a look at a project from a good friend and colleague: https://github.com/Blub/netevent
Allows passing along arbitrary input events over the network and more.
https://trendowner.com/products/1000x-zoom-usb-microscope-ca...
If you are looking for a reasonably priced server today, you are likely to end up with the shitty Java-based KVM.
I've used it with Windows 10, MacOS and an RPi, with no issues.
I'm looking to build a new home-server and was looking at mobos with management support. No need for that now though! Now looking for ways to keep the Pi inside the server case. Ideally want to have a ethernet, power jack and HDMI end built into a PCI bracket so it remains movable.
Thanks for the detailed reply. I'll likely give both projects a go.
For what it's worth, that stuff has always been incredibly unreliable for me. Enough so that old school PXE booting was the only way to maintain a server pool, couldn't get them to consistently reimage through the proprietary stuff.
The remote power control is very nice, and I didn't see anything on this page about that. (Though now I'm just imagining the "useless PC" [1] that just tells a smart power plug to turn itself off.)
(And the "USB monitor" projects meant to be a second display need drivers, seem to all be way too proprietary, and won't work for early boot.)
Even hardware that is made to be run headless ("server-class") is hopelessly broken. They give you a proprietary graphical console that isn't even just a VNC server but has to be accessed with a web browser. And, if the server is more than a few years old, some deprecated, unsupported plugin like Java or .NET will be required. I have an old Dell R710 whose remote console I will never be able to access, because it only works with Java 6 (or so I'm told, I'm certainly never trying that; I wouldn't even know where to begin to try to set that shit up.)
if you are kind enough to report back whether it works with the newest bios, that will be helpful to others
I'm not sure that VirtualHere would work in this scenario because it looks like it requires code on the client computer. I'd like to encapsulate all the software on the Pi so that the client computer doesn't need anything more than a web browser. The other tricky issue is that uStreamer is optimizing the stream to drop frames from the dongle when it detects that the browser is falling behind, so we'd lose that functionality.
I have a HDMI KVM switch that's supposed to be 4k@60. One PC won't detect it as such; I can make a custom 1440p at 42Hz mode but nothing higher. The other will send 4k/@60, but the monitor will do one of 4 or so failure modes:
* Entire screen compressed to half width: 50% * Correct behaviour: 20% * Correct display, occasionally flipping to black screen: 10% * Gatbled screen: 5% * No synch: 15%
Switching input is a game of toggling back and forth until it synchs correctly.
None of this happens with a direct connection.
The switch also doesn't seem to detect when I set up a keyboard macro for the switch-input sequence (control-control-1/2/3/4) but that's not nearly the dealbreaker.
I'm not sure if it's the switch or the monitor being relatively intolerant of the switch's behaviour, but I don't want to toss around $100-300 on spares to diagnose this.