Giter Club home page Giter Club logo

pikvm's Introduction

Open and inexpensive DIY IP-KVM based on Raspberry Pi

Discord Reddit

A very simple and fully functional Raspberry Pi-based KVM (Keyboard-Video-Mouse) over IP that you can make with your own hands. This device helps to manage servers or workstations remotely, regardless of the health of the operating system or whether one is installed. You can fix any problem, configure the BIOS, and even reinstall the OS using the virtual CD-ROM or Flash Drive.

The website: pikvm.org. Also check out the documentation and join to the Discord Community Chat for news, questions and support!

Web UI

Features

  • Can be made based on Raspberry Pi 2, 3, 4 and Zero2W;
    • Raspberry Pi 5 is not supported right now. It doesn't have GPU video encoders, therefore, there is no point in using it for PiKVM, it will not give any performance boost for this case. The Pi 5 is a great device, just not suitable for PiKVM.
  • FullHD video using advanced HDMI-to-CSI bridge or USB dongle;
  • Extra low video latency with MJPEG or H.264 / WebRTC (for CSI bridge);
  • Bootable Virtual CD-ROM and Flash Drive, ability to store images on NFS;
  • USB Keyboard and mouse (with leds and the wheel), PS/2 keyboard, Bluetooth HID;
  • Control the server power using ATX functions;
  • Access via Web UI or VNC;
  • Ability to use IPMI BMC, IPMI SoL, Redfish and Wake-on-LAN to control the server;
  • The ready-made OS with read-only filesystem;
  • Extensible authorization and HTTPS out of the box;
  • Health monitoring of the Pi;
  • Control GPIO ports and USB relays;
  • 100% Open Source!

Variants

PiKVM supports several different hardware configurations, referred to as platforms. All of them uses our common open source software stack.

  • PiKVM V4 and V3 are our own plug-and-play, ready-made devices (Raspberry Pi included).
    Supports H.264 video & audio transmission, host power management, mass-storage emulation and much more. They are really well-made, reliable things which you can use yourself or provide to your clients. V4 and V3 also have more features than DIY builds.

  • PiKVM V2 and V1 devices are DIY so you can make it with your own hands.
    If you don't know where to put your old Raspberry Pi, here's a great goal.

Look at what Tech Bloggers are saying about us :)

PiKVM V4 Plus & Mini PiKVM V3 DIY PiKVM
Novaspirit Tech
Level1Techs
Jeff Geerling
~~~ LINUS TECH TIPS ~~~
Novaspirit Tech
Level1Techs
Techno Tim
The Geek Freaks (DE)
Novaspirit Tech
Hackaday
Tom's HARDWARE
Elector MAG
Our boring presentation of DIY

~~~ BUY IT NOW ~~~



~~~ BUY IT NOW ~~~



DIY Getting Started



⭐ ⭐ ⭐ CORE SYSTEM ⭐ ⭐ ⭐
V4 Plus V4 Mini V3 DIY V2 DIY V1
Plug and Play out of box! DIY DIY
Base Raspberry unit CM4
Included!
CM4
Included!
RPi4
Included!
RPi4
Zero2W
RPi3
RPi2
Zero2W
⭐ ⭐ ⭐ VIDEO ⭐ ⭐ ⭐
V4 Plus V4 Mini V3 DIY V2 DIY V1
Video passthrough to local display
HDMI 1920x1200@60Hz support
for big displays
HDMI 1920x1080@60Hz support
for better BIOS/UEFI compatibility
HDMI audio capture
Super fast H.264 & MJPEG video:
720p - 60fps, 1080p - 30fps for H.264
⭐ ⭐ ⭐ PERIPHERY ⭐ ⭐ ⭐
V4 Plus V4 Mini V3 DIY V2 DIY V1
USB keyboard/mouse emulation
Virtual Flash Drive / CD-ROM emulation
Ability to simulate "eject/insert" for USB
Onboard ATX controller for power management of the host DIY DIY
Built-in OLED with IP and other info
Multiport KVM switches support
⭐ ⭐ ⭐ HARDWARE ABILITIES ⭐ ⭐ ⭐
V4 Plus V4 Mini V3 DIY V2 DIY V1
Internal secured USB 3.0 storage port
USB serial console port
CISCO-style RJ-45 console port
A real-time clock for accurate logging
Locator LED to find device in the rack
mPCIe slot with USB lines for LTE/5G cards
SIM card slot for modem
External antenna support
USB host support (external USB devices connectivity)
⭐ ⭐ ⭐ POWER AND COOLING ⭐ ⭐ ⭐
V4 Plus V4 Mini V3 DIY V2 DIY V1
Cooling system / fan type Quiet
Radial
Fanless Axial DIY DIY
PWM fan controller
Fan speed and health monitoring
Power consumption in idle mode 3.3W 2.65W 3.3W
⭐ ⭐ ⭐ MISCELLANEOUS ⭐ ⭐ ⭐
V4 Plus V4 Mini V3 DIY V2 DIY V1
USB relays, lamps, smartplugs control
Pi's GPIO ports control from the Web UI
More indepth details about the PiKVM features

Fully-featured and modern IP-KVM

  • Cheaper, but better than commercial solutions
    Costs between $30 and $100 depending on the features desired. Even the most expensive configuration will be cheaper than a $500 commercial IP-KVM.
  • Easy to build - For the V1 variant
    A ready-to-use OS that can be created just by running make build and installed to an SD-card using make install. The hardware can be made in half an hour and without soldering.
  • The widest hardware support
    There are many ways to build a PiKVM. Video capture devices can be attached using the CSI-2 or USB interfaces. Raspberry Pi models 2, 3, 4 or Zero2W may be used. Any combination of hardware is supported, and PiKVM implements the maximum possible set of features.
  • Very low latency
    ~100 milliseconds of video latency. This is the smallest delay of all existing solutions.
  • Extra lightweight and fancy Web UI
    No weird proprietary clients. No ugly Java applets. Just use your favorite browser to connect to the PiKVM. No flash plugins either!
  • Keyboard and mouse
    Mouse usage works directly in the browser. The keyboard emulator supports displaying the state of the keyboard LEDs.
  • Mass Storage Drive
    On the Raspberry Pi 4 and Zero2W, PiKVM can emulate a virtual CD-ROM or Flash Drive. A live image can be uploaded to boot the attached server.
  • ATX power management
    With a very simple circuit that can be assembled on a breadboard, the power button of the attached server can be controlled using the ATX button headers on the motherboard.
  • Security
    PiKVM can be opened to the Internet and no one will get access without the password. SSL is used to protect traffic from being intercepted by third parties.
  • Local monitoring
    PiKVM monitors the health of the Raspberry Pi board and will warn you if it's too hot or is not receiving enough power.
  • GPIO management You can control GPIO and USB relays via the web interface. The extensible interface allows you to make anything out of it.

Production-ready

  • Linux-based embedded OS
    The PiKVM OS is based on Arch Linux ARM and can be customized for any needs. Thousands of pre-built binary packages are at your service and can be updated with a single command!
  • Read-only filesystem
    By default the OS runs in read-only mode, as an embedded system should. This prevents damage to the memory card due to a sudden power outage.
  • VNC server
    The managed server and its BIOS can be accessed using a regular VNC client which supports JPEG compression.
  • IPMI BMC and Redfish
    Use ipmitool, ipmiutil or any existing network infrastructure that supports IPMI to monitor and manage the server's power. Redfish and redfishtool supported too.
  • Wake-on-LAN
    PiKVM can be configured to power up a managed server using WoL. This will be available in the Web menu.
  • Extensible authorization methods
    Multiple PiKVMs can be configured to use a common authorization service. PAM and its rich authorization mechanisms can also be used to integrate PiKVM into your existing authentication infrastructure.
  • Macro scripts
    If repetitive actions must be performed on the attached server (or on several different servers), a macro can be recorded with keyboard & mouse actions and can be played back multiple times.

