├── .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 |
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 | 
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 | 
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 | 
--------------------------------------------------------------------------------
/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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
--------------------------------------------------------------------------------