├── .DS_Store ├── content ├── files │ ├── dfu-soctoolkit-1.png │ ├── dfu-soctoolkit-2.png │ └── dfu-driver-assistant.png ├── docs │ ├── advanced-usage │ │ ├── 3d-model.mdx │ │ ├── factory-reset.mdx │ │ ├── developing.mdx │ │ └── ota-updates.mdx │ ├── video │ │ ├── video-quality.mdx │ │ └── hdmi-edid.mdx │ ├── networking │ │ ├── wake-on-lan.mdx │ │ ├── remote-access.mdx │ │ └── local-access.mdx │ ├── peripheral-devices │ │ ├── alternative-power-sources.mdx │ │ ├── keyboard-and-mouse.mdx │ │ ├── mount-drive.mdx │ │ └── extension-port.mdx │ ├── index.mdx │ └── getting-started │ │ ├── faq.mdx │ │ ├── troubleshooting.mdx │ │ └── quick-start.mdx └── scripts │ └── install-tailscale.sh ├── README.md ├── CODE_OF_CONDUCT.md └── LICENSE /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jetkvm/website/HEAD/.DS_Store -------------------------------------------------------------------------------- /content/files/dfu-soctoolkit-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jetkvm/website/HEAD/content/files/dfu-soctoolkit-1.png -------------------------------------------------------------------------------- /content/files/dfu-soctoolkit-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jetkvm/website/HEAD/content/files/dfu-soctoolkit-2.png -------------------------------------------------------------------------------- /content/files/dfu-driver-assistant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jetkvm/website/HEAD/content/files/dfu-driver-assistant.png -------------------------------------------------------------------------------- /content/docs/advanced-usage/3d-model.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "3D Model" 3 | order: 3 4 | --- 5 | 6 | We've made the 3D model of the JetKVM device available for download. This file is useful for customizing the physical hardware, or just exploring the device design in detail. 7 | 8 | You can download the STP file of the JetKVM device here. 9 | 10 | ### Join the 3D Design Showcase 11 | 12 | We encourage community members to share their 3D designs and modifications in our **#3d-showcase** channel on Discord. Whether you're modifying the JetKVM or building creative extensions, we'd love to see what you come up with! 13 | 14 | Join our Discord community at [jetkvm.com/discord](https://jetkvm.com/discord) to share your designs and connect with other JetKVM enthusiasts! 15 | -------------------------------------------------------------------------------- /content/docs/video/video-quality.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Video Quality" 3 | description: "Learn about JetKVM's video quality settings. Understand how to adjust video stream bitrate for optimal performance based on your connection speed and resolution requirements." 4 | order: 1 5 | --- 6 | 7 | **JetKVM provides a video quality toggle with three options: High, Medium, and Low**, allowing you to adjust the video stream's bitrate based on your connection speed and resolution needs. High quality delivers the clearest video for fast connections, medium quality balances performance and visual clarity, and low quality minimizes bandwidth usage for slower networks. 8 | 9 | The system automatically calculates the optimal bitrate for each setting, ensuring smooth performance during remote sessions, with a minimum bitrate of 100 kbps to maintain functionality. 10 | -------------------------------------------------------------------------------- /content/docs/video/hdmi-edid.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "HDMI EDID" 3 | description: "Understand JetKVM's EDID (Extended Display Identification Data) configuration options. Learn when and how to modify EDID settings for optimal display compatibility with remote devices." 4 | order: 2 5 | --- 6 | 7 | ## EDID 8 | 9 | EDID (Extended Display Identification Data) is the information about video modes supported by the video capture device, in this case, JetKVM. This data helps your JetKVM communicate with connected devices to determine the best display settings automatically. **The default EDID configuration is flexible enough for most scenarios**, so typically, you won't need to modify it. 10 | 11 | However, in certain cases, like when dealing with unusual UEFI or BIOS configurations, you may need to adjust the EDID settings. To do this, simply access the Settings in the JetKVM WebUI, where you'll find a dedicated section for EDID configuration. 12 | 13 | You can either select from a list of predefined EDID presets that we provide or input your own custom EDID. 14 | -------------------------------------------------------------------------------- /content/docs/networking/wake-on-lan.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Wake on Lan" 3 | order: 2 4 | description: "Learn how to use Wake on LAN with JetKVM to remotely power on or wake up computers on your local network. Discover the convenience of sending magic packets from the web UI for both local and remote access." 5 | --- 6 | 7 | ## Wake on LAN 8 | 9 | Wake on LAN is a standard feature that allows a computer to be powered on or awakened from sleep mode by receiving a network message, known as a "magic packet." This message is sent from one device to another on the local area network (LAN). 10 | 11 | With JetKVM, you can easily send a magic packet to any device on your LAN directly from the web UI. Simply enter the MAC address of the computer you want to wake, and the magic packet will be transmitted to initiate the process. 12 | This feature is **available for both local and remote access**, allowing you to wake any compatible device on your LAN whether you’re using JetKVM locally or remotely. 13 | 14 | Please note, the target computer must be configured to listen for incoming magic packets to be awakened. 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | JetKVM logo 3 | 4 | ### Documentation 5 | 6 | [Discord](https://jetkvm.com/discord) | [Website](https://jetkvm.com) | [Issues](https://github.com/jetkvm/website/issues) | [Docs](https://jetkvm.com/docs) 7 | 8 | [![Twitter](https://img.shields.io/twitter/url/https/twitter.com/jetkvm.svg?style=social&label=Follow%20%40JetKVM)](https://twitter.com/jetkvm) 9 | 10 |
11 | 12 | JetKVM is a high-performance, open-source KVM over IP (Keyboard, Video, Mouse) solution designed for efficient remote management of computers, servers, and workstations. Whether you're dealing with boot failures, installing a new operating system, adjusting BIOS settings, or simply taking control of a machine from afar, JetKVM provides the tools to get it done effectively. 13 | 14 | ## Contributing 15 | 16 | We welcome contributions from the community! Whether it's improving the firmware, adding new features, or enhancing documentation, your input is valuable. We also have some rules and taboos here, so please read this page and our [Code of Conduct](/CODE_OF_CONDUCT.md) carefully. 17 | -------------------------------------------------------------------------------- /content/docs/peripheral-devices/alternative-power-sources.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Power Options 3 | description: "Learn how to extend the functionality of your JetKVM device through the customizable RJ-12 extension port." 4 | order: 7 5 | --- 6 | 7 | ## Primary Power Method 8 | 9 | The **most common way to power the JetKVM is through its USB-C port**, connected directly to the computer you're controlling. Many computers have USB ports with constant power, though in some cases, you may need to enable it in the BIOS or UEFI settings (often labeled as "USB Power During Standby" or "USB Always On"), so be sure to check there if it's not working by default. 10 | 11 | ## Alternative Power Options 12 | 13 | While USB power is convenient, **we understand that this might not be possible for every situation**. Here are several alternative ways to power your JetKVM device: 14 | 15 | ### USB-C Power/Data Splitter (Included) 16 | 17 | The **JetKVM comes with a USB-C Y-cable splitter that separates power and data connections**. This allows you to connect one cable to your remote host for data transmission while powering the device through a separate 5V power supply, such as a phone charger (not included). This solution is perfect when your host computer doesn't provide constant USB power or when you need a more reliable power source. 18 | 19 | ### DC Extension 20 | 21 | For more complex setups, the DC Extension option offers dual functionality. Not only will it control the power supply to another computer, but **it also supplies the JetKVM with 5V through the RJ11 cable**. This integrated approach simplifies cable management and is particularly useful in scenarios where you're already using the DC extension for power control. 22 | 23 | ### ATX Board Extension 24 | 25 | If you're integrating the JetKVM into a desktop computer setup, you can utilize either the USB-C port or internal pin header on the ATX board. This method supplies 5V to the JetKVM device via the RJ11 cable and is ideal for permanent installations inside a computer case. It's a clean solution that eliminates external power adapters. 26 | -------------------------------------------------------------------------------- /content/docs/index.mdx: -------------------------------------------------------------------------------- 1 | # JetKVM Documentation 2 | 3 | Welcome, to the JetKVM documentation! 4 | 5 | JetKVM is a high-performance, open-source KVM over IP (Keyboard, Video, Mouse) solution designed for efficient remote management of computers, servers, and workstations. 6 | Whether you're dealing with boot failures, installing a new operating system, adjusting BIOS settings, or simply taking control of a machine from afar, JetKVM provides the tools to get it done effectively. 7 | 8 | ## Key Features 9 | 10 | - **Ultra-low Latency** - 1080p@60FPS video with 30-60ms latency using H.264 encoding. Smooth mouse and keyboard interaction for responsive remote control. 11 | - **Free & Optional Remote Access** - Remote management via JetKVM Cloud using WebRTC. 12 | - **Open-source software** - Written in Golang on Linux. Easily customizable through SSH access to the JetKVM device. 13 | 14 | ## Getting help 15 | 16 | We'd love to hear from you or give you a hand getting started. Here are some ways to get in touch with us. 17 | 18 |
19 | 20 | 21 |
22 |
23 | 24 |