Open Source

  • Community & support
    PiKVM has a large community. Join the discord chat if you have any questions.
  • Extensible
    PiKVM was designed as a set of microservices with a plug-in architecture. It's very easy to modify and maintain.
  • Comprehensive API
    Everything that can be done via the user interface can also be done via a powerful HTTP API.
  • Know-how
    We created our very own MJPG video server written in C with multi-threading support and GPU video encoding - the fastest streaming solution available to provide the best video quality for PiKVM. We also tested a lot of hardware configurations so that you can be sure devices you assemble will work reliably.

DIY Getting Started

PiKVM supports several different DIY platforms. Now available: V2 and V1.

  • Recommended: V2 is the most powerful implementation for Raspberry Pi 4 and Zero2W supporting all of the features of PiKVM including the Mass Storage Drive. It's also the easiest to make.
  • V1 was designed to work with Raspberry Pi 2 and 3 that do not have USB emulation port and requires a few more components for a basic implementation. It also does not support the Mass Storage Drive feature.

The full list of parts is at the very beginning according to the assembly instructions for the corresponding platform. You can review both options to decide which one is most suitable for you.

So, again, in short:

  • DIY PiKVM V2:

  • DIY PiKVM V1:

    • Here are the instructions and a complete list of components.
    • Requires Raspberry Pi 2 or 3.
    • Requires Raspberry Pi Pico for the keyboard/mouse emulation.
    • Requires extra wiring and little bit more parts.
    • Supports H.264 (for recommended CSI capture).
    • Doesn't support CD-ROM and Flash Drive (mass storage) emulation.

Donate

This project is developed by Open Source enthusiasts. If you find PiKVM useful or it has saved you a long trip to check on an unresponsive server, you can support us by donating a few dollars on Patreon or Paypal or buying our devices. With this money, we will be able to buy new hardware (Raspberry Pi boards and other components) to test and maintain various configurations of PiKVM, and generally devote significantly more time to the project. At the bottom of this page are the names of all the people who have helped this project develop with their donations. Our gratitude knows no bounds!

If you wish to use PiKVM in production, we accept orders to modify it for your needs or implement custom features you require. Contact us via live chat or email the lead developer at: [email protected]


Special thanks

These kind people donated money to the PiKVM project and supported work on it. We are very grateful for their help, and commemorating their names is the least we can do in return.

