USB configuration¶
PiKVM V2+ emulates a small set of USB devices to ensure normal operation: a keyboard, mouse and mass storage drive. However, the possibilities are not limited to this. Optionally, you can add a USB ethernet, serial port, or (exclusive to PiKVM V3 and V4 Mini/Plus) a microphone to support two-way audio.
In rare cases, the target host's BIOS/UEFI may not understand such a large number of emulated devices on single USB port, and some of them may need to be disabled.
A complete USB configuration changing (adding or removing devices) requires a reboot, but it is possible to temporarily disable and then re-enable existing emulated devices in preset.
Basics¶
Each emulated USB device consumes a limited hardware resource called endpoints.
Depending on the device, the number of required endpoints varies:
Device | Endpoints |
---|---|
Keyboard, mouse | 1 for each |
Mass Storage Drive | 2 for each |
USB Microphone | 2 |
USB Ethernet, USB Serial | 3 for each |
In total, PiKVM provides 9 endpoints for USB emulation, some of which are used by default:
-
PiKVM V2-V3 emulates one absolute mouse and one mass storage and uses 4 of 9 endpoints.
-
PiKVM V4 Mini/Plus also adds a relative mouse by default so it uses 5 of 9 endpoints.
You can add other devices remaining endpoints, disable existing ones at all to free some endpoints, or do this only temporarily.
Moreover, you can configure the preset with a large number of devices (more than PiKVM allows by endpoints), and then dynamically enable only the necessary ones.
If you have configured too many devices that consume more than 9 endpoints in total, the least important of them will be inactive. You can enable them using dynamic configuration.
To configure additional devices, please refer to the corresponding pages:
-
USB Microphone - Two-way audio communication for voice applications on the target host. Exclusive to PiKVM V3 and V4 Mini/Plus.
-
Absolute and relative mouse - The most convenient type of mouse is an absolute mouse, but some BIOSes may not understand it. In this case, the relative one will help you.
-
USB Ethernet - A FTP or Samba server on PiKVM can be configured, and the target host will see this over the network. It is also possible that PiKVM can work as a router to connect a host to a big network.
-
USB Serial Port - It can be used for terminal access from the target host to the PiKVM, or for any other purpose that requires a serial connection.
Default preset¶
Device setup includes two stages: adding to config and starting.
When you add a device as described on the pages above, it automatically turns on after PiKVM reboot and becomes available on the target device. This behaviour can be changed: the device will be created, but not active until you turn it on dynamically.
The /etc/kvmd/override.yaml
file is used for such changes. In the following example,
there are USB Serial Port and Microphone enabled,
but the serial port is not started by default:
otg:
devices:
serial:
enabled: true
start: false
audio:
enabled: true
The start
parameter is also available for all USB devices, see kvmd -m
for the entire configuration tree.
Dynamic configuration¶
Command-line utility¶
The kvmd-otgconf
utility allows you to view and modify the USB configuration on the fly.
It will also inform you about the number of endpoints used.
Changing requires root permissions.
View the config. Each line represents an emulated device. Plus or minus sign means the state (enabled or not), next it displays the device name, the number of required endpoints and its description.
[root@pikvm ~]# kvmd-otgconf
# Endpoints used: 7 of 9
# Endpoints free: 2
- acm.usb0 # [3] Serial Port
+ hid.usb0 # [1] Keyboard
+ hid.usb1 # [1] Absolute Mouse
+ hid.usb2 # [1] Relative Mouse
+ mass_storage.usb0 # [2] Mass Storage Drive
+ uac2.usb0 # [2] Microphone
Sometimes it happens that it is impossible to get into the UEFI/BIOS due to their bugs in USB support, and you need to boot from the PiKVM mass storage.
In this case you can disable all devices except keyboard and relative mouse, and enter the BIOS:
[root@pikvm ~]# kvmd-otgconf -d mass_storage.usb0 uac2.usb0 hid.usb1
# Endpoints used: 2 of 9
# Endpoints free: 7
- acm.usb0 # [3] Serial Port
+ hid.usb0 # [1] Keyboard
- hid.usb1 # [1] Absolute Mouse
+ hid.usb2 # [1] Relative Mouse
- mass_storage.usb0 # [2] Mass Storage Drive
- uac2.usb0 # [2] Microphone
Then change the boot order in the BIOS by setting the USB sticks as first priority.
Exit the BIOS, and turn on mass storage again. Use it as usual to boot the image from PiKVM mass storage:
[root@pikvm ~]# kvmd-otgconf -e mass_storage.usb0
# Endpoints used: 4 of 9
# Endpoints free: 5
- acm.usb0 # [3] Serial Port
+ hid.usb0 # [1] Keyboard
- hid.usb1 # [1] Absolute Mouse
+ hid.usb2 # [1] Relative Mouse
+ mass_storage.usb0 # [2] Mass Storage Drive
- uac2.usb0 # [2] Microphone
You can also enable uac2.usb0
and hid.usb1
again.
Web UI Menu¶
Using the pseudo-GPIO driver, you can USB control devices via the menu in the web interface. Read about GPIO basics here.
To setup the menu, use kvmd-otgconf --make-gpio-config
to generate the configuration, and merge it
with your existing one in /etc/kvmd/override.yaml
in a usual way.
The example of kvmd-otgconf --make-gpio-config
output
# kvmd-otgconf --make-gpio-config
kvmd:
gpio:
drivers:
otgconf:
type: otgconf
scheme:
hid.usb0:
driver: otgconf
mode: output
pin: hid.usb0
pulse: false
hid.usb1:
driver: otgconf
mode: output
pin: hid.usb1
pulse: false
hid.usb2:
driver: otgconf
mode: output
pin: hid.usb2
pulse: false
mass_storage.usb0:
driver: otgconf
mode: output
pin: mass_storage.usb0
pulse: false
view:
table:
- ["#Keyboard", "#hid.usb0", hid.usb0]
- ["#Absolute Mouse", "#hid.usb1", hid.usb1]
- ["#Relative Mouse", "#hid.usb2", hid.usb2]
- ["#Mass Storage Drive", "#mass_storage.usb0", mass_storage.usb0]
Please note that this menu is not dynamically generated, you need to update the configuration if you added or deleted devices.