Skip to content

PiKVM identification

This page explains how PiKVM is presented to the target host's operating system, and how this can be changed. This is useful for developers, testers and system administrators who need PiKVM to emulate a specific USB device or monitor.

Tip

Before exploring this page, we recommend to read the PiKVM configuration guide so that you understand the terminology and how exactly the parameters described below change.


Basics

PiKVM is a combined emulator of several devices for user interaction. Simply put, your host sees the connected PiKVM not just as a single device, but as a set of multiple devices.

In the most default case out of the box, these are the following:

  • HDMI video display;
  • USB keyboard;
  • USB mouse (two mice for PiKVM V4);
  • USB mass storage drive (ejectable);

Thus, PiKVM emulates two types of devices: HDMI and USB. Each of them has a specific set of identifiers. For example, if you go to monitor settings on the host, you will see something like PiKVM V4 Plus. It works in a similar way with USB.


Replicating setups

Using PiKVM utilities, you can replicate the entire IDs of peripheral devices in automatic or manual way.

  • PiKVM V4 Plus is able to import and adopt both EDID and USB IDs directly from your physical display and some USB device.
  • PiKVM V4 Mini doesn't have HDMI output and extra USB, but you can change configuration manually.
  • PiKVM V3 or DIY V2 is able to import USB IDs, but not EDID.

Both automatic and manual paths are fully described later on this page.


HDMI Identifiers

The EDID (Extended Display Identification Data) is responsible for presenting the display. It also provides the host with information about the resolutions that PiKVM supports. More information about this is written on the EDID guide, and here we will provide brief information.

Please note that this applies to PiKVM V3, V4 and DIY based on CSI bridge. It is impossible to change the EDID for the HDMI-USB dongle.

Quick video IDs changing on PiKVM V4 Plus

PiKVM V4 Plus has a simple way to read and adopt display identifiers like model and serial number from a physical monitor connected to OUT2 port (it's also used for HDMI passthrough). This way, the target host will recognize PiKVM as your display.

To adopt display identifiers, connect the display to OUT2 port and run these commands:

[root@pikvm ~]# rw
[root@pikvm ~]# kvmd-edidconf --import-display-ids --apply
[root@pikvm ~]# ro

Now the display can be unplugged. PiKVM will remember the new settings (in /etc/kvmd/tc358743-edid.hex) and apply them immediately (--apply option).

Let's check the identification. Run kvmd-edidconf on PiKVM:

[root@pikvm ~]# kvmd-edidconf
Manufacturer ID: LNX
Product ID:      0x7773 (30579)
Serial number:   0x01010101 (16843009)
Monitor name:    PiKVM V4 Plus
Monitor serial:  CAFEBABE
Audio:           yes

The fields have obvious names and purposes. Note the two similar fields Serial number and Monitor serial. The first has a numeric value, and the second is ASCII. If you are using a custom EDID from some real display, some fields may be missing.

To change the values of the EDID fields, use the kvmd-edidconf with options, a complete list is available in kvmd-edidconfi --help.

Here the small example of changing all available fields from the previous listing:

[root@pikvm ~]# rw
[root@pikvm ~]# kvmd-edidconf --set-mfc-id=TTP --set-product-id=0x5B81 --set-serial=0x8DE11B79 --set-monitor-name=TOSHIBA --set-monitor-serial=ABCD1234 --apply
Manufacturer ID: TTP
Product ID:      0x5B81 (23425)
Serial number:   0x8DE11B79 (2380340089)
Monitor name:    TOSHIBA
Monitor serial:  ABCD1234
Audio:           yes
...
[root@pikvm ~]# ro

The full list of manufacturer IDs is available here.

For a detailed guide on customizing EDID identifiers, please visit the EDID guide.


USB Identifiers

What is described here concerns only the USB identifiers, not the device structure. Your typical PiKVM setup is recognized as a keyboard with a built-in mouse and flash drive. If you encounter USB compatibility issues due to legacy OS or buggy drivers on the target host, there are two things you can do:

Please note that this applies to PiKVM V2+. Identifiers on V1 and/or the Pico HID can't be changed without recompilation and reflashing of the firmware.

Quick USB IDs changing

All PiKVMs (except DIY based on Zero W) have a simple way to read and adopt USB identifiers from a physical USB keyboard or mouse connected to any USB port. This way, the target host will recognize PiKVM as your regular USB device.

To adopt USB identifiers, connect a keyboard or mouse to PiKVM and run these commands:

[root@pikvm ~]# rw
[root@pikvm ~]# kvmd-otgconf --import-usb-ids
[root@pikvm ~]# reboot

Now the device can be unplugged. PiKVM will remember the new settings (in /etc/kvmd/override.yaml) and apply them after reboot (the last command).

As you may have found out from the PiKVM configuration guide (if you haven't read it yet, now is the time), you can get the list of all configuration parameters using the kvmd -m command.

Below is a listing of all the parameters, from which the unrelated and those USB parameters that should not be changed have been removed. In the context of identifiers, we are interested in the following:

[root@pikvm ~]# kvmd -m
otg:
    vendor_id: 7531
    product_id: 260
    manufacturer: PiKVM
    product: PiKVM Composite Device
    serial: CAFEBABE
    device_version: -1
    max_power: 250

    devices:
        drives:
            default:
                inquiry_string:
                    cdrom:
                        vendor: PiKVM
                        product: Optical Drive
                        revision: '1.00'

                    flash:
                        vendor: PiKVM
                        product: Flash Drive
                        revision: '1.00'

        msd:
            default:
                inquiry_string:
                    cdrom:
                        vendor: PiKVM
                        product: Optical Drive
                        revision: '1.00'

                    flash:
                        vendor: PiKVM
                        product: Flash Drive
                        revision: '1.00'

Pay attention to the nesting levels. The parameters are always located in certain sections. All numeric values are displayed in decimal form, but in the config you can use a hex form. The generally accepted names from the USB specifications are shown too.

Parameter USB Spec Description
vendor_id idVendor Unique vendor ID assigned by USB.org.
product_id idProduct Just an ID for the product assigned by this vendor.
manufacturer iManufacturer to 0x409 ASCII name of the vendor.
product iProduct to 0x409 ASCII name of the product.
serial iSerialNumber to 0x409 ASCII serial number of the product.
device_version bcdDevice Kinda the revision of the device. Assigned automatically. It can be changed to 256, 257, 258 or something like this

These IDs are also used for the microphone on PiKVM V4.

The strings under otg/drives and otg/msd sections deserve a special description. They relate to virtual media emulation and are separate parts of the SCSI inquiry string, the drive identifier used by the OS driver. All three parameters vendor, product, and revision are short ASCII strings responsible for CD/DVD or Flash representation.

The msd refers to a virtual drive accessible from the Web UI, and the drives describes all additional drives if you have configured them (disabled by default). Note that mass storage drive can be completely disabled.

To change the parameters, use the /etc/kvmd/override.yaml, for example, like this:

otg:
    vendor_id: 0x6940
    product_id: 0x6973
    manufacturer: Corsair
    product: Gaming RGB
    serial: 1000

    devices:
        msd:
            default:
                inquiry_string:
                    cdrom:
                        vendor: Corsair
                        product: DVD
                        revision: '1.00'

                    flash:
                        vendor: Corsair
                        product: STICK
                        revision: '1.00'

After changing validate the config using kvmd -M. You will see a list with your changes and default values, or a message about configuration error.

If everything is fine, perform the soft reboot command.