View all people!
  • A. Isenring
  • Aaron Graubert
  • Aaron Heise
  • Aaron Stein
  • Accalia
  • Adam Goodbar
  • Adam S
  • Adam Stuart
  • AdamBomb
  • adipisicing
  • Adrian Basham
  • Adrian Popescu
  • Ahmed Syed
  • Alberto Bassi
  • alejandro
  • Aleksei Brusianskii
  • Alessio Curri
  • Alex T
  • Alex Z
  • Alexander Martin
  • Alexander Pankov
  • Alexandre Jablonski
  • Alexey Kamenskiy
  • alm0241
  • Alok Anand
  • Alucard
  • Ananthaneshan Elampoornan
  • Andreas Marufke
  • Andreas Schmid
  • Andrew Brant
  • Andrew Melton
  • Andrew Reusch
  • Andrew Ruan
  • Andrzej V
  • Andy
  • Andy Keys
  • Anish Patel
  • Anix
  • Anonymous
  • Anthony Junk
  • Anton Kovalenko
  • Armen
  • Aron Green
  • Aron Perelman
  • Artem Simonov
  • Arthur Mayer
  • Arthur Woimbée
  • Ashlesh Chaudhari
  • Asim Shakour
  • Augusto Becciu
  • AVS Computer
  • awkspace
  • baddog
  • Bao Tin Hoang
  • Bean Co.
  • Bela Bargel
  • Belf Igor
  • Ben Gordon
  • Ben Scott
  • Benedikt Heine
  • Benedikt Meier
  • Benjamin Frewert
  • Benjamin Melancon
  • Benjamin Schwartz
  • Benjamin Stegmann
  • Benni Stauder
  • Bernhard Fitzke
  • Beu
  • bikmaek
  • bitjoe
  • Bits and Bytes Computers LLC
  • Bjoern Petsch
  • Blindside
  • Blue Frog LLC
  • Bootstrapper - Programmierung erklärt
  • Bosco
  • Bradford King
  • Brainspore Networks
  • Branden Shaulis
  • Brandon Daniels
  • Brian Moses
  • Brian T Mulcahy
  • Brian Vecchiarelli
  • Brian White
  • Bruno Gomes
  • Bryan Adams
  • Bryan Montgomery
  • Buzzer
  • C P ELSE
  • Calanish
  • Cameron Hatcher
  • Cameron Tacklind
  • Carl Mercier
  • Carl-Fredrik Johansson
  • Carlos Garcia
  • Carlos Manuel Torres
  • cbad536
  • CHINATERA LIMITED
  • Chris Blackmon
  • Chris Burton
  • Chris Campbell
  • Chris Jackson
  • Chris Lewis
  • Chris Rizio
  • Christi King
  • Christian Schlögl
  • Christian Svensson
  • Christoph Dette
  • Christof Maluck
  • Christoffer Lund
  • Christopher Bulla
  • Christopher Gelatt
  • Christopher Hearn
  • Christopher Mandlbaur
  • Christopher Mendoza
  • Christopher Simms
  • Chucktastic
  • Cihan VURAL
  • clauskj3r
  • Clifford Coleman
  • Clinton Lee Taylor
  • Cole Imhoff
  • Colin Goodman
  • Corey Layton
  • Corey Lista
  • Craig Keenan
  • Crossfactor
  • Cruzzer
  • ctag
  • Curt Sammer
  • CyB0rgg
  • DeMentor
  • Desmond Whitt
  • Daegara
  • DailyAneurism
  • Damon Meledones
  • Dan Berkowitz
  • Dan Brakeley
  • Daniel Bowder
  • Daniel Cabrera
  • Daniel Davila
  • Danilo Saft
  • Danne
  • Dariusz Techmański
  • David
  • David Brausewetter
  • David Davis
  • David Godibadze
  • David Howell
  • David Irvine
  • David Klinkman
  • David Niemann
  • David Shay
  • David Ye
  • David York
  • Denis
  • Denis Andreev
  • Denis Yatsenko
  • Dennis Becker
  • Dennis Joslin
  • Dennis Lomet
  • Derek Jarvis
  • Derek Yap
  • Didrik
  • digitalbaconbits
  • Dimitrij Jedich
  • dixon wong
  • dizztrukshin
  • Dmitry Shilov
  • DogeLabs
  • Dominic Phoon
  • Dominik Klonowski
  • Donald Hays
  • Edmon Abdul Nur
  • Egan Ford
  • Elani Ferri
  • Elliot Woo
  • Entt
  • Eric Phenix
  • Ethan Shold
  • Eugene Sukhodolin
  • ewook
  • eye-catcher.com
  • Fabian Druschke
  • Fabiano Sidler
  • Far Pin Solutions, LLC
  • Felyx Gabryel
  • Fergus McKay
  • Finn Ebenritter
  • floppy
  • fo0bar
  • Foad Yousef
  • Foamy
  • Foli Ayivoh
  • Folkert Weistra
  • Francisco Pavon
  • Frank
  • Frank Sander
  • Frederick Czajka
  • Fredrik Idréus
  • Garrett Dangerfield
  • Ge Men
  • Geekworm
  • Genkinger Andreas
  • Geijer
  • Geoffrey Wright
  • George Becker
  • Georgy Brodsky
  • Gerald
  • Gerardus Vernimmen
  • Gernot Neuschröer
  • Giovanni Fulco
  • GK
  • Glen Dragon
  • Greg Winterstein
  • Gregory Smith
  • Gregory Treantos
  • Grey Cynic
  • Guenter Honisch
  • Guido Bernacchi
  • Gustin Johnson
  • György Tamás Vizi
  • Haiberg GmbH
  • Haven Zheng
  • Heibunny
  • Heikki Tiittanen
  • Helio Leonardo Pinheiro e Mota
  • Henrik Ählström
  • Henry Hood
  • HimKo
  • HouseFPV
  • Howard Simons
  • HyunohRyu
  • Icculus
  • iks
  • INFO TRX INC
  • Invader Monks
  • Ioannis Karageorgos
  • IT Lifesaver
  • Ivan Ganev
  • Ivan Josiah Lapis
  • Ivan Shapovalov
  • iwbjhbweriuhf
  • J
  • J L
  • Jaanus
  • Jackson Wyatt
  • Jacob Karaffa
  • Jacob Morgan
  • James Cadd
  • James Cobb
  • James Edwards
  • James Kocher
  • James Mayhugh
  • James Ye
  • Jamie Murphy
  • Jamie Scott
  • Jan Niehusmann
  • Jannick Oursin
  • Jari Hiltunen
  • Jason Crossley
  • Jason Downey
  • Jason Toland
  • Jasper Backer
  • Jay Davis
  • Jay Isaacs
  • Jazereel Goh
  • Jean-Daniel Croteau
  • Jean-Philippe Guilbault
  • Jeff
  • Jeff Bowman
  • Jeff Urlwin
  • Jennifer Herting
  • Jennifer Rowlett
  • Jeremy Abel
  • Jeremy Combs
  • Jeremy Hines
  • Jerremy Holland
  • Jerry Nall
  • Jerry Y. Chen
  • Jim Bailey
  • Jim Harbin
  • Jimmy Burgett
  • Jimmy Stanley
  • Joachim Bruening
  • Joe Hanson
  • Joe Hinteregger
  • Joe Ventura
  • Joel Jacobs
  • John Andersen
  • John Copeland
  • John F Glenn
  • John Holmes
  • John Kelley
  • John McGovern
  • Johnny Henson
  • Jon Ferguy
  • Joni Ruuskanen
  • Jonathan Slenders
  • Jonathan Vaughn
  • Joost Backer
  • Joseph Swift
  • Josh Nethery
  • Josh Ricker
  • Josh VanDeraa
  • Joshua Futterer
  • Jordan Blake
  • Jordi Pakey-Rodriguez
  • Joris van Embden
  • Jozef Riha
  • Jörgen Fredriksson
  • Julian Forero
  • Julian Schneider
  • Julien Angelier
  • Justin
  • Justin Waters
  • Kai Hadler
  • Kamil Chyba
  • Kari Matti Korpi
  • Karl Dunne
  • Karl Moos
  • Keith Muggleton
  • Ken Lee
  • Kenneth Younger III
  • Kenny Hui
  • KeonWoo PARK
  • Kevin Bajohr
  • Kevin Schwartz
  • Kevin Sherwood
  • Kiera Kujisawa
  • Kiran Schuler
  • Koloman
  • Konrad Neitzel
  • Krzysztof Żelaśkiewicz
  • Lance Ward
  • Larry Meaney
  • Lars
  • Lars Reinhardt
  • Lee Wilkinson
  • LeeNX
  • Leon Siegl
  • Leonard Feineis
  • Liran
  • Liviu Dimitriu
  • Lizardo Hernandez
  • LoCascio
  • Lordbob75
  • Lothar Schweikle-Droll
  • Louis Müller
  • LSDTripp
  • Ľubor Slušný
  • Luca Di Diomede
  • Lucio De Carli
  • Luiz Bizzio
  • Lukas Bischof
  • Lukas Kammerer
  • Lukas Söder
  • Maksim Terehin
  • Malcolm Cameron
  • Manfred Radeschnig
  • Marc Khouri
  • Marcin Wilk
  • Marcio Zimbres
  • Marco Rossi
  • Marcos Wolf
  • Marek Marczykowski-Górecki
  • Marius
  • Mar. Balske
  • Mark Farrell
  • Mark Gilbert
  • Mark Knam
  • Mark Robinson
  • Markrosoft
  • Markus Halm
  • Markus Schicker
  • Markus Sobczack
  • Marshall Bjerke
  • Marten Hermans
  • Martin Gasser
  • Martin Raine
  • Martin Suelmann
  • Martin Wilhelmi
  • Marvin Honderboom
  • Mateusz Grabowski
  • Mathias Uhl
  • Matt Kane
  • Matthew Cameron
  • Mauricio Allende
  • Max Evans
  • Mecky
  • Mehmet Aydoğdu
  • Michael Bartholomew
  • Michael Bell
  • Michael Bombe
  • Michael Collins
  • Michael Copeland
  • Michael Ho
  • Michael Kovacs
  • Michael Lynch
  • Michael Pennington
  • Michael Sage
  • Michael Stella
  • Michael Thalmann
  • Michael Wu
  • MichaelZ
  • Michel Bissonnette
  • Mikael Wikström
  • Mike Mason
  • Milan Múčka
  • Miles Davis
  • Minh Tang
  • Moez Tharani
  • Morgan Helton
  • Myron Weber
  • N Patel
  • Nathaniel Griswold
  • Nelson Lee
  • nezu
  • Nicholas Jeppson
  • Nicholas Kopas
  • Nicholas Walczak
  • Nick Leffler
  • Nick Roethemeier
  • Nico Baumgartner
  • Nicolai Kragh-Hansen
  • Nigel Smith
  • Nihal Fernando
  • Nils Orbat
  • Nis Wechselberg
  • Nithin Philips
  • Nod Swal
  • Nolan Haynes
  • nubbn
  • nybble
  • Oh Be
  • Oliver Schwarz
  • Oliver Zimmer
  • Omar El-Domeiri
  • Omar Siam
  • Oscar
  • Patrick
  • Patrick Fortin-Ducharme
  • Patrick McDowell
  • Patrick Wagstrom
  • Paul Bishop
  • Paul De La Rosa
  • Paul Pietkiewicz
  • Paul Tan
  • Pawel Trofimiuk
  • Peder Madsen
  • Peter
  • Peter Drayton
  • Peter Farrelly
  • Peter Okelmann
  • Petra Lohmann
  • Petri Heiskanen
  • Phil Wu
  • Philip Edwards
  • Philip Merricks
  • Pierre Brassart
  • Pierre Peine
  • posicat
  • pozitron03
  • Przemysław Szypowicz
  • P_Dmitrij
  • Qteal
  • Quattro Uno
  • Quentin Peten
  • Ralph Borchers
  • Ranc1d
  • Randall D Bilbrey
  • RandomJerk
  • Ref Chowdhury
  • Raphael Schitz
  • René Rathenau
  • ReysDad
  • Ricardo Marques
  • Richard
  • Richard Bernarts
  • Richard Fancher
  • Richard Freemantle
  • Richard Michael
  • Rico Cantrell
  • Rob
  • Rob Holden
  • Rob Tongue
  • Robert Klauco
  • Robert Weemhoff
  • Robin Gfatter
  • Rodion DENISYUK
  • Rohit Priyadarshi
  • Rolfs 3D UG
  • Ronald LeBaron
  • Ronald Wells
  • Ronny Haldorsen
  • rotx
  • Rufo Sanchez
  • Russell Scott
  • Ryan
  • Ryan Peacock
  • Samed Ozoglu
  • Sameul Davies
  • Samuel Cote
  • Samuel Vetsch
  • Samuel Walker
  • Sarah Foster
  • Sarten X
  • Satish Alwani
  • Scott
  • Scott Gagon
  • Scott Spicola
  • Scott Tusing
  • Scott Worthington
  • Scuba
  • Sean
  • Sean Akers
  • SEAT
  • Sebastian
  • Seonwoo Lee
  • Sergey Lukjanov
  • Seth Jennings
  • Shane Selling
  • Shawn Butts
  • Sheran Gunasekera
  • Shichun Chen
  • Shin Guey Wong
  • Simon Evans
  • Simon Sundgaard
  • Simplistic Realities
  • Sirmo
  • Snowy Maslov
  • Solve Technology
  • srepac
  • Stefan Bautz
  • Stefan Müller
  • Stefan Stemmer
  • Stefan Vaillant
  • Stephan Schmidt
  • Stephen
  • Stephen Hocking
  • Steve Jones
  • Steve Kerr
  • Steve Ovens
  • Steve Stringham
  • Steven Richter
  • Stratagem Solutions Ltd
  • Sven Breckler
  • sudo34
  • SuperHiTech
  • Tango_Echo_Alpha
  • Tarlak Desaydrone
  • TechBear
  • Ted
  • Tejun Heo
  • TheSnowedOne
  • TheTechGiant
  • Thomas Charisoulis
  • Thomas Gitlin
  • Thomas Hagenmaier
  • Thomas Hedberg Jensen
  • Thomas Price
  • Thomas Søfteland
  • Tim Lenz
  • Tim Wilkinson
  • Timo Brinkmann
  • Timothee Besset
  • TitomusPrime
  • Tom Lawson
  • Tom York
  • Tomas Kuchta
  • Tomáš hrubý
  • Torsten Droste
  • Tobias Schafferhans
  • Tracy Fitch
  • Tristan Schoening
  • Truman Kilen
  • turbochris
  • tutanak
  • Tyler
  • Udo Schroeter
  • Uli Fahrer
  • Vasily Lazarev
  • Vicente Salvador Cubedo
  • Vidru Eduard
  • Viktor Aschenbrenner
  • Viktor Ekmark
  • Vincent Chov
  • Vlad Sterescu
  • Volker Gropp
  • Walli
  • Walter_Ego
  • William Wenzel
  • Will Froning
  • William Hooper
  • William Perrin
  • William Stearns
  • Woojin Son
  • xMdb
  • Yanko Kaneti
  • Yaroslav Kulikovskikh
  • Yethal
  • Yevgeniy Kuksenko
  • Yew Kay Yan
  • Yogi
  • Yigal Dar
  • YURI LEE
  • Yurii Ostapchuk
  • Zeljko
  • zgen
  • Zoltan Magyari
  • Zsombor Vari

