Skip to content

Identifying PiKVM on the target host

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.

Info

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.


HDMI Identifiers

Info

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

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

Quick IDs changing on PiKVM V4 Plus

PiKVM V4 Plus has a simple way read and adopt display identifiers like model and serial number from your physical display. See here for details.

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, please visit this page. There you can also find out how to set the EDID from a real monitor, or quickly adopt your real monitor IDs with PiKVM V4 Plus.


USB Identifiers

Info

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

USB is a much more complex subsystem and another part of PiKVM is responsible for it. Be careful when changing the settings here, it may cause the USB to fail.

For information on how to control emulated devices see here. The identification is described below.

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 the full config list with changed and default values, or a message about configuration error.

If everything is fine, perform the soft reboot.