Join our Discord

25 |
26 |

Connect with our community, get support, and stay updated on the latest news.

27 |
28 |
29 |
30 | 31 | 32 | 33 |
34 |
35 | 38 |

Follow us on X

39 |
40 |

Get quick updates, tips, and engage with the JetKVM team on X (formerly Twitter).

41 |
42 |
43 |
44 |
45 | -------------------------------------------------------------------------------- /content/docs/advanced-usage/factory-reset.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Factory Reset" 3 | description: "Learn how to perform a factory reset on your JetKVM device using DFU Mode. This guide covers entering DFU Mode and flashing the latest firmware to restore your device to its original settings." 4 | order: 1 5 | --- 6 | 7 | If you need to reset your JetKVM device, this can be done by reflashing the firmware through DFU Mode (Device Firmware Update). This process restores the device by installing the latest firmware, effectively resetting it to factory settings. DFU Mode is essential when you can't access the KVM over SSH or want to start fresh with a clean firmware install. 8 | 9 | ## Reset Your JetKVM Using DFU Mode 10 | 11 | To reset the device, you will use DFU Mode, which allows you to flash the firmware directly to the KVM. Instead of compiling custom firmware, you will download the latest official firmware from the JetKVM GitHub repository. 12 | 13 | ### Steps to Enter DFU Mode: 14 | 15 | 1. Unplug the USB cable from the device. 16 | 2. Locate the small hole on the right side of the device. 17 | 3. Insert a needle into the hole and press & hold the button inside before reconnecting the USB cable. 18 | 4. Hold the needle for three seconds, then release. Your device is now in DFU Mode. 19 | 20 | ## Flashing the Latest Firmware 21 | 22 | Download the latest JetKVM firmware from [here](https://api.jetkvm.com/releases/system_recovery/latest). 23 | 24 | 25 | ### Linux 26 | 27 | 1. Clone the `rv1106-system` repository: 28 | 29 | ```sh 30 | git clone https://github.com/jetkvm/rv1106-system.git 31 | ``` 32 | 33 | 2. Run the following command to flash the firmware: 34 | 35 | ```sh 36 | pushd tools/linux/Linux_Upgrade_Tool 37 | sudo ./upgrade_tool uf /path/to/your/firmware.img 38 | popd 39 | ``` 40 | 41 | ### macOS 42 | 43 | 1. Download the [upgrade_tool](https://github.com/jetkvm/rv1106-system/releases/download/v0.2.5/upgrade_tool_v2.44_for_mac.zip) for macOS. 44 | 45 | 2. Run the following command to flash the firmware: 46 | 47 | ```sh 48 | pushd upgrade_tool_v2.44_for_mac 49 | sudo ./upgrade_tool uf /path/to/your/firmware.img 50 | popd 51 | ``` 52 | 53 | ### Windows 54 | 55 | #### Install Drivers 56 | 57 | 1. Download [Driver Assistant](https://github.com/jetkvm/rv1106-system/releases/download/v0.2.5/DriverAssitant_v5.14.zip) 58 | 59 | 2. Open Driver Assistant to install the drivers for the board. There's no need to connect the board to the computer during this step. 60 | 61 | ![Driver Assistant](/content/files/dfu-driver-assistant.png) 62 | 63 | #### Flash the Firmware 64 | 65 | 1. Download and extract the [SocToolKit](https://github.com/jetkvm/rv1106-system/releases/download/v0.2.5/SocToolKit_v2.5_20250701_01_win.zip) for Windows. 66 | 67 | 2. Open `SocToolKit.exe`, then select `RV1106`. 68 | 69 | ![SocToolKit](/content/files/dfu-soctoolkit-1.png) 70 | 71 | 3. Enter your device into DFU Mode and connect the board to the computer. 72 | 73 | 4. Navigate to the `Download` tab, check the `USB` radio then make sure the dropdown select is set to `Maskroom rockchip`. 74 | 75 | 5. Click the `Firmware...` button, then select the firmware file you just downloaded. 76 | 77 | 6. Click the `Upgrade` button to flash the firmware. 78 | 79 | ![SocToolKit Complete](/content/files/dfu-soctoolkit-2.png) -------------------------------------------------------------------------------- /content/docs/peripheral-devices/keyboard-and-mouse.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Keyboard & Mouse" 3 | description: "Explore JetKVM's keyboard and mouse features, including mouse modes, the Mouse Jiggler function, and virtual keyboard options. Learn how to optimize your remote input experience for various scenarios." 4 | order: 2 5 | --- 6 | 7 | ## Mouse 8 | 9 | ### Modes 10 | 11 | JetKVM supports two distinct mouse modes, allowing flexible control depending on your hardware and system configuration: 12 | 13 | - **Absolute Mode**: The input device sends exact X, Y coordinates for the cursor's position. This is commonly used in touchscreens and drawing tablets. JetKVM defaults to absolute mode for its ease of use. 14 | - **Relative Mode**: This mode transmits only the relative offset from the current cursor position, which is typical for standard mice. Relative mode is useful for systems where BIOS or UEFI do not support absolute positioning. When using relative mode, the browser will exclusively capture your mouse input when you click within the remote screen. 15 | 16 | **Note**: Relative mode is not yet supported in the current version but is planned for future releases. 17 | 18 | ### Jiggler 19 | 20 | The Mouse Jiggler feature simulates small, periodic mouse movements to prevent sleep mode, standby, or screen savers from activating. This is particularly helpful during long-running tasks, like software installations, where manual mouse movement is otherwise needed to prevent the remote system from becoming idle. 21 | 22 | To activate the Mouse Jiggler, navigate to the action bar at the top right of the interface. In the mouse settings section, you'll find an option to toggle "Enable Mouse Jiggler". Simply click this toggle to turn the feature on or off as needed. 23 | 24 | #### How Mouse Jiggler Works 25 | 26 | Once activated, JetKVM monitors the elapsed time since the last user input, whether from the keyboard or mouse. If no user interaction occurs for more than 30 seconds, the jiggler automatically moves the mouse to a set position (currently X:1, Y:1) and repeats this action every 30 seconds. 27 | 28 | Key Points to Note: 29 | 30 | - The jiggler runs independently on the JetKVM device, meaning it continues to function even if the web interface is closed. 31 | - The jiggler will not interfere with regular user input. If the user moves the mouse or types within the 30-second window, the jiggler's timer resets. This ensures that the jiggler only activates when there's a period of inactivity. 32 | 33 | ### Additional Mouse settings 34 | 35 | - **Hide Cursor**: This option hides the local UI cursor, leaving only the remote system's cursor visible. This feature is useful when you have a fast connection and prefer to focus solely on the remote system's mouse movements. 36 | 37 | ## Keyboard 38 | 39 | ### Paste from Host 40 | 41 | The "Paste from Host" feature allows you to paste text from your local machine to the remote server you are managing. This functionality is accessible via the action bar, located at the top left of the interface, above the video feed. 42 | 43 | Currently, JetKVM supports only the US keyboard layout, and the host key map defaults to the US setting. 44 | 45 | ### Virtual Keyboard 46 | 47 | JetKVM includes a virtual keyboard feature, providing basic keyboard input through the UI. This allows you to send individual keystrokes to the remote machine as needed. 48 | -------------------------------------------------------------------------------- /content/docs/getting-started/faq.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Device FAQs" 3 | description: "Frequently Asked Questions about the JetKVM Project" 4 | order: 4 5 | --- 6 | 7 | ### Does it come with Tailscale? 8 | 9 | Tailscale is not pre-installed on the device. However, tailscale has added out of the box support for JetKVM, which means that you can easily install Tailscale on the device. 10 | 11 | [Install Tailscale](../networking/remote-access#tailscale) 12 | 13 | ### How do I power the device? 14 | 15 | Please see the [Power Options page](../peripheral-devices/alternative-power-sources). 16 | 17 | ### Is there/will there be a PoE version? 18 | 19 | The current JetKVM device does not accept Power over Ethernet, though you may be able to use a USB-C PoE splitter cable, 20 | or a PoE extension board. 21 | 22 | A PoE-capable version of JetKVM is on the roadmap. 23 | 24 | ### Can I use the device without the Cloud features? 25 | 26 | **Yes,** the device is primarily designed to be accessed locally. **The cloud access feature is entirely opt-in.** 27 | 28 | Simply point your browser at the IP address shown on the display to access the KVM. You can bring your own VPN 29 | solution to access it remotely, if you'd rather not use the cloud. 30 | 31 | ### Can I self-host the Cloud features? 32 | 33 | **Absolutely!** 34 | 35 | The JetKVM project is open sourced, please see [the Open Source](https://github.com/jetkvm/kvm) page for 36 | more information. 37 | 38 | ### Does it work with KVM Switches? 39 | 40 | KVM switches haven't been tested yet, but there's no outstanding reason why they won't work. 41 | 42 | ### Does it work with _[device]_? 43 | 44 | The JetKVM works independently of the operating system, meaning it doesn't interact directly with the operating system. It works by connecting through HDMI for video and USB for keyboard and mouse input, making it compatible with any system that supports these interfaces. 45 | 46 | So yes, it's fully compatible with _[device]_. No additional configuration or drivers are needed—simply plug it in, and you're good to go! 47 | 48 | ### Does the interface work on mobile? 49 | 50 | **Yes!** 51 | 52 | The web interface is written in React and works well on mobile devices; you'll be able to use JetKVM's built in 53 | virtual keyboard to control your computer. 54 | 55 | ### Is the UI available in any languages other than English? 56 | 57 | **Not yet.** But don't worry, there isn't much text in the UI itself. 58 | 59 | There's an open feature request for UI localisation, the community will be able to contribute translations. 60 | 61 | ### Can JetKVM control power to the computer? 62 | 63 | **JetKVM has a number of ways to control power to the device it's connected to:** 64 | 65 | - [Wake-on-LAN](../networking/wake-on-lan): If your computer is on the same subnet, JetKVM can send it a Wake on LAN Magic Packet to 66 | power it up. The computer must support WoL, and it needs to be enabled in the UEFI/BIOS settings. 67 | 68 | - [DC Extension Board](../peripheral-devices/extension-port#dc-power-control): The DC extension board can control power-flow to a computer that has a DC 69 | input, as well as extracting power for itself. 70 | 71 | - [ATX Extension Board](../peripheral-devices/extension-port#atx-power-control): The ATX extension board can switch on a PC by triggering its power-switch ATX 72 | pins, in the same way the button on the front of your case does! 73 | 74 | **More to Come:** The extension port on JetKVM allows the community to create their own novel ways of controlling power 75 | to target devices. 76 | -------------------------------------------------------------------------------- /content/docs/networking/remote-access.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Remote Access" 3 | description: "Discover how to enable and use Remote Access for your JetKVM device, allowing secure management from anywhere via WebRTC and OIDC authentication." 4 | order: 1 5 | --- 6 | 7 | Remote Access allows you to connect to your JetKVM device from anywhere on the internet. Through our [cloud dashboard](https://app.jetkvm.com), you can log in, get an overview and control any of your cloud-enabled devices. This means you can access and manage your JetKVM devices from your phone or computer, anywhere in the world with an internet connection. 8 | 9 | ## Cloud Access 10 | 11 | ### How to enable Remote Access 12 | 13 | By default, Remote Access is turned off, but enabling it is simple: 14 | 15 | 1. **Access the JetKVM device locally:** Open your browser and go to the local IP address displayed on the screen of your JetKVM device. 16 | 2. **Enable Remote Access:** In the top right corner, click **Settings** in the action bar, scroll down and click Enable Remote Access. 17 | 3. **Authenticate via OIDC:** You will be redirected to an authentication page where you need to log in using your OIDC provider (currently only Google is supported). 18 | 19 | Once authenticated, Remote Access will be enabled, and you will be redirected back to the JetKVM cloud dashboard, where you can securely manage your device from anywhere on the internet. 20 | 21 | ### How It Works 22 | 23 | All communication between the device and the browser, whether for local or remote access, is handled through **WebRTC**, ensuring fast and efficient peer-to-peer connections. **WebRTC** provides built-in encryption using DTLS (Datagram Transport Layer Security) for data encryption and SRTP (Secure Real-time Transport Protocol) for media encryption, ensuring that all data, video, and control streams are encrypted end-to-end while in transit. 24 | 25 | Remote access network diagram 30 | 31 | ### Zero Trust Security Model 32 | 33 | To further enhance security, JetKVM employs a **Zero Trust security model**. In Zero Trust, the principle is to "never trust, always verify." This means the device itself is responsible for determining whether an authentication request is valid—there is no central server involved in verifying credentials. JetKVM uses **OIDC (OpenID Connect)** for authentication, currently supporting only Google accounts. Additional OIDC providers may be added in the future. 34 | 35 | ### Stun and Turn Servers 36 | 37 | In most cases, WebRTC establishes direct peer-to-peer connections. However, network restrictions like firewalls or strict NAT policies can prevent direct communication between devices. To solve this, JetKVM, through Cloudflare, provides free STUN and TURN servers for cases where WebRTC requires additional support. 38 | 39 | #### STUN Servers 40 | 41 | **STUN (Session Traversal Utilities for NAT)** servers help devices behind NAT (Network Address Translation) determine their public IP address and port. This process facilitates peer-to-peer connections in most scenarios, even when devices are located in different network environments. 42 | 43 | #### TURN Servers 44 | 45 | When STUN is not enough, such as in more complex network setups with strict NAT policies, **TURN (Traversal Using Relays around NAT)** servers become necessary. TURN servers act as intermediaries that relay traffic between devices, bypassing firewalls and restrictive NAT configurations. TURN servers are particularly important when direct peer-to-peer communication fails, such as when devices are behind **Carrier-Grade NAT (CGNAT)**, often seen in mobile networks. 46 | 47 | ## Tailscale 48 | 49 | Tailscale is not pre-installed on the device. However, Tailscale has added out-of-the-box support for JetKVM, which means you can easily install Tailscale on your device remotely from your computer. 50 | 51 | 1. [Add your SSH key to JetKVM](https://jetkvm.com/docs/advanced-usage/developing#developer-mode) 52 | 2. **On your local computer** (not on the JetKVM device), run the following command and follow the instructions: 53 | 54 | ```bash 55 | curl -fsSL https://jetkvm.com/install-tailscale.sh | sh -s -- 56 | ``` 57 | -------------------------------------------------------------------------------- /content/docs/peripheral-devices/mount-drive.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Mount Drive" 3 | description: "Learn how to use JetKVM's Mount Drive feature to emulate a virtual CD/DVD or disk drive on your target host. Discover supported image formats, drive modes, and the innovative WebRTC streaming process for efficient file access." 4 | order: 1 5 | --- 6 | 7 | The Mount Drive feature allows JetKVM to emulate a read-only virtual CD/DVD or disk drive on the target host. This drive is accessible even during BIOS or UEFI boot, making it useful for tasks like reinstalling an operating system or mounting an ISO to install applications on the target host. 8 | 9 | **JetKVM supports the following image formats: ISO, IMG, QCOW2, WDI, and VMDK.** The system provides two drive modes: CD/DVD Mode and disk Drive Mode. It's important to note that **only one drive can be mounted at a time**, and the drive mode must be set before mounting the image. 10 | 11 | ## Mount Drive Methods 12 | 13 | ### Storage mount 14 | 15 | Storage mount allows you to mount previously uploaded images from the JetKVM storage to the remote host. This is the fastest way to mount an image, as the JetKVM can provide the image from the JetKVM storage at speeds of peak USB 2.0 speed. 16 | 17 | **We generally recommend using the Storage mount for the fastest performance.** The only downside is that you need to upload the image to the JetKVM storage before you can mount it. 18 | 19 | ### URL mount 20 | 21 | URL Mount **streams the image in real time using HTTP(S) from a public web address to the target host through JetKVM.** 22 | 23 | When the target host initiates a file block read, JetKVM fetches the data from the specified URL and streams it directly to the host, functioning like a local drive. This feature allows for convenient access to boot images or data hosted externally, without needing to store them locally. 24 | 25 | JetKVM also **leverages predictive caching, pre-fetching data based on expected read operations.** This ensures faster performance, as the system caches data before the host requests it. The real-time performance of the URL stream can be tracked in the UI, providing insight into block read speeds as they occur. 26 | 27 | To streamline the process, JetKVM includes a list of popular image URLs for quick mounting. Users can select these pre-configured URLs or provide their own. 28 | 29 | ### Browser mount 30 | 31 | Browser mount **streams the image in real time using WebRTC from the browser, to the target host, through the JetKVM.** 32 | 33 | When the target host performs a file block read, JetKVM forwards that request over WebRTC to the client's local system. The local system then reads the necessary data and sends it back to the target host. 34 | This streaming process ensures that the image is mounted instantaneously. However, it's important to note that the tab must remain open for the streaming to continue, as the data is being transmitted in real-time. 35 | 36 | To optimize performance, **JetKVM uses a predictive pre-caching mechanism to anticipate where the target host will perform read operations.** This pre-streaming accelerates the reading process, as data is pre-read and cached before the request reaches the target host. 37 | 38 | ## USB Modes 39 | 40 | JetKVM offers two distinct USB modes for mounting images on a target host: **CD/DVD Mode** and **Disk Mode**. Choosing the right mode is key to ensuring compatibility and optimal performance for tasks such as operating system installations and software deployments. 41 | 42 | ### CD/DVD Mode 43 | 44 | In CD/DVD Mode, the image is emulated as a virtual optical drive (CD or DVD). This mode is particularly useful for systems or installers that require the media to be presented as a CD or DVD, such as specific Windows installers or software that needs optical media emulation. 45 | 46 | Unlike some other KVMs, JetKVM's CD/DVD Mode can handle images larger than 2.2GB, allowing you to mount larger images as an virtual optical drive, without any issues. 47 | 48 | ### Disk Mode 49 | 50 | In Disk Mode, the mounted image is emulated as a virtual USB disk drive. This mode is best suited for: 51 | 52 | - **Modern Boot Methods:** Many systems today boot from USB disk drives, making Disk Mode a convenient choice for installations, live environments, or recovery tasks. 53 | - **Large Images:** It supports images larger than 2.2GB, making it ideal for modern operating system installations. 54 | 55 | However, some images, especially certain OS installers, may not work in Disk Mode due to how they are structured or limitations in the target system's BIOS or UEFI firmware. In those cases, you can try using CD/DVD Mode instead. 56 | -------------------------------------------------------------------------------- /content/docs/networking/local-access.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Local Access" 3 | description: "Learn how to access your JetKVM device locally, set up password protection, reset your password, and manage authentication settings for secure local network access." 4 | order: 1 5 | --- 6 | 7 | To access the JetKVM web UI, you'll need the device's IP address, which is displayed on the front screen of the JetKVM device along with the MAC address. Simply refer to this screen, note the IP address, and use it to navigate to the web UI in your browser. 8 | 9 | ## Local Authentication 10 | 11 | Local access is the default access mode for every newly installed JetKVM device. During the onboarding process, you can choose whether or not to password-protect your device for access on the local network. 12 | 13 | ### Password Protection 14 | 15 | If you choose not to password-protect the device, anyone on the local network who knows the JetKVM's IP address will be able to access the web UI. 16 | For security purposes, it's generally **recommended to enable password protection** to safeguard your device from unauthorized access. The access token is stored as an HTTP-only cookie in the browser for 7 days, making it quite comfortable to enable password protection. 17 | 18 | No part of the authentication data leaves the JetKVM, meaning all access control is handled locally on the device. 19 | 20 | ### Changing Password Settings 21 | 22 | You can modify the password settings at any time, either during the onboarding process or later via the settings. The following actions are available: 23 | 24 | - **Enable Password Protection:** If no password was set during onboarding, you can enable it later by providing a password that will be required on the login screen. 25 | - **Update Password:** You can update the password if needed by entering a new one. 26 | - **Delete Password:** This action removes the password, allowing password-less access to the device. 27 | 28 | ## Outbound Internet Connectivity 29 | 30 | The following outbound connectivity is required, from the JetKVM towards the Internet: 31 | 32 | ### JetKVM System Updates 33 | 34 | Updates use HTTPS (tcp/443) towards the following FQDNs: 35 | 36 | - update.jetkvm.com 37 | - api.jetkvm.com 38 | - app.jetkvm.com 39 | 40 | ### Time Synchronization 41 | 42 | Users have the option to select NTP (udp/123) and/or HTTP (tcp/80) in the Network Settings, for time synchronization to happen towards the following FQDNs: 43 | 44 | NTP (udp/123): 45 | - time.apple.com 46 | - time.aws.com 47 | - time.windows.com 48 | - time.google.com 49 | - time.cloudflare.com (hardcoded to IPv4 162.159.200.123 and IPv6 2606:4700:f1::123) 50 | - 0.pool.ntp.org 51 | - 1.pool.ntp.org 52 | - 2.pool.ntp.org 53 | - 3.pool.ntp.org 54 | 55 | HTTP (tcp/80): 56 | - http://www.gstatic.com/generate_204 57 | - http://cp.cloudflare.com/ 58 | - http://edge-http.microsoft.com/captiveportal/generate_204 59 | 60 | ## Reset Password 61 | 62 | If you've forgotten your local password, there are two ways to reset it: 63 | 64 | ### Option 1: Developer Mode 65 | 66 | If you have **Developer Mode** enabled, you can reset the password by accessing the device via SSH: 67 | 68 | 1. **SSH Access:** Use the SSH key you provided when enabling Developer Mode to SSH into the device. 69 | 70 | ```bash 71 | ssh root@ 72 | ``` 73 | 74 | 2. **Delete Config File and Reboot:** 75 | 76 | ```bash 77 | cd /userdata/ # Navigate to the userdata directory 78 | rm kvm_config.json # Delete the configuration file containing the password 79 | sync # Ensure file changes are written to the file system 80 | reboot # Reboot the device 81 | ``` 82 | 83 | This will reset the configuration file, removing the local password and any other settings. After rebooting the device, you'll need to reconfigure all settings, including enabling **Cloud Mode** if you were using it before. 84 | 85 | ### Option 2: Factory Reset 86 | 87 | If you do not have Developer Mode enabled, you can reset your password by performing a factory reset on the device. To do this, simply follow the steps outlined in the [Factory Reset guide](/docs/advanced-usage/factory-reset), which you can find in the Advanced Usage section of our documentation. This process will restore your JetKVM device to its original settings, effectively resetting the password. 88 | 89 | Keep in mind that a factory reset will erase all configurations, including your cloud connection and other settings. After the reset is complete, you'll need to go through the initial setup process again, just as you did when you first received the device. While this method is more drastic than changing a password, it ensures you regain full access to your device. 90 | -------------------------------------------------------------------------------- /content/docs/advanced-usage/developing.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Developing" 3 | description: "Explore JetKVM's developer features including Developer Mode for SSH access, DFU Mode for firmware updates, and Serial Console for debugging. Learn how to customize and extend JetKVM's functionality." 4 | order: 2 5 | --- 6 | 7 | JetKVM is built with developers in mind, providing tools and modes that allow you to explore, modify, and extend the functionality of the device. If you're interested in tinkering, testing new firmware, or contributing to JetKVM, here's an overview of the key development features. 8 | 9 | ## Developer Mode 10 | 11 | Developer Mode unlocks SSH access to the JetKVM device, allowing you to customize or modify the system. When you enable Developer Mode, you must provide an **SSH public key**, as JetKVM uses key-based authentication. **For security reasons, you can not use your JetKVM password for SSH logins.** 12 | 13 | ### Generating an SSH Key 14 | 15 | Before you can enable Developer Mode, you need to generate an SSH key pair. 16 | 17 | **On macOS and Linux:** 18 | 19 | 1. Open a terminal window. 20 | 2. Run the following command to generate a new SSH key pair: 21 | ```sh 22 | ssh-keygen -t rsa -b 4096 23 | ``` 24 | 3. You will be prompted to enter a file in which to save the key. Press **Enter** to accept the default location (`~/.ssh/id_rsa`). 25 | 4. You will be asked to enter a passphrase. This is optional but recommended for extra security. 26 | 5. Your public key will be saved to `~/.ssh/id_rsa.pub`. 27 | 28 | **On Windows:** 29 | 30 | 1. Open PowerShell. 31 | 2. Run the following command to generate a new SSH key pair: 32 | ```powershell 33 | ssh-keygen -t rsa -b 4096 34 | ``` 35 | 3. You will be prompted to enter a file in which to save the key. Press **Enter** to accept the default location (`C:\\Users\\YourUsername\\.ssh\\id_rsa`). 36 | 4. You will be asked to enter a passphrase. This is optional but recommended for extra security. 37 | 5. Your public key will be saved to `C:\\Users\\YourUsername\\.ssh\\id_rsa.pub`. 38 | 39 | ### Adding Your SSH Key to JetKVM 40 | 41 | 1. Navigate to the JetKVM settings page. 42 | 2. Go to the **Advanced** tab. 43 | 3. Check the box to **Enable Developer Mode**. 44 | 4. Open your public key file (`~/.ssh/id_rsa.pub` or `C:\\Users\\YourUsername\\.ssh\\id_rsa.pub`) with a text editor and copy the entire content. 45 | 5. Paste the public key into the input box and save the changes. 46 | 47 | ### Connecting to JetKVM 48 | 49 | Once you have enabled Developer Mode and added your SSH public key, you can connect to the JetKVM device using an SSH client. 50 | 51 | 1. Open a terminal (on macOS/Linux) or PowerShell (on Windows). 52 | 2. Use the following command to connect to your JetKVM device: 53 | ```sh 54 | ssh root@ 55 | ``` 56 | Replace `` with the IP address of your JetKVM device. 57 | 3. If you set a passphrase for your SSH key, you will be prompted to enter it. 58 | 59 | The system runs on a lightweight Linux environment using **BusyBox** as the core user space and **DropBear** as the SSH server. 60 | 61 | For a full, in-depth guide on how to develop and contribute to the JetKVM, please see the [DEVELOPMENT.md](https://github.com/jetkvm/kvm/blob/dev/DEVELOPMENT.md) file on our GitHub. 62 | 63 | ## DFU Mode (Device Firmware Update) 64 | 65 | DFU Mode allows you to update the firmware of your JetKVM device, especially when standard access methods like SSH are not available or when testing new firmware. DFU mode provides a way to recover or upgrade the firmware without relying on the standard boot process. 66 | 67 | ### How to Enter DFU Mode: 68 | 69 | 1. Unplug the USB cable from the device. 70 | 2. Locate the small hole on the right side of the device. 71 | 3. Insert a needle into the hole and press & hold the button inside before reconnecting the USB cable. 72 | 4. Hold the needle for three seconds, then release. Your device is now in DFU Mode. 73 | 74 | ### Flashing New Firmware: 75 | 76 | 1. Download the firmware update tool from [Factory Reset](/docs/advanced-usage/factory-reset) 77 | 2. Compile your firmware into an `.img` file. 78 | 3. Run the following command in your terminal: 79 | 80 | ```sh 81 | sudo ./upgrade_tool uf your_firmware.img 82 | ``` 83 | 84 | 4. The tool will display progress, and once completed, the JetKVM device will boot with the new firmware. 85 | 86 | ## Serial Console 87 | 88 | A serial console provides direct access to system logs, boot messages, and other low-level interactions. It is essential for debugging and monitoring the device during the boot process or when testing new features. 89 | 90 | Since modern computers no longer include traditional serial ports, JetKVM uses a UART splitter to provide serial console access. The UART signal is multiplexed over the SBU (Sideband Use) pins of the USB cable, so you'll need a UART splitter to connect to the serial console. 91 | -------------------------------------------------------------------------------- /content/docs/advanced-usage/ota-updates.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Updates" 3 | description: "Understand JetKVM's over-the-air (OTA) update system, including automatic updates, manual checks, development channel, and rolling releases. Learn how to keep your device up-to-date with the latest features and improvements." 4 | order: 2 5 | --- 6 | 7 | ## JetKVM 8 | 9 | JetKVM supports over-the-air (OTA) updates, which automatically install new software versions to keep your device up-to-date with the latest features, bug fixes, and improvements. 10 | 11 | By default, **JetKVM is set to automatically update**. The device will periodically check for new updates in the background. If a new update is available, it will be installed automatically. However, JetKVM is designed to avoid disruptions during active use. 12 | 13 | The update system will check for active webRTC connections, and **it will delay updates if you are currently controlling a device**. This ensures that you won't be interrupted in the middle of important tasks. If you have long-running webRTC connections, it's recommended to periodically check for updates manually to ensure your device stays current. 14 | 15 | If you prefer, you can disable automatic updates and manually check for updates: 16 | 17 | 1. Go to the Settings in the JetKVM web UI. 18 | 2. Click the Check for Update button to see if any new updates are available. 19 | 3. If an update is available, you can choose to install it immediately. 20 | 21 | ### Manual Upgrade 22 | 23 | If OTA is not possible, you can use the following commands to manually upgrade your JetKVM device. You can either run them over SSH or via the `Web Terminal` in the JetKVM web UI. 24 | 25 | Please be advised that manual upgrades should only be performed if you are comfortable with the command line, understanding the risks involved, and OTA is not possible. 26 | 27 | For example, to upgrade to version 0.4.6, you can run the following command: 28 | 29 | ```bash 30 | export JETKVM_UPDATE_TMPFILE=$(mktemp) && \ 31 | wget -c http://update.jetkvm.com/app/0.4.6/jetkvm_app -O $JETKVM_UPDATE_TMPFILE && \ 32 | sha256sum $JETKVM_UPDATE_TMPFILE | grep 05c6930cc1202196515f3aef06b94add7207e13d0b5e09da05dc5302ed5a0650 && \ 33 | chmod +x $JETKVM_UPDATE_TMPFILE && mv $JETKVM_UPDATE_TMPFILE /userdata/jetkvm/jetkvm_app.update && reboot 34 | ``` 35 | 36 | --- 37 | 38 | ## DC Extension 39 | 40 | **The DC Extension does very rarely need firmware updates**, which requires a manual flashing process. Unlike the main JetKVM device, the DC Extension cannot be updated over-the-air and must be flashed directly. New firmware updates can be found [here](https://github.com/jetkvm/dc-extension-firmware/releases). 41 | 42 | **To update the DC Extension firmware:** 43 | 44 | 1. **Disconnect all cables** - Remove any cables from the DC Extension. 45 | 46 | 2. **Enter flash mode** - Press and hold the flash button (located between the DC 9V-20V port and the USB-C port) while connecting the USB-C cable from your DC Extension to your computer. 47 | 48 | 3. **Device recognition** - The DC Extension will appear as a removable disk drive on your computer. 49 | 50 | 4. **Flash the firmware** - Simply drag and drop the DC Extension firmware file(a `.uf2` file) onto the disk drive. The flashing process will begin automatically. 51 | 52 | 5. **Complete the update** - The USB drive will automatically eject when the flashing process is complete, indicating that the DC Extension has been successfully updated and rebooted with the new firmware. 53 | 54 | **Note:** Make sure to use the correct firmware file specifically designed for the DC Extension, as using the wrong firmware could damage the device. 55 | 56 | ## Release Process 57 | 58 | JetKVM employs a rolling release system for major updates to ensure stability across all devices. **When a new version is released, it is initially rolled out to only 10% of users**. The rollout gradually expands until 100% of devices are updated. This approach helps mitigate risks by preventing widespread issues in case a release encounters unforeseen problems. 59 | 60 | If you notice that a new version has been released but your device hasn't updated yet, you can manually trigger the update by checking for updates in the Settings page. However, **if your device is not part of the current rollout group, the "Check for Update" button will not show any available updates**, even if a new version has been released. You will need to wait for your device to be included in the next phase of the rollout or manually check later. 61 | 62 | ## Development Channel (Dev Channel) 63 | 64 | JetKVM offers a development channel for users who want early access to updates. By enabling this option in the Settings sidebar, you will receive development builds before they are rolled out to all users. These builds may include new features, bug fixes, or experimental updates that are still being tested. **Be aware that dev channel updates can be less stable than official releases, so enable it with caution.** 65 | -------------------------------------------------------------------------------- /content/docs/getting-started/troubleshooting.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Troubleshooting" 3 | description: "Troubleshoot common JetKVM issues with a focus on resolving the Loading Video Stream problem and ensuring proper WebRTC connections." 4 | order: 1 5 | --- 6 | 7 | ## Loading Video Stream Issue 8 | 9 | The most common issue with JetKVM is getting stuck at "Loading video stream..." when trying to connect to your device. This problem is typically caused by WebRTC connection issues between your browser and the JetKVM device. 10 | 11 | ### 1. Update JetKVM Firmware 12 | 13 | - Navigate to the IP address displayed on your JetKVM device 14 | - Go to Settings → Check for Updates 15 | - If an update is available, apply it and check if the issue is resolved 16 | 17 | ### 2. Verify WebRTC Functionality 18 | 19 | - Temporarily disable all browser extensions that might block or alter WebRTC connections 20 | - If using a VPN or corporate network, try temporarily disconnecting as these can block WebRTC traffic 21 | 22 | ### 3. Browser-Specific Settings 23 | 24 | **For Chromium:** 25 | 26 | - Navigate to `chrome://flags/#webrtc-ip-handling-policy` in your address bar 27 | - Look for "WebRTC IP Policy" 28 | - If it's set to "Disable non proxied UDP", change it to "Default" 29 | - Restart your browser for the changes to take effect 30 | 31 | **For Microsoft Edge:** 32 | 33 | - In your address bar, enter `edge://settings/content/mediaAutoplay` 34 | - Ensure your JetKVM URL is in the Allow list, as Edge may block autoplay by default 35 | 36 | **For Vivaldi:** 37 | 38 | - Navigate to `vivaldi://flags/#ignore-gpu-blocklist` 39 | - Enable "Override software rendering list" (ignore the GPU blocklist) 40 | - Go to Vivaldi Settings → Webpages and ensure "Use hardware acceleration when available" is enabled 41 | - Make sure "Broadcast IP for best WebRTC Performance" is enabled 42 | - Restart the browser after making these changes 43 | 44 | **For Firefox:** 45 | 46 | - Navigate to `about:config` 47 | - Search for `media.peerconnection.enabled` 48 | - Set it to `true` 49 | - Also search for `media.webrtc.hw.h264.enabled` and ensure it is set to `true` 50 | - Make sure the OpenH264 plugin is enabled under `about:addons > Plugins` 51 | - Restart the browser after making these changes 52 | 53 | ### 4. Check Browser Autoplay Settings 54 | 55 | - As noted by some users, browsers may block video autoplay by default 56 | - Ensure autoplay settings for video/audio are enabled for the JetKVM site 57 | 58 | ### 5. Linux users: Try Flatpak Firefox 59 | 60 | If you're on Linux (especially Fedora), try installing Firefox via **Flatpak from Flathub** instead of using the system package. This version has better media codec support and resolves video stream issues in many cases. 61 | 62 | ### Still Having Issues? 63 | 64 | If none of the above steps resolve your issue: 65 | 66 | 1. Visit our [GitHub issue #84](https://github.com/jetkvm/kvm/issues/84) where we're actively monitoring this problem 67 | 68 | 2. When reporting your issue, please include: 69 | - The data shown at the bottom of the video feed when Troubleshooting Mode is enabled (Settings > Advanced > Enable Troubleshooting Mode) 70 | - Your network configuration (router type, network setup) 71 | - The devices/computers you've tried connecting to 72 | - Any browsers you've tested with and their results 73 | - The JetKVM app version and system version 74 | 75 | Our team is actively working to resolve these connection issues with each firmware update. 76 | 77 | ## ATX Power Control Not Working 78 | 79 | If your ATX Power Control Extension isn't responding when you try to power on, reset, or shut down your PC remotely, follow these troubleshooting steps to identify and resolve the issue. 80 | 81 | ### 1. Check Motherboard `F_PANEL` Connection 82 | 83 | **Motherboard `F_PANEL` Connection:** 84 | - Verify the ribbon cables are properly connected to your motherboard's `F_PANEL` header 85 | - Double-check the pin layout matches your motherboard manual - this is the most common source of issues 86 | - Ensure polarity (+/-) is correct for all connections, especially LED pins 87 | 88 | ### 2. Test Manual Power Button 89 | 90 | - Test that your PC can still be powered on manually using the front panel power button 91 | - If the front panel power button doesn't work, there may be an issue with your `F_PANEL` connections 92 | 93 | ### 3. Verify Front Panel Cable Connections 94 | 95 | Ensure your front panel cables are properly connected to the correct pins on the ATX board: 96 | - **Power SW** connects to **BTN PWR + / –** 97 | - **Reset SW** connects to **BTN RST + / –** 98 | - **Power LED** connects to **LED PWR + / –** (polarity matters) 99 | - **HDD LED** connects to **LED HDD + / –** (polarity matters) 100 | 101 | ### Still Having Issues? 102 | 103 | If your ATX power control still isn't working after following these steps, please contact us at contact@jetkvm.com with: 104 | - Your motherboard model and manual reference 105 | - Photos of your wiring setup 106 | - Description of which specific functions aren't working 107 | 108 | 109 | -------------------------------------------------------------------------------- /content/docs/peripheral-devices/extension-port.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Extension Port" 3 | description: "Learn how to extend the functionality of your JetKVM device through the customizable RJ-12 extension port." 4 | order: 6 5 | --- 6 | 7 | The **JetKVM** features an **RJ-12 extension port** on the back, designed to provide full customizability and flexibility to your device. Whether you're looking to integrate additional hardware capabilities or contribute custom add-ons, the extension port opens up unlimited possibilities for expansion. 8 | 9 | Back of JetKVM device 14 | 15 | ## What is the Extension Port? 16 | 17 | The **RJ-12 extension port** functions as a serial port, allowing communication with the JetKVM. This port is key to adding extra hardware and functionality to the device, making it a highly versatile component. 18 | 19 | These add-ons are available for purchase, but the port isn't limited to just JetKVM's accessories—**it's open for anyone to develop their own custom extensions**. 20 | 21 | --- 22 | 23 | ### ATX Power Control 24 | 25 | 26 | ATX Power Control 33 | 34 | 35 | A control board that manages computer power states. It also includes a USB-C port for connecting 36 | a 5V power supply. This can then power the JetKVM through the RJ11 cable. Alternatively, 5V 37 | power can be supplied through a pin header. 38 | 39 | The ATX Power Control comes with a PCIe slot cover bracket, allowing for clean cable routing through your PC case - without requiring an actual PCIe slot. 40 | 41 | Each pin features dual headers: one set for KVM control and another for the original front panel buttons—meaning you don't have to choose between them. Both can be connected simultaneously. 42 | 43 | --- 44 | 45 | ### DC Power Control 46 | 47 | 48 | DC Power Control 55 | 56 | 57 | The DC Power Control extension enables power management for connected DC-powered devices, such as mini PCs or NAS units, using a standard 5.5×2.5 mm connector. It supports DC input ranging from **12 to 20 volts**, and we're **including adapters to support 5.5×2.1 mm** connections as well. 58 | 59 | Included in the extension package: 60 | 61 | - Extension board (pictured) + Case (In Design) 62 | - RJ12 cable to connect the extension board to the JetKVM 63 | - 1x 5.5/2.5 mm male to 5.5/2.5 mm male cable 64 | 65 | The extension can **also power the JetKVM itself through the RJ-12 connection**, streamlining setup and reducing the need for additional power sources. 66 | 67 | Note: Previously, we wrote that we included a two more adapter in the extension package. This was incorrect. We are including a only 5.5/2.5 mm male to 5.5/2.5 mm cable in the extension package. 68 | 69 | --- 70 | 71 | ### Serial Console 72 | 73 | 74 | DC Power Control 81 | 82 | 83 | Extend your JetKVM capabilities with serial console access. This extension provides RS-232 connectivity, allowing you to access serial consoles directly from your browser through the JetKVM interface. 84 | 85 | Connect to devices with either RS-232 serial ports commonly found on network equipment, servers, and embedded systems. 86 | 87 | The extension integrates seamlessly with your JetKVM setup, providing reliable serial communication for configuration, troubleshooting, and remote management tasks. 88 | 89 | ## Customizing with the Extension Port 90 | 91 | By using the extension port, developers and hardware enthusiasts can add a variety of features, for example: 92 | 93 | - **Temperature Sensors**: Monitor temperature for environmental controls. 94 | - **Mechanical Button Pressers**: Automate physical interactions with connected devices. 95 | 96 | If you have specific needs for your workflow or want to create fun projects, the extension port provides the flexibility to build and experiment. 97 | 98 | We encourage the community to build custom add-ons for JetKVM. 99 | If you create a hardware extension that works with the RJ-12 extension port, you'll be able to **submit a pull request** to the JetKVM project once the source code becomes available in early December when the first devices ship. We enthusiastically welcome contributions from the community and look forward to collaborating on new features that benefit all JetKVM users. 100 | 101 | ## Build your own extensions 102 | 103 | The extension port is designed to unlock endless opportunities for hardware modifications. Using a standard RJ-12 connector, it provides power, I2C, and GPIO pins that make it easy to develop your own custom extensions. 104 | 105 | 106 | Extension Port Pinout 111 | 112 | We're excited to see what creative solutions you'll build! Whether you're developing something 113 | for your personal use or planning to share it with the community, we're committed to supporting 114 | developers who want to contribute. 115 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | CODE_OF_CONDUCT.md 2 | 3 | # Contributor Covenant Code of Conduct 4 | 5 | ## Our Pledge 6 | 7 | We as members, contributors, and leaders pledge to make participation in our 8 | community a harassment-free experience for everyone, regardless of age, body 9 | size, visible or invisible disability, ethnicity, sex characteristics, gender 10 | identity and expression, level of experience, education, socio-economic status, 11 | nationality, personal appearance, race, religion, or sexual identity 12 | and orientation. 13 | 14 | We pledge to act and interact in ways that contribute to an open, welcoming, 15 | diverse, inclusive, and healthy community. 16 | 17 | ## Our Standards 18 | 19 | Examples of behavior that contributes to a positive environment for our 20 | community include: 21 | 22 | - Demonstrating empathy and kindness toward other people 23 | - Being respectful of differing opinions, viewpoints, and experiences 24 | - Giving and gracefully accepting constructive feedback 25 | - Accepting responsibility and apologizing to those affected by our mistakes, 26 | and learning from the experience 27 | - Focusing on what is best not just for us as individuals, but for the 28 | overall community 29 | 30 | Examples of unacceptable behavior include: 31 | 32 | - The use of sexualized language or imagery, and sexual attention or 33 | advances of any kind 34 | - Trolling, insulting or derogatory comments, and personal or political attacks 35 | - Public or private harassment 36 | - Publishing others' private information, such as a physical or email 37 | address, without their explicit permission 38 | - Other conduct which could reasonably be considered inappropriate in a 39 | professional setting 40 | 41 | ## Enforcement Responsibilities 42 | 43 | Community leaders are responsible for clarifying and enforcing our standards of 44 | acceptable behavior and will take appropriate and fair corrective action in 45 | response to any behavior that they deem inappropriate, threatening, offensive, 46 | or harmful. 47 | 48 | Community leaders have the right and responsibility to remove, edit, or reject 49 | comments, commits, code, wiki edits, issues, and other contributions that are 50 | not aligned to this Code of Conduct, and will communicate reasons for moderation 51 | decisions when appropriate. 52 | 53 | ## Scope 54 | 55 | This Code of Conduct applies within all community spaces, and also applies when 56 | an individual is officially representing the community in public spaces. 57 | Examples of representing our community include using an official e-mail address, 58 | posting via an official social media account, or acting as an appointed 59 | representative at an online or offline event. 60 | 61 | ## Enforcement 62 | 63 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 64 | reported to the community leaders responsible for enforcement at 65 | support@jetkvm.com. 66 | All complaints will be reviewed and investigated promptly and fairly. 67 | 68 | All community leaders are obligated to respect the privacy and security of the 69 | reporter of any incident. 70 | 71 | ## Enforcement Guidelines 72 | 73 | Community leaders will follow these Community Impact Guidelines in determining 74 | the consequences for any action they deem in violation of this Code of Conduct: 75 | 76 | ### 1. Correction 77 | 78 | **Community Impact**: Use of inappropriate language or other behavior deemed 79 | unprofessional or unwelcome in the community. 80 | 81 | **Consequence**: A private, written warning from community leaders, providing 82 | clarity around the nature of the violation and an explanation of why the 83 | behavior was inappropriate. A public apology may be requested. 84 | 85 | ### 2. Warning 86 | 87 | **Community Impact**: A violation through a single incident or series 88 | of actions. 89 | 90 | **Consequence**: A warning with consequences for continued behavior. No 91 | interaction with the people involved, including unsolicited interaction with 92 | those enforcing the Code of Conduct, for a specified period of time. This 93 | includes avoiding interactions in community spaces as well as external channels 94 | like social media. Violating these terms may lead to a temporary or 95 | permanent ban. 96 | 97 | ### 3. Temporary Ban 98 | 99 | **Community Impact**: A serious violation of community standards, including 100 | sustained inappropriate behavior. 101 | 102 | **Consequence**: A temporary ban from any sort of interaction or public 103 | communication with the community for a specified period of time. No public or 104 | private interaction with the people involved, including unsolicited interaction 105 | with those enforcing the Code of Conduct, is allowed during this period. 106 | Violating these terms may lead to a permanent ban. 107 | 108 | ### 4. Permanent Ban 109 | 110 | **Community Impact**: Demonstrating a pattern of violation of community 111 | standards, including sustained inappropriate behavior, harassment of an 112 | individual, or aggression toward or disparagement of classes of individuals. 113 | 114 | **Consequence**: A permanent ban from any sort of public interaction within 115 | the community. 116 | 117 | ## Attribution 118 | 119 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 120 | version 2.0, available at 121 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. 122 | 123 | Community Impact Guidelines were inspired by [Mozilla's code of conduct 124 | enforcement ladder](https://github.com/mozilla/diversity). 125 | 126 | [homepage]: https://www.contributor-covenant.org 127 | 128 | For answers to common questions about this code of conduct, see the FAQ at 129 | https://www.contributor-covenant.org/faq. Translations are available at 130 | https://www.contributor-covenant.org/translations. 131 | -------------------------------------------------------------------------------- /content/docs/getting-started/quick-start.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Quick Start" 3 | description: "Get started with JetKVM quickly. Learn how to set up your device or extensions, understand the front display information, and familiarize yourself with the available ports for remote computer control." 4 | order: 1 5 | --- 6 | 7 | ## JetKVM 8 | 9 | ### Installation 10 | 11 | Getting your JetKVM up and running is easy. Follow these steps to start controlling your target computer remotely. 12 | 13 | 1. Attach the **USB-C port** on the back of the JetKVM to a USB port on the computer you wish to control. 14 | 2. Plug a **Mini HDMI cable** from the **HDMI port** on the JetKVM to the target computer's HDMI port. 15 | 3. Insert an **Ethernet cable** into the **Ethernet port** on the JetKVM to connect it to your network. 16 | 4. Plug in the JetKVM. Once powered, the front display will show the device's **IP address**. 17 | 5. Open a browser and enter the **IP address** displayed on the JetKVM screen. 18 | 19 | You can now control your target computer remotely. 20 | 21 | ### Front Display Overview 22 | 23 | Front of JetKVM device 28 | 29 | The front display of the JetKVM provides key information at a glance. Here’s what each section of the display shows: 30 | 31 | - **Device IP**: The IP address assigned to your device by the network, allowing you to access the web UI. 32 | - **Device MAC**: The unique MAC address of the device. 33 | - **Active Connections**: Displays the number of active connections currently in use. 34 | - **HDMI Cable Status**: Shows whether the HDMI connection to the target computer is active. 35 | - **USB Cable Status**: Indicates whether the USB connection to the target computer is active. 36 | 37 | This information helps you quickly verify if your JetKVM is properly connected and ready for remote management. 38 | 39 | --- 40 | 41 | ### Ports Overview 42 | 43 | Back of JetKVM device 48 | Here's a look at the available ports on your JetKVM device: 49 | 50 | - **USB-C**: For connecting to the target computer. 51 | - **HDMI Mini**: For receiving the video signal from the target computer. 52 | - **Ethernet - RJ45**: For network connectivity. 53 | - **Extension Port - RJ11**: For additional features like ATX power control, Serial Console access, or AC/DC power control. 54 | 55 | ## ATX Power Control Extension 56 | 57 | The JetKVM ATX Power Control Extension allows you to remotely power on, reset, and monitor your PC - without losing your front panel buttons and LEDs. This guide walks you through installing it safely and clearly. 58 | 59 | - **ATX Extension Board** - Extension board with USB-C and RJ12 ports that mounts inside PC case like a slot card 60 | - **RJ12 Cable** - Links ATX board to JetKVM device 61 | - **PCIe Slot Cover Brackets** - Brackets for routing in different case sizes (standard and small options) 62 | - **Ribbon Cables** - Female-to-female connectors used to link the ATX board to your motherboard’s `F_PANEL` header. 63 | 64 | ### Installation 65 | **1. Power Down and Prepare Your PC** 66 | 67 | Let's make sure everything's safe before working inside your case. 68 | 69 | 1. **Shut down your PC** completely through the operating system 70 | 2. **Flip the PSU switch to OFF** (usually located on the back of the power supply) 71 | 3. **Unplug the power cable** from the wall or power strip 72 | 4. **Ground yourself** by touching something metal (like the case frame) 73 | 5. **Set up your workspace** with tools and lighting nearby - you'll mainly need a Phillips screwdriver 74 | 75 | **2. Mount the ATX board in the case** 76 | 77 | Let’s physically install the board in a free slot. We include two bracket sizes, choose the one that fits your case the best. 78 | 79 | 1. **Pick any empty PCI/PCIe slot opening** (it doesn’t use electrical contacts, just mounting space). 80 | 2. **Slide the board in** and secure the metal bracket with a screw. 81 | 82 | #### 3. Connect ATX Extension to motherboard 83 | Locate the `F_PANEL` header on your motherboard. It’s usually a small white or black 9- or 10-pin block labeled `F_PANEL`, `PANEL1`, or `FP1`. 84 | 85 | If you've previously connected your front panel controls to your motherboard, disconnect them from the motherboard now (we'll reconnect them later). 86 | 87 | Using your motherboard manual as a reference, **identify the specific layout and polarity of your motherboard pins** to match and connect it with the labels on the JetKVM ATX Board. 88 | 89 | **This step is a common source of installation errors**, so take extra care to match both the pin layout and polarity (+/-) with the labels on the JetKVM ATX Board. If you don't have your motherboard manual handy, you can usually find it by searching for your motherboard model number followed by "manual" online. 90 | 91 | > Make sure that you get the layout & polarity(+/-) on all the pins. It matters. 92 | 93 | **4. Connect the Case Front Panel Cables (Optional)** 94 | 95 | If you want to have control of your computer from the front panel, you'll need to connect them to the JetKVM, which will forward the signals to the motherboard. 96 | 97 | These cables are typically soldered directly to the case and terminate in female ATX pin connectors, usually labeled for power, reset, and LED indicators. 98 | 99 | In the previous step, we likely disconnected these cables from the motherboard. Now, connect them to the corresponding pins on the JetKVM ATX board using the pinout guide below. Be sure to match the polarity(+/-) on the LED Pins - proper polarity is essential for it to work correctly. 100 | 101 | 102 | | JetKVM ATX Board Label | Front Panel ribbon cable Label | Polarity(+/-) Matters? | 103 | | ---------------------- | ------------------------------ | ------------------------------ | 104 | | BTN PWR + / – | Power SW | No | 105 | | BTN RST + / – | Reset SW | No | 106 | | LED HDD + / – | HDD LED | Yes, check manual for polarity | 107 | | LED PWR + / – | Power LED | Yes, check manual for polarity | 108 | 109 | 110 | > Make sure that you get the layout & polarity(+/-) for LED HDD & LED PWR. It matters. 111 | 112 | --- 113 | 114 | Now that everything is connected, head over to the JetKVM web interface by entering the device’s IP address in your browser. In the JetKVM toolbar, click on “Extension” to access the ATX controls. If everything is configured correctly, you should now be able to power on, reset, or shut down your PC remotely - directly from the JetKVM interface. 115 | -------------------------------------------------------------------------------- /content/scripts/install-tailscale.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -eu 4 | 5 | # All the code is wrapped in a main function that gets called at the 6 | # bottom of the file, so that a truncated partial download doesn't end 7 | # up executing half a script. 8 | main() { 9 | 10 | TAILSCALE_VERSION="1.88.1" 11 | JETKVM_IP="" 12 | AUTO_YES=false 13 | 14 | # Parse command line arguments 15 | while [ $# -gt 0 ]; do 16 | case $1 in 17 | -v | --version) 18 | TAILSCALE_VERSION="$2" 19 | shift 2 20 | ;; 21 | -y | --yes) 22 | AUTO_YES=true 23 | shift 24 | ;; 25 | *) 26 | JETKVM_IP="$1" 27 | shift 28 | ;; 29 | esac 30 | done 31 | 32 | if [ -z "$JETKVM_IP" ]; then 33 | echo "ERROR: JetKVM IP address is required" 34 | echo "" 35 | echo "Usage: $0 [-v|--version ] [-y|--yes] " 36 | echo "" 37 | echo "Options:" 38 | echo " -v, --version Specify Tailscale version (default: $TAILSCALE_VERSION)" 39 | echo " -y, --yes Automatically answer yes to confirmation prompt" 40 | echo "" 41 | echo "Examples:" 42 | echo " $0 192.168.1.64" 43 | echo " $0 -v 1.88.1 -y 192.168.1.64" 44 | echo " $0 --version 1.88.1 192.168.1.64" 45 | echo "" 46 | echo "Default Tailscale version: $TAILSCALE_VERSION (first version to support JetKVM)" 47 | exit 1 48 | fi 49 | 50 | export TAILSCALE_VERSION 51 | 52 | # Confirmation prompt (unless auto-yes is enabled) 53 | if [ "$AUTO_YES" = false ]; then 54 | echo "───────────────────────────────────────────────────────────" 55 | echo " JetKVM Tailscale Installation" 56 | echo "───────────────────────────────────────────────────────────" 57 | echo "" 58 | echo " JetKVM IP: $JETKVM_IP" 59 | echo " Tailscale Version: $TAILSCALE_VERSION" 60 | echo "" 61 | echo " Note: The device will be rebooted during installation" 62 | echo "" 63 | 64 | if [ -t 0 ]; then 65 | # stdin is a TTY 66 | printf "Continue? [y/N]: " 67 | read -r response 68 | else 69 | # stdin is NOT a TTY (e.g., curl | sh). Read from the terminal. 70 | printf "Continue? [y/N]: " >/dev/tty 71 | read -r response /dev/null 2>&1; then 90 | echo "ERROR: JetKVM device at $JETKVM_IP is not reachable" 91 | echo " Please verify the IP address and ensure the device is powered on and connected to the network" 92 | exit 1 93 | fi 94 | echo " Device is reachable" 95 | 96 | # Check if SSH access is available (Developer Mode enabled) 97 | echo " Checking SSH access (Developer Mode)..." 98 | 99 | # First, test SSH connectivity without BatchMode to get proper error messages 100 | SSH_TEST_OUTPUT=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ 101 | -o PreferredAuthentications=publickey -o PubkeyAuthentication=yes -o PasswordAuthentication=no \ 102 | root@"$JETKVM_IP" 'echo "SSH OK"' 2>&1) || SSH_EXIT_CODE=$? 103 | 104 | if [ "${SSH_EXIT_CODE:-0}" -ne 0 ]; then 105 | echo "" 106 | # Check if it's a connection refused (port 22 not open - Developer Mode not enabled) 107 | if echo "$SSH_TEST_OUTPUT" | grep -qi "connection refused\|connection timed out"; then 108 | echo "ERROR: SSH connection refused" 109 | echo " Most likely cause: Developer Mode is not enabled on the JetKVM device." 110 | echo "" 111 | echo " Follow the guide at:" 112 | echo " https://jetkvm.com/docs/advanced-usage/developing#developer-mode" 113 | echo "" 114 | # Check if it's a permission denied (SSH enabled but no key configured) 115 | elif echo "$SSH_TEST_OUTPUT" | grep -qi "permission denied\|authentication failed"; then 116 | echo "ERROR: SSH authentication failed" 117 | echo " Most likely cause: Developer Mode is enabled, but your SSH public key is not added." 118 | echo "" 119 | echo " Follow the guide at:" 120 | echo " https://jetkvm.com/docs/advanced-usage/developing#developer-mode" 121 | echo "" 122 | else 123 | echo "ERROR: SSH connection failed - unknown cause" 124 | echo " Error details: $SSH_TEST_OUTPUT" 125 | echo "" 126 | echo " This may indicate Developer Mode issues. Please check the guide at:" 127 | echo " https://jetkvm.com/docs/advanced-usage/developing#developer-mode" 128 | echo "" 129 | fi 130 | exit 1 131 | fi 132 | echo " SSH access confirmed" 133 | 134 | echo "[2/7] Downloading Tailscale $TAILSCALE_VERSION checksum..." 135 | HASH=$(curl -fsSL https://pkgs.tailscale.com/stable/tailscale_"${TAILSCALE_VERSION}"_arm.tgz.sha256) 136 | 137 | echo "[3/7] Downloading Tailscale $TAILSCALE_VERSION package..." 138 | TMP_FILE=$(mktemp -t tailscale.XXXXXX.tgz) 139 | curl -fSL https://pkgs.tailscale.com/stable/tailscale_"${TAILSCALE_VERSION}"_arm.tgz -o "$TMP_FILE" >/dev/null 2>&1 140 | 141 | echo "[4/7] Verifying package integrity..." 142 | LOCAL_HASH=$(sha256sum "$TMP_FILE" | awk '{print $1}') 143 | if [ "$HASH" != "$LOCAL_HASH" ]; then 144 | rm -f "$TMP_FILE" 145 | echo "ERROR: Package verification failed!" 146 | echo " Expected: $HASH" 147 | echo " Got: $LOCAL_HASH" 148 | exit 1 149 | fi 150 | echo " Package verification successful" 151 | 152 | echo "[5/7] Transferring Tailscale package to JetKVM..." 153 | ssh root@"${JETKVM_IP}" "cat > /userdata/tailscale.tgz" <"$TMP_FILE" 154 | 155 | echo "[6/7] Installing and configuring Tailscale on JetKVM..." 156 | ssh -o ServerAliveInterval=1 -o ServerAliveCountMax=1 \ 157 | root@"$JETKVM_IP" \ 158 | "export TAILSCALE_VERSION=$TAILSCALE_VERSION; ash -s" 2>/dev/null <<'EOF' || true 159 | set -e 160 | 161 | cd /userdata 162 | 163 | echo " Extracting package..." 164 | tar xf ./tailscale.tgz 165 | 166 | # Remove the old tailscale directory 167 | rm -rf ./tailscale 168 | 169 | # Move the new tailscale directory to the correct location (tailscale configure assumes this path) 170 | mv "./tailscale_${TAILSCALE_VERSION}_arm" tailscale 171 | 172 | echo " Configuring Tailscale for JetKVM..." 173 | cd ./tailscale 174 | ./tailscale configure jetkvm 2>&1 >/dev/null 175 | 176 | sync 177 | 178 | echo " Rebooting JetKVM device..." 179 | 180 | # Fire the reboot asynchronously, then keep the session open 181 | ( sleep 1; reboot ) & 182 | # Block until the kernel kills this session (i.e., only returns once SSH drops) 183 | exec tail -f /dev/null 184 | EOF 185 | 186 | echo " Waiting for JetKVM to reboot and come back online..." 187 | i=1 188 | while [ "$i" -le 120 ]; do 189 | echo " Checking device status... ($i/120s)" 190 | if ssh -q -o ConnectTimeout=2 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ 191 | root@"$JETKVM_IP" 'tailscale version' >/dev/null 2>&1; then 192 | echo " JetKVM is back online with Tailscale installed!" 193 | break 194 | fi 195 | 196 | if [ "$i" -eq 120 ]; then 197 | echo "ERROR: Timeout - JetKVM did not come back online within 2 minutes" 198 | echo " Please check the device status manually" 199 | exit 1 200 | fi 201 | 202 | i=$((i + 1)) 203 | sleep 1 204 | done 205 | 206 | echo "[7/7] Starting Tailscale service..." 207 | ssh root@"$JETKVM_IP" "tailscale up" 208 | echo "" 209 | echo "SUCCESS: Tailscale installation completed!" 210 | echo " Your JetKVM device is now ready to connect to your Tailscale network." 211 | } 212 | 213 | main "$@" 214 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc., 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | 294 | Copyright (C) 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License along 307 | with this program; if not, write to the Free Software Foundation, Inc., 308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 309 | 310 | Also add information on how to contact you by electronic and paper mail. 311 | 312 | If the program is interactive, make it output a short notice like this 313 | when it starts in an interactive mode: 314 | 315 | Gnomovision version 69, Copyright (C) year name of author 316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 317 | This is free software, and you are welcome to redistribute it 318 | under certain conditions; type `show c' for details. 319 | 320 | The hypothetical commands `show w' and `show c' should show the appropriate 321 | parts of the General Public License. Of course, the commands you use may 322 | be called something other than `show w' and `show c'; they could even be 323 | mouse-clicks or menu items--whatever suits your program. 324 | 325 | You should also get your employer (if you work as a programmer) or your 326 | school, if any, to sign a "copyright disclaimer" for the program, if 327 | necessary. Here is a sample; alter the names: 328 | 329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 331 | 332 | , 1 April 1989 333 | Ty Coon, President of Vice 334 | 335 | This General Public License does not permit incorporating your program into 336 | proprietary programs. If your program is a subroutine library, you may 337 | consider it more useful to permit linking proprietary applications with the 338 | library. If this is what you want to do, use the GNU Lesser General 339 | Public License instead of this License. 340 | --------------------------------------------------------------------------------