pikvm's People

Contributors

arch1mede avatar bbeaudoin avatar brokebit avatar duracell avatar ep1cman avatar eshu0 avatar etkaar avatar foamier avatar forsakenrei avatar frostman avatar iyesin avatar jmcombs avatar mdevaev avatar miguemely avatar mnin avatar mpldr avatar mtchetch avatar ndastur avatar ngiori avatar owlshrimp avatar potato-matic avatar prikith avatar psc-secunet avatar reedy avatar shantur avatar sk-415 avatar solareon avatar srepac avatar thecode avatar tryallthethings avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pikvm's Issues

`ttyd login` doesn't work due to an Arch Linux ARM bug

https://archlinuxarm.org/forum/viewtopic.php?f=15&t=14716&p=64407#p64407

At the moment, the "Terminal" functionality is a simple non-privileged shell. While this cannot be accessed without first authenticating to PiKVM and requires su - and a password to access full terminal functionality, there is a bug with the login program that ships with Arch Linux ARM in util-linux-2.36-2 preventing ttyd from being used with login directly.

I've documented two workarounds in the Arch Linux ARM bug reporting forum:

  1. Use strace ttyd login instead of ttyd login in the systemd unit file or
  2. Copy the login command from Raspbian for armv7l (32-bit) to /usr/local/bin/ and use that version with kvmd

I'm testing the workaround without copying the foreign login binary from Raspbian using the first option. It's not perfect, here's what I'm presently seeing with the workaround in-place:

  1. The terminal may fail to respond on initial boot
  2. After systemctl restart kvmd-webterm, the login: prompt seems to be consumed on initial connection and only the password: prompt appears.

At present I don't recommend using this workaround if you need the terminal functionality and the current authentication options are sufficient. Here is my copy of /etc/systemd/system/multi-user.target.wants/kvmd-webterm.service I'm currently using, note that login requires root privilege to manage the session properly:

[Unit]
Description=Pi-KVM - Web terminal (ttyd)
After=network.target

[Service]
ExecStart=/usr/bin/strace /usr/bin/ttyd --interface=/run/kvmd/ttyd.sock --port=0 /usr/bin/login 2>/dev/null
Type=simple
Restart=always
User=root
Group=root

ExecStartPost=/bin/bash -c 'sleep 3; chmod 660 /run/kvmd/ttyd.sock; chown kvmd-webterm:kvmd-webterm /run/kvmd/ttyd.sock'

[Install]
WantedBy=multi-user.target

Hide stream window

Tiny feature request: Option to close stream window. There's already an option to bring the window back but none to close it. I don't have a HDMI to CSI-2 bridge as of now but still testing pikvm while waiting for delivery. As I'm doing it on the same machine I regularly move my mouse around while hitting the edges of the stream window.

Quality of Life improvements to update / restart pikvm

nice to have; low priority

  • System and / or pikvm component update through web interface
  • pikvm restart (system and / or daemon) via web interface
  • update alias (.bashrc) or bash script similar to /usr/local/bin/rw to install the latest updates via pacman

Link libjson-c.so.4 to libjson-c.so.4.0.0 is missing

Fyi, there is a link missing and the kvmd-webterm service cannot be started:

[root@pikvm ~]# systemctl status kvmd-webterm
* kvmd-webterm.service - Pi-KVM - Web terminal (ttyd)
     Loaded: loaded (/usr/lib/systemd/system/kvmd-webterm.service; enabled; vendor preset: disabled)
     Active: failed (Result: exit-code) since Sat 2020-04-25 01:53:57 CEST; 47s ago
    Process: 327 ExecStart=/usr/bin/ttyd --interface=/run/kvmd/ttyd.sock --port=0 /bin/bash -c echo -ne "0;Pi-KVM Terminal: `hostname -f` (ttyd)^G"; cat /etc/motd; bash (co>
    Process: 328 ExecStartPost=/bin/bash -c sleep 3; chmod 660 /run/kvmd/ttyd.sock (code=exited, status=1/FAILURE)
   Main PID: 327 (code=exited, status=127)

Apr 25 01:53:54 pikvm.domain systemd[1]: Starting Pi-KVM - Web terminal (ttyd)...
Apr 25 01:53:54 pikvm.domain ttyd[327]: /usr/bin/ttyd: error while loading shared libraries: libjson-c.so.4: cannot open shared object file: No such file o>
Apr 25 01:53:54 pikvm.domain systemd[1]: kvmd-webterm.service: Main process exited, code=exited, status=127/n/a
Apr 25 01:53:57 pikvm.domain systemd[1]: kvmd-webterm.service: Control process exited, code=exited, status=1/FAILURE
Apr 25 01:53:57 pikvm.domain systemd[1]: kvmd-webterm.service: Failed with result 'exit-code'.
Apr 25 01:53:57 pikvm.domain systemd[1]: Failed to start Pi-KVM - Web terminal (ttyd).

Adding the link will solve the problem:

[root@pikvm lib]# rw
[root@pikvm lib]# ls -al  libjson*
lrwxrwxrwx 1 root root    18 May  5  2020 libjson-c.so -> libjson-c.so.4.0.0
-rwxr-xr-x 1 root root 54780 Apr 30  2020 libjson-c.so.4.0.0
lrwxrwxrwx 1 root root    18 May  5  2020 libjson-c.so.5 -> libjson-c.so.5.0.0
-rwxr-xr-x 1 root root 54780 Apr 30  2020 libjson-c.so.5.0.0
[root@pikvm lib]# ln -s /usr/lib/libjson-c.so.4.0.0 /usr/lib/libjson-c.so.4
[root@pikvm lib]# ls -al  libjson*
lrwxrwxrwx 1 root root    18 May  5  2020 libjson-c.so -> libjson-c.so.4.0.0
lrwxrwxrwx 1 root root    27 Apr 25 01:57 libjson-c.so.4 -> /usr/lib/libjson-c.so.4.0.0
-rwxr-xr-x 1 root root 54780 Apr 30  2020 libjson-c.so.4.0.0
lrwxrwxrwx 1 root root    18 May  5  2020 libjson-c.so.5 -> libjson-c.so.5.0.0
-rwxr-xr-x 1 root root 54780 Apr 30  2020 libjson-c.so.5.0.0
[root@pikvm lib]# systemctl start kvmd-webterm
[root@pikvm lib]# ro

"Remote key not fetched correctly from keyserver" error during compilation.

Hi,

I'm trying to compile the image and received the following error:

Step 26/73 : RUN pacman-key --keyserver pgp.mit.edu -r 912C773ABBD1B584 && pacman-key --lsign-key 912C773ABBD1B584 && echo -e "\n[pikvm]" >> /etc/pacman.conf && case "$BOARD" in zero|zerow) echo "Server = https://pikvm.org/repos/rpi" >> /etc/pacman.conf;; *) echo "Server = https://pikvm.org/repos/$BOARD" >> /etc/pacman.conf;; esac && echo "SigLevel = Required DatabaseOptional" >> /etc/pacman.conf
---> Running in e505b452212b
gpg: keyserver receive failed: No keyserver available
==> ERROR: Remote key not fetched correctly from keyserver.
The command '/bin/sh -c pacman-key --keyserver pgp.mit.edu -r 912C773ABBD1B584 && pacman-key --lsign-key 912C773ABBD1B584 && echo -e "\n[pikvm]" >> /etc/pacman.conf && case "$BOARD" in zero|zerow) echo "Server = https://pikvm.org/repos/rpi" >> /etc/pacman.conf;; *) echo "Server = https://pikvm.org/repos/$BOARD" >> /etc/pacman.conf;; esac && echo "SigLevel = Required DatabaseOptional" >> /etc/pacman.conf' returned a non-zero code: 1
make[1]: *** [Makefile:208: os] Error 1

What I'm doing wrong? Please help!

Regards,
Slava

Can't build for RPI2 (broken QEMU 5.1.0)

Dear,

I'm trying to build an image for my RPI2 + HDMI CSI Hardware.
I followed instructions in building_os.md but build fails:

`Step 21/77 : RUN gcc -fPIC -shared -o /usr/local/lib/libpreload-semop.so /tmp/semop-wrapper.c
---> Running in 5cfe33b6374d

Allocating guest commpage: Operation not permitted

The command '/bin/sh -c gcc -fPIC -shared -o /usr/local/lib/libpreload-semop.so /tmp/semop-wrapper.c' returned a non-zero code: 1

make[1]: *** [Makefile:209 : os] Erreur 1
make[1] : on quitte le répertoire « /home/tsos/os/.pi-builder »
make: *** [Makefile:53 : os] Erreur 2
`

Freshly installed Ubuntu 20.04 server in a Virtualbox VM ( macos host)

Please help !
Etienne

PiKVM on RPi 4 1GB

Hi,
In documentation there is a sentence about requirements "RPi4 with 2Gb RAM is pretty enough". "Pretty enogh" would suggest that this is even more then you need and possibly 1GB would fit here too. Is it that right or 2GB version should be secure minimum for this software?

Thanks in advance

Possibility to further use case LEDs and Buttons

Hi,

I found out about your project the last couple of days and I'm highly motivated to realize this for my own server at home!

In order to setup the whole as clean as possible I want to design a PCB, which will take one PCI slot (without connecting to PCI ofc) of the case and offers a generic connector for the ATX control and LEDs. However, the schematic breadboard design is not hinting any possibility of further using remaining buttons and LEDs of the case.

Out of my (current) understanding, it should be done by simply wiring the buttons and LEDs to the respective parts of the optocopplers. The resistor at Pin 1 of the LED optocopplers has to be adapted probably in order to permit enough current, I guess?

My question (tl;dr): Can you give some hints on how to further use remaining buttons/LEDs of the case?

Anyway thank you in advance for this neat project!

Hardware KVM doesn't recognise keyboard hotkey switching from pikvm

Hi There,

As discussed in Discord, I have the following setup with a pikvm (Pi4, B101) with HDMI and USB connected to a 4 port Hardware HDMI KVM switch. The Hardware KVM then connects to 2 physical hosts.

DELL Keyboard (physical, USB)---------------|
                                            |
                                            V   	       ---> Host 1 (HDMI and USB)
Pivkm (Pi4,B101, HDMI + USBC) ---> Hardware HDMI KVM Switch ---|
							       ---> Host 2 (HDMI and USB)

When I manually switch the input host (either on the Hardware KVM itself or with a physical Dell Keyboard plugged into the Hardware KVM) between Host 1 and Host 2, this works fine and pikvm streams the HDMI output from Host 1 / 2 as expected. The pikvm keyboard also sends the usual keyboard signals to the selected host.

When using the Dell physical USB keyboard attached to the hardware KVM, I can use the following "hotkey sequences" and the Hardware KVM responds as expected:

CTRL (wait < 5 secs), CTRL - Cycles between connected Hosts 1 and 2
CTRL+SHIFT+1 - Changes to Input Host 1
CTRL+SHIFT+2 - Changes to Input Host 2

The issue is that, while I can send normal keystrokes fine with pikvm/virtual keyboard, the above "hotkey sequences" are not picked up by the Hardware KVM when sent via pikvm?

As requested on Discord, here's the output of the usbhid-dump -s BUS:DEVICE command for the Dell Keyboard when:

(A) Run on Host 2 with the Dell Keyboard connected directly to Host 2
(B) Run on Host 2 with the Dell Keyboard connected via the Hardware KVM Switch

Thanks for taking the time to look into this!

(A) usbhid-dump-host2-direct-connect-001-005.txt
(B) usbhid-dump-host2-via_KVM_switch-001-007.txt

Why splitting the USB cable for RPI4? Works flawlessly without

RPi4 only: since it uses one USB-C female connector to giving power and keyboard/mouse/drive emulation you also need to make a special cable to split DATA and POWER lines from USB-C. You can make it from two suitable connecting cables, or solder from scratch. Be sure to check the circuit diagram, otherwise you may damage your devices. Pinout specific used connectors you can easily find on request "USB pinout" in Google. Please note that if you will make a cable based on the two factory ones, the colors of the wires may not match those shown in the picture. Use a multimeter to make sure the connections are correct.

Why do you recommend splitting the cable? On a lot of PCs you can set that USB ports get always power even in OFF state. You can set that in BIOS. So I just want to understand the background of your advice.

With a good quality USB-C cable connected to a USB3.0 Port it provides even enough power that the PI doesn't print its undervolted message.
If power shouldn't be sufficient I would recomment using backpowering USB-A to USB-A cable. It is not possible to power it this way, but only to give it additional power. Even my RPI4 gets enough power via the PC USB3.0 connection it still draws 270 mA (=1,35W) when using backpower.

It works so smooth, just install, connect and you're ready. Splitting the cable is a effort you can easily avoid that way.

Login page inputs loose focus

DarkSide on Discord reported the following issue with the login page on mobile phone / tablet:

just upgraded and now it is not possible to type user or password from web browser on tablet/smartphone. It doesn't even open the soft keyboard. I didn't tried with last updates, so i cannot figure if is an issue from this last update or from any of the last ones.

I can reproduce this on my android smartphone, Windows 10 with Firefox and Windows 8.1 with Firefox / Chrome.

If you load the login page and just type (on PC) you can login with no problems. If you happen to click on the username or password field it looses focus and you can't enter either of the fields again reliably. Did some digging (with my very limited Javascript skills) and saw that kvmd/web/share/js/wm.js line 260 seems to grab the focus immediately when you click into any of the fields.

ezgif-1-2a1e66d5197f

Capture and record video

This is a feature request to be able to capture/record the video stream to a file on a SMB share. This might already be possible using VNC and VideoLAN, but it would be nice to have a "record" button in the UI with a dialog choosing where to save the video to a file server using SMB)

Please help with an error during installation

Hi,
I'm trying to compile OS on Windows subsystem for Linux and receiving the following error during installation:

~$ sudo sh get-docker.sh
# Executing docker install script, commit: f45d7c11389849ff46a6b4d94e0dd1ffebca32c1
+ sh -c apt-get update -qq >/dev/null
+ sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
+ sh -c curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" | apt-key add -qq - >/dev/null
Warning: apt-key output should not be parsed (stdout is not a terminal)
curl: (7) Failed to connect to download.docker.com port 443: Connection refused
gpg: no valid OpenPGP data found.

What should I do to fix this issue?

Thanks!
Slava

Login page issue with username capitalization

When using a wrong username and / or password the login page will display "Invalid username or password" as expected.
But if the username is known but has the wrong capitalization a different error message in plain json is displayed:

image

In this example I used "Admin" instead of "admin".

Access pikvm over the internet

First off: Awesome project. From what I've read this is exactly what I was looking for.

Do you have any plans on implementing access to pikvm over the internet? I was thinking of something like an automatic VPN connection once a network with internet access is detected or a server that pikvm is connecting to that provided the access (similar to what TeamViewer does).
My idea is to ship this to friends / family, let them hook it up to the PC / laptop and get access to their machine without having the trouble of any port forwarding.

Mass storage emulation / mounting issue

I noticed two things while playing around with the mass storage mount feature.

  1. When first connected to my computer pikvm provided a "Linux File-CD Gadget USB Device" device listed as a DVD/CD-Rom drive. After playing around with mounting / unmounting 2 images I disconnected the USB cable between pikvm and my computer. After reconnecting pikvm provided the same device name but the type changed from DVD drive to Disk drive. The drive mode will always be the last one I choose before disconnecting the USB cable but it never changes when I change the drive mode in pikvm.
    image
    mmc_2020-08-15_16-09-57

  2. The flash drive mode does not work at all with the two ISO images I tested. CD-ROM works with both images although the 4GB ISO won't show up (as expected) but at least Windows is detecting that something was "inserted" into the virtual drive and pops up an explorer window. I've tried swapping around the images and disk modes but flash doesn't work in any combination. I can see that something with the appropriate size was mounted but the filesystem is always RAW.
    image

[2020-08-15 17:15:05 kvmd.service] --- kvmd.plugins.msd.otg.helpers INFO --- Unlocking the drive ...
[2020-08-15 17:15:05 kvmd.service] --- kvmd.plugins.msd.otg.helpers INFO --- Executing helper ['/usr/bin/sudo', '--non-interactive', '/usr/bin/kvmd-helper-otgmsd-unlock', 'unlock'] ...
[2020-08-15 17:15:05 kvmd.service] --- kvmd : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/bin/kvmd-helper-otgmsd-unlock unlock
[2020-08-15 17:15:05 kvmd.service] --- pam_unix(sudo:session): session opened for user root by (uid=0)
[2020-08-15 17:15:05 kvmd.service] --- pam_unix(sudo:session): session closed for user root
[2020-08-15 17:15:05 kvmd.service] --- kvmd.plugins.msd.otg.helpers INFO --- Console: Sending SIGUSR1 to MSD 'file-storage' kernel thread with pid=396 ...
[2020-08-15 17:15:05 kvmd.service] --- aiohttp.access INFO --- [admin (token) / 100.126.161.74] 'POST /msd/disconnect HTTP/1.0' => 200; size=193 --- referer='https://xxx.xxx.xxx.xxx/kvm/'; user_agent='Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'
[2020-08-15 17:15:05 kvmd.service] --- kvmd.apps.kvmd.streamer INFO --- Console: ================================================================================
[2020-08-15 17:15:05 kvmd.service] --- kvmd.apps.kvmd.streamer INFO --- Console: -- ERROR [1518.288 stream] -- Can't open device: No such file or directory
[2020-08-15 17:15:05 kvmd.service] --- kvmd.apps.kvmd.streamer INFO --- Console: -- INFO [1518.288 stream] -- Sleeping 1 seconds before new stream init ...
[2020-08-15 17:15:06 kvmd.service] --- kvmd.apps.kvmd.streamer INFO --- Console: ================================================================================
[2020-08-15 17:15:06 kvmd.service] --- kvmd.apps.kvmd.streamer INFO --- Console: -- ERROR [1519.288 stream] -- Can't open device: No such file or directory
[2020-08-15 17:15:06 kvmd.service] --- kvmd.apps.kvmd.streamer INFO --- Console: -- INFO [1519.288 stream] -- Sleeping 1 seconds before new stream init ...
[2020-08-15 17:15:07 kvmd.service] --- aiohttp.access INFO --- [admin (token) / 100.126.161.74] 'POST /msd/set_params?image=AcronisBootablePEMedia_Win.iso HTTP/1.0' => 200; size=193 --- referer='https://xxx.xxx.xxx.xxx/kvm/'; user_agent='Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'
[2020-08-15 17:15:07 kvmd.service] --- kvmd.apps.kvmd.streamer INFO --- Console: ================================================================================
[2020-08-15 17:15:07 kvmd.service] --- kvmd.apps.kvmd.streamer INFO --- Console: -- ERROR [1520.288 stream] -- Can't open device: No such file or directory
[2020-08-15 17:15:07 kvmd.service] --- kvmd.apps.kvmd.streamer INFO --- Console: -- INFO [1520.288 stream] -- Sleeping 1 seconds before new stream init ...
[2020-08-15 17:15:08 kvmd.service] --- kvmd.apps.kvmd.streamer INFO --- Console: ================================================================================
[2020-08-15 17:15:08 kvmd.service] --- kvmd.apps.kvmd.streamer INFO --- Console: -- ERROR [1521.289 stream] -- Can't open device: No such file or directory
[2020-08-15 17:15:08 kvmd.service] --- kvmd.apps.kvmd.streamer INFO --- Console: -- INFO [1521.289 stream] -- Sleeping 1 seconds before new stream init ...
[2020-08-15 17:15:09 kvmd.service] --- kvmd.apps.kvmd.streamer INFO --- Console: ================================================================================
[2020-08-15 17:15:09 kvmd.service] --- kvmd.apps.kvmd.streamer INFO --- Console: -- ERROR [1522.289 stream] -- Can't open device: No such file or directory
[2020-08-15 17:15:09 kvmd.service] --- kvmd.apps.kvmd.streamer INFO --- Console: -- INFO [1522.289 stream] -- Sleeping 1 seconds before new stream init ...
[2020-08-15 17:15:10 kvmd.service] --- kvmd.plugins.msd.otg.helpers INFO --- Unlocking the drive ...
[2020-08-15 17:15:10 kvmd.service] --- kvmd.plugins.msd.otg.helpers INFO --- Executing helper ['/usr/bin/sudo', '--non-interactive', '/usr/bin/kvmd-helper-otgmsd-unlock', 'unlock'] ...
[2020-08-15 17:15:10 kvmd.service] --- kvmd : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/bin/kvmd-helper-otgmsd-unlock unlock
[2020-08-15 17:15:10 kvmd.service] --- pam_unix(sudo:session): session opened for user root by (uid=0)
[2020-08-15 17:15:10 kvmd.service] --- kvmd.apps.kvmd.streamer INFO --- Console: ================================================================================
[2020-08-15 17:15:10 kvmd.service] --- kvmd.apps.kvmd.streamer INFO --- Console: -- ERROR [1523.289 stream] -- Can't open device: No such file or directory
[2020-08-15 17:15:10 kvmd.service] --- kvmd.apps.kvmd.streamer INFO --- Console: -- INFO [1523.289 stream] -- Sleeping 1 seconds before new stream init ...
[2020-08-15 17:15:10 kvmd.service] --- pam_unix(sudo:session): session closed for user root
[2020-08-15 17:15:10 kvmd.service] --- kvmd.plugins.msd.otg.helpers INFO --- Console: Sending SIGUSR1 to MSD 'file-storage' kernel thread with pid=396 ...
[2020-08-15 17:15:10 kvmd.service] --- aiohttp.access INFO --- [admin (token) / 100.126.161.74] 'POST /msd/connect HTTP/1.0' => 200; size=193 --- referer='https://xxx.xxx.xxx.xxx/kvm/'; user_agent='Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'

My PC is running Windows 8.1 and I'm using a RPi 4 2GB with the official pikvm image. USB connection is made through a USB2 splitter cable.
Edit: Doesn't work either with USB-C.

KVMD: 1.88
Streamer: 1.21 (ustreamer)
HAS_PDEATHSIG: Yes
WITH_GPIO: Yes
WITH_OMX: Yes
WITH_PTHREAD_NP: Yes
WITH_SETPROCTITLE: Yes
Linux kernel:
Machine: armv7l
Release: 5.4.51-2-ARCH
Version: #1 SMP PREEMPT Sat Aug 8 23:15:21 UTC 2020

Edit 2:
Images tested:

  • Windows 10 1909
  • Acronis WinPE
  • Ubuntu 18.04
  • archlinux-2020.08.01-x86_64.iso
  • Clonezilla Live 2.6.5

Allow For control of Multiple Hosts

Hello

I am s till in the process of getting this to work on my ZeroW's and Pi 3 as that is what the Fmstrat/diy-ipmi used when I first set up the system. I wanted to switch to this to see if there is a way that we could open this up to manage multiple hosts at a time from a RPi4 or if it would be better to manage this on a Per Host Basis with 3 seperate ZeroW's?

WIFI_ESSID fails if the ESSID has spaces

My wireless network ESSID is "GET OFF MY LAN". When configuring Arch Linux wireless using wifi-menu in rw mode, it creates an interface that netctl can enable; when escaped by systemd-escape the output, and device-specific unit file, appears as

wlan0\x2dGET\x20OFF\x20MY\x20LAN

During the build process ("Building OS"), make os calls docker build with the WIFI_ESSID='GET \ resulting in

/bin/sh: 12: Syntax error: Unterminated quoted string

Looks like BUILD_OPTS of ~/os/.pi-builder/Makefile (line 35) may be splitting based on the IFS, ignoring the quotes around the variable name. Unfortunately, and admittedly, it's been a while since I've coded a Makefile, for now I've created an alternate ESSID without special characters or spaces and was able to complete the build successfully.

Keep mass storage dropdown open

While uploading a new image the mass storage dropdown menu disappears after selecting the .iso file from the computer with a double click. It would be great if either the upload would start immediately after selecting the image or if the dropdown would stay open to click "Start". It does stay open if the file is selected in the explorer window and confirmed with "Open".
Same goes for "Disconnect drive". Users might want to swap to a different image but the dropdown menu disappears as soon as you click on "Disconnect drive" and you'll have to reopen it again.

Feautre request: FPGA capture device

Hello!

A little discovery shows it is possible to create FPGA based capture hardware device using simple fpga boards and VGA output.

If you google you will find a lot of FPGA VGA examples and ready verilog scripts to create simple output -> VGA, but simple rework of code can create perfect and super cheap FPGA capturing device using standard VGA output.

How do you like this idea?

new hdmi-csi board version

When I looked at the hdmi to csi adapter on alibaba, I noticed they suggested a new version https://www.aliexpress.com/item/4000152180240.html which has two sizes of ffc connector. If/when you know how it works, you might want to add info comparing them. In the photos of the new version, it appears that the smaller connector is rotated 180 degrees from its silkscreen and the solder pads which should hold it down, which is concerning...

You made it onto hackaday and from there into my news feed. That's some crazy soldering you've managed!

ASUS bios resolution glitch

Hi!

There is a bug/glitch with ASUS bios when using the TC358743 chip (I'm using the Lusya bridge). My guess is because the "low" resolution (720p).

Screen Shot 2020-02-02 at 12 32 42

Is there any way to force the hdmi stream at 1080p at lower framerates?

Thanks!

TC358743 broken on 5.4 kernel

I use a RPi 4B. When I try to reduce the stream quality, it doesn't work. From dmesg:

[  178.270874] 1f40: 00000000 00088cb8 eff550f4 c021a420 00000000 c1400000 c1404fb0 c1404ff8
[  178.288902] 1f60: c14d9580 c126ce48 30c5387d 00000000 c1500e10 c1401f90 c0209268 c020926c
[  178.306991] 1f80: 60070013 ffffffff
[  178.320471] [<c0201a78>] (__irq_svc) from [<c020926c>] (arch_cpu_idle+0x38/0x3c)
[  178.337882] [<c020926c>] (arch_cpu_idle) from [<c025ef38>] (do_idle+0xc4/0x148)
[  178.355092] [<c025ef38>] (do_idle) from [<c025f2a8>] (cpu_startup_entry+0x18/0x20)
[  178.372530] [<c025f2a8>] (cpu_startup_entry) from [<c1200f90>] (start_kernel+0x500/0x540)
[  178.480634] i2c-bcm2835 fe205000.i2c: i2c transfer timed out
[  178.495735] tc358743 10-000f: i2c_wr: writing register 0x500 from 0xf failed
[  179.520647] i2c-bcm2835 fe205000.i2c: i2c transfer timed out
[  179.535793] tc358743 10-000f: i2c_wr: writing register 0x500 from 0xf failed
[  180.560663] i2c-bcm2835 fe205000.i2c: i2c transfer timed out
[  180.575765] tc358743 10-000f: i2c_wr: writing register 0x500 from 0xf failed
[  181.600674] i2c-bcm2835 fe205000.i2c: i2c transfer timed out
[  181.615807] tc358743 10-000f: i2c_wr: writing register 0x500 from 0xf failed
[  181.633387] tc358743 10-000f: i2c_rd: reading register 0x14 from 0xf failed

Btw, I have a B101 Revision 4. I think that the RPi or the B101 could have a problem. What do you think?

Originally posted by @stsirakidis in #16 (comment)

Pikvm with Pi4 powered by PoE Hat does not seem to find the auvidea B101

Hi There,

I can successfully log into pikvm and stream video using the B101 HDMI->CSI adapter on a pi4 when USB-C powered but when I try the same setup (same SD card, B101, input host etc) but with the pi4 powered using a PoE Hat rather than USB-C power, it appears pikvm cannot find the B101 when booting (even though the B101 green power light is enabled indicating the B101 is being powered)...

I've attached the dmesg boot output from when (A) pi4 powered by USB-C and (b) pi4 powered by PoE Hat.

When the pi4 boots with USB-C power, I get the following type of messages in dmesg:

[    9.190789] tc358743 0-000f: tc358743 found @ 0x1e (bcm2835 I2C adapter)

When the pi4 boots with PoE Hat power, I get the following type of messages in dmesg:

[     10.002996] tc358743 0-000f: i2c_rd: reading register 0x0 from 0xf   failed
[     10.010416] tc358743 0-000f: not a TC358743 on address 0x1e

Thanks for taking the time to take a look!
A-dmesg-pi4-with-USBC-power.txt
B-dmesg-pi4-with-PoE-power.txt

Blurry Video

I'm using a Raspberry Pi 4 with the USB HDMI dongle, my video is coming out quite blurry - is there any diagnostic work I can do to check this or scope out what exactly is causing it?

Example:
Screenshot_2020-09-09 Pi-KVM Session localhost localdomain

Instructions to connect B101 to RPI 4

Hello,

Is there any instructions how to connect B101 to RPI 4? Will it work with the cable supplied with B101?

By the way, following the build instructions on Ubuntu, I received the following message:
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock:

Since I'm not familiar with docker, it took me a while to find the solution:
sudo chmod 666 /var/run/docker.sock
I think this info could be helpful to other people.

Regards,
Slava

Optocouplers problem

Hi, the optocoupler I bought isn't working for some reason, so I'm using this relay instead.

The problem I have, is that the logic needs to be inverted for this relay to work, otherwise it will initialized with the "on" state and the PC won't be able to start. Inverting the logic at the relay as "normally open" will work only if the rpi is on.

For the moment I am manually editing the set_output and write methods on
/usr/lib/python3.8/site-packages/kvmd/gpio.py for this to work.

We could use an ENV variable, like GPIO_INVERT_WRITE and GPIO_INVERT_READ.

Readme Update for Control of the Motherboard

Hello,

Not meaning to nitpick, but it wasn't clear at first that the Mosfets are required for the v2 models due to the way the Readme was structured.

You have the Mosfets listed under v0 only:

HID Subsystem (only for v0)

4x MOSFET relay OMRON G3VM-61A1

Capture and / or decode PC speaker signal

For a permanent installation the available options are already great (Power switch, Reset, HDD Led, Power LED) but is IMHO missing one crucial part. The internal PC speaker output for BIOS POST diagnostics. It would be a great addition to the already available information and control options in pikvm.
I'm seeing two options here:

  1. Capture the audio and redirect it to the web interface
  2. Decode the signal and display the beeps as some kind of morse code history in the web interface

I did some research and the PC speaker (piezo) seems to be controlled via voltage. (Wikipedia)[https://en.wikipedia.org/wiki/PC_speaker#Pulse-width_modulation]
In theory it should be possible to detect those voltages and the length. I've ordered a MCP3008-I/P and give it a shot once it arrives.

Enable Lowcost S-Video support for V2 Platforms

In the Documentation you state that S-Video capture only works for the v2 Platforms.

I would however like to use a Pi Zero W, with a USB Video Capture UTV 007. Can you clarify why it isn't possible to use these on the V2 Platform devices?

API documentation?

I'm looking for documentation, or even just the source code, for the API for pikvm. I looked through this repo, the website, and subreddit and I couldn't find anything.

If documentation doesn't exist I'm absolutely willing to help with that too..

Mouse Jiggler

Not sure if this is in scope but it would be awesome to have a mouse jiggle (or similar feature) to prevent a client computer from going to sleep/locking.

Can't build OS, wrong date inside docker

Hi, I have problems running make os.

$ make os
[ ... ] 
Step 14/77 : RUN rm -f /etc/localtime 	&& ln -s "/usr/share/zoneinfo/$TIMEZONE" /etc/localtime
 ---> Using cache
 ---> 64e3d0ac22f9
Step 15/77 : RUN echo "HOOKS=(base udev block filesystems)" >> /etc/mkinitcpio.conf
 ---> Using cache
 ---> a9f9c08e6fdd
Step 16/77 : RUN echo "Server = $REPO_URL/\$arch/\$repo" > /etc/pacman.d/mirrorlist 	&& pacman-key --init 	&& pacman-key --populate archlinuxarm
 ---> Running in f2eafdce47d2
gpg: /etc/pacman.d/gnupg/trustdb.gpg: trustdb created
gpg: no ultimately trusted keys found
gpg: starting migration from earlier GnuPG versions
gpg: porting secret keys from '/etc/pacman.d/gnupg/secring.gpg' to gpg-agent
gpg: migration succeeded
gpg: Generating pacman keyring master key...
gpg: agent_genkey failed: End of file
gpg: key generation failed: End of file
gpg: Done
==> Updating trust database...
gpg: no need for a trustdb check
==> Appending keys from archlinuxarm.gpg...
gpg: key B55C5315DCD9EE1A was created 16088 days in the future (time warp or clock problem)
gpg: key B55C5315DCD9EE1A was created 16048 days in the future (time warp or clock problem)
gpg: key B55C5315DCD9EE1A was created 16048 days in the future (time warp or clock problem)
gpg: key B55C5315DCD9EE1A was created 16048 days in the future (time warp or clock problem)
gpg: key B55C5315DCD9EE1A: no valid user IDs
gpg: key BC704E86B823CD25 was created 16088 days in the future (time warp or clock problem)
gpg: key BC704E86B823CD25 was created 16048 days in the future (time warp or clock problem)
gpg: key BC704E86B823CD25 was created 16048 days in the future (time warp or clock problem)
gpg: key BC704E86B823CD25 was created 16048 days in the future (time warp or clock problem)
gpg: key BC704E86B823CD25: no valid user IDs
gpg: key BF7EEF7A9C6B5765 was created 16088 days in the future (time warp or clock problem)
gpg: key BF7EEF7A9C6B5765 was created 16048 days in the future (time warp or clock problem)
gpg: key BF7EEF7A9C6B5765 was created 16048 days in the future (time warp or clock problem)
gpg: key BF7EEF7A9C6B5765 was created 16048 days in the future (time warp or clock problem)
gpg: key BF7EEF7A9C6B5765: no valid user IDs
gpg: key 77193F152BDBE6A6 was created 16088 days in the future (time warp or clock problem)
gpg: key 77193F152BDBE6A6 was created 16048 days in the future (time warp or clock problem)
gpg: key 77193F152BDBE6A6 was created 16048 days in the future (time warp or clock problem)
gpg: key 77193F152BDBE6A6 was created 16048 days in the future (time warp or clock problem)
gpg: key 77193F152BDBE6A6: no valid user IDs
==> Locally signing trusted keys in keyring...
  -> Locally signing key 69DD6C8FD314223E14362848BF7EEF7A9C6B5765...
==> ERROR: 69DD6C8FD314223E14362848BF7EEF7A9C6B5765 could not be locally signed.
  -> Locally signing key 02922214DE8981D14DC2ACABBC704E86B823CD25...
==> ERROR: 02922214DE8981D14DC2ACABBC704E86B823CD25 could not be locally signed.
  -> Locally signing key 9D22B7BB678DC056B1F7723CB55C5315DCD9EE1A...
==> ERROR: 9D22B7BB678DC056B1F7723CB55C5315DCD9EE1A could not be locally signed.
The command '/bin/sh -c echo "Server = $REPO_URL/\$arch/\$repo" > /etc/pacman.d/mirrorlist 	&& pacman-key --init 	&& pacman-key --populate archlinuxarm' returned a non-zero code: 1
Makefile:207: [makefile error ...]

When I add RUN date in the .pi-builder/stages/os/Dockerfile.part and run it again, it shows that date is set to 1970.
It worked once in my previous environment, now I'm running it it in qemu vm with debian buster and can't figure out whats wrong.
Why docker have such problems with setting date?

Keypad support

As discussed with @mdevaev:

The keypad is not working at the moment, tested with a german keyboard layout.

Alternative for 390 Ohm resistors.

Hello mdevaev,
I would like to build the v2 version of your project for my server. But I can't get 390 Ohm resistors in Switzerland.

I have already ordered: 10 Ohm, 100 Ohm, 220 Ohm, 330 Ohm, and 470 Ohm.

Can I use one or more of these instead of the 390 Ohm?

Friendly greetings
Michael Reber

Options for powersave

FIrst I want to thank you for your great project. You provide exactly the thing I was looking for. Thank you very much for all your effort you put into this project.

Powering Off HDMI saves 25 mA on the PI Zero W. Because powersupplies don't have 100 % efficiency you save 0.15-0.2 Watt. https://www.jeffgeerling.com/blogs/jeff-geerling/raspberry-pi-zero-conserve-energy It sounds not a lot, but in sum it is a lot. This amount also applies to the RPI4.
99 % of users won't need the HDMI output of the KVM Raspberry PI.
So we could savely turn off HDMI via /opt/vc/bin/tvservice -o
On Raspian I do this with a crontab "@reboot" line, however I'm not firm with ArchLinux. So it would be great if you add an option to disable HDMI.

ComputeModule

RaspberryPi with hat is very big and difficult to cool, so, why don't you think about making board for RPi ComputeModule, or JetsonNano CM with some cooling solutions - it will be very handful. It could be in form of PCI card - physically only, not using PCI-connector - to get power inside pc and connect RJ-45 from back of case.

How-To: Additional Info

For those random folks who come across this from Reddit, Google, etc, you should have a section telling folks on how to connect things up to the computer/server they are looking to remotely manage. Would be helpful.

Also a section with commentary about options for older systems that have, say, VGA or DVI output on the motherboard, but no HDMI, etc.

Little touches to the documentation :)

Nice work!

Add ability to mount writable images

It would be really nice if we could mount read/write images to use them as virtual hdds or usb drives.

e.g: could be "writable" or "read-only"

pikvm-usb-mock

pikvm-usb-mock

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.