From 5b5c11e5501f26475a40b19de413d399de25f326 Mon Sep 17 00:00:00 2001
From: slinkypew <273519076+slinkypew@users.noreply.github.com>
Date: Wed, 15 Apr 2026 23:09:55 -0500
Subject: [PATCH 1/3] v1
---
config.go | 11 ++++++-----
internal/usbgadget/config.go | 1 +
internal/usbgadget/usbgadget.go | 11 ++++++-----
ui/localization/messages/en.json | 2 ++
ui/src/components/UsbInfoSetting.tsx | 25 +++++++++++++++++++++----
ui/src/hooks/stores.ts | 1 +
6 files changed, 37 insertions(+), 14 deletions(-)
diff --git a/config.go b/config.go
index ce7d14cc0..5069a9ea1 100644
--- a/config.go
+++ b/config.go
@@ -163,11 +163,12 @@ var (
Timezone: "UTC",
}
defaultUsbConfig = usbgadget.Config{
- VendorId: "0x1d6b", //The Linux Foundation
- ProductId: "0x0104", //Multifunction Composite Gadget
- SerialNumber: "",
- Manufacturer: "JetKVM",
- Product: "USB Emulation Device",
+ VendorId: "0x1d6b", //The Linux Foundation
+ ProductId: "0x0104", //Multifunction Composite Gadget
+ SerialNumber: "",
+ Manufacturer: "JetKVM",
+ Product: "USB Emulation Device",
+ Configuration: "Config 1: HID",
}
defaultUsbDevices = usbgadget.Devices{
AbsoluteMouse: true,
diff --git a/internal/usbgadget/config.go b/internal/usbgadget/config.go
index e8eee9f2c..57bb88cf7 100644
--- a/internal/usbgadget/config.go
+++ b/internal/usbgadget/config.go
@@ -95,6 +95,7 @@ func (u *UsbGadget) loadGadgetConfig() {
u.configMap["base_info"].attrs["serialnumber"] = u.customConfig.SerialNumber
u.configMap["base_info"].attrs["manufacturer"] = u.customConfig.Manufacturer
u.configMap["base_info"].attrs["product"] = u.customConfig.Product
+ u.configMap["base_info"].configAttrs["configuration"] = u.customConfig.Configuration
}
func (u *UsbGadget) SetGadgetConfig(config *Config) {
diff --git a/internal/usbgadget/usbgadget.go b/internal/usbgadget/usbgadget.go
index 1d73cdf3c..655d1e322 100644
--- a/internal/usbgadget/usbgadget.go
+++ b/internal/usbgadget/usbgadget.go
@@ -26,11 +26,12 @@ type Devices struct {
// Config is a struct that represents the customizations for a USB gadget.
// TODO: rename to something else that won't confuse with the USB gadget configuration
type Config struct {
- VendorId string `json:"vendor_id"`
- ProductId string `json:"product_id"`
- SerialNumber string `json:"serial_number"`
- Manufacturer string `json:"manufacturer"`
- Product string `json:"product"`
+ VendorId string `json:"vendor_id"`
+ ProductId string `json:"product_id"`
+ SerialNumber string `json:"serial_number"`
+ Manufacturer string `json:"manufacturer"`
+ Product string `json:"product"`
+ Configuration string `json:"configuration"`
strictMode bool // when it's enabled, all warnings will be converted to errors
isEmpty bool
diff --git a/ui/localization/messages/en.json b/ui/localization/messages/en.json
index 219bbd3cb..fad3e5fcc 100644
--- a/ui/localization/messages/en.json
+++ b/ui/localization/messages/en.json
@@ -975,6 +975,8 @@
"usb_config_update_identifiers": "Update USB Identifiers",
"usb_config_vendor_id_label": "Vendor ID",
"usb_config_vendor_id_placeholder": "Enter Vendor ID",
+ "usb_config_configuration_label": "Configuration",
+ "usb_config_configuration_placeholder": "Enter Configuration",
"usb_device_classes_description": "USB device classes in the composite device",
"usb_device_classes_title": "Classes",
"usb_device_custom": "Custom",
diff --git a/ui/src/components/UsbInfoSetting.tsx b/ui/src/components/UsbInfoSetting.tsx
index bba4aa45d..5c94db385 100644
--- a/ui/src/components/UsbInfoSetting.tsx
+++ b/ui/src/components/UsbInfoSetting.tsx
@@ -29,6 +29,7 @@ export interface USBConfig {
serial_number: string;
manufacturer: string;
product: string;
+ configuration: string;
}
const usbConfigs = [
@@ -66,6 +67,7 @@ export function UsbInfoSetting() {
serial_number: deviceId,
manufacturer: "JetKVM",
product: "USB Emulation Device",
+ configuration: "Config 1: HID1",
},
"Logitech USB Input Device": {
vendor_id: "0x046d",
@@ -73,6 +75,7 @@ export function UsbInfoSetting() {
serial_number: generatedSerialNumber,
manufacturer: "Logitech (x64)",
product: "Logitech USB Input Device",
+ configuration: "Config 1: HID2",
},
"Wireless MultiMedia Keyboard": {
vendor_id: "0x045e",
@@ -80,6 +83,7 @@ export function UsbInfoSetting() {
serial_number: generatedSerialNumber,
manufacturer: "Microsoft",
product: "Wireless MultiMedia Keyboard",
+ configuration: "Config 1: HID3",
},
"Multimedia Pro Keyboard": {
vendor_id: "0x413c",
@@ -87,6 +91,7 @@ export function UsbInfoSetting() {
serial_number: generatedSerialNumber,
manufacturer: "Dell Inc.",
product: "Multimedia Pro Keyboard",
+ configuration: "Config 1: HID4",
},
}),
[deviceId],
@@ -203,6 +208,7 @@ function USBConfigDialog({
serial_number: "",
manufacturer: "",
product: "",
+ configuration: "",
});
const { send } = useJsonRpc();
@@ -242,6 +248,10 @@ function USBConfigDialog({
setUsbConfigState({ ...usbConfigState, product: value });
};
+ const handleUsbConfiguration = (value: string) => {
+ setUsbConfigState({ ...usbConfigState, configuration: value });
+ };
+
return (
@@ -277,10 +287,17 @@ function USBConfigDialog({
/>
handleUsbProduct(e.target.value)}
+ label={m.usb_config_configuration_label()}
+ placeholder={m.usb_config_configuration_placeholder()}
+ defaultValue={usbConfigState?.configuration}
+ onChange={e => handleUsbConfiguration(e.target.value)}
+ />
+ handleUsbConfiguration(e.target.value)}
/>
diff --git a/ui/src/hooks/stores.ts b/ui/src/hooks/stores.ts
index 23399f6ec..29ee2c2cc 100644
--- a/ui/src/hooks/stores.ts
+++ b/ui/src/hooks/stores.ts
@@ -688,6 +688,7 @@ export interface UsbConfigState {
serial_number: string;
manufacturer: string;
product: string;
+ configuration: string;
}
export const useUsbConfigModalStore = create(set => ({
From d21fa790d327812e529def5e95ae36977ebe4e77 Mon Sep 17 00:00:00 2001
From: slinkypew <273519076+slinkypew@users.noreply.github.com>
Date: Wed, 15 Apr 2026 23:18:18 -0500
Subject: [PATCH 2/3] v2
---
ui/src/components/UsbInfoSetting.tsx | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/ui/src/components/UsbInfoSetting.tsx b/ui/src/components/UsbInfoSetting.tsx
index 5c94db385..c3d57c53c 100644
--- a/ui/src/components/UsbInfoSetting.tsx
+++ b/ui/src/components/UsbInfoSetting.tsx
@@ -287,15 +287,15 @@ function USBConfigDialog({
/>
handleUsbConfiguration(e.target.value)}
+ label={m.usb_config_product_name_label()}
+ placeholder={m.usb_config_product_name_placeholder()}
+ defaultValue={usbConfigState?.product}
+ onChange={e => handleUsbProduct(e.target.value)}
/>
handleUsbConfiguration(e.target.value)}
/>
From c8b9ed0a4de75ad1604ebc6437331a52175ada77 Mon Sep 17 00:00:00 2001
From: slinkypew <273519076+slinkypew@users.noreply.github.com>
Date: Thu, 16 Apr 2026 00:35:07 -0500
Subject: [PATCH 3/3] v3
---
ui/localization/messages/cy.json | 2 ++
ui/localization/messages/da.json | 2 ++
ui/localization/messages/de.json | 2 ++
ui/localization/messages/es.json | 2 ++
ui/localization/messages/fr.json | 2 ++
ui/localization/messages/it.json | 2 ++
ui/localization/messages/ja.json | 2 ++
ui/localization/messages/nb.json | 2 ++
ui/localization/messages/pt.json | 2 ++
ui/localization/messages/ru.json | 2 ++
ui/localization/messages/sv.json | 2 ++
ui/localization/messages/zh-tw.json | 2 ++
ui/localization/messages/zh.json | 2 ++
ui/src/components/UsbInfoSetting.tsx | 8 ++++----
14 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/ui/localization/messages/cy.json b/ui/localization/messages/cy.json
index 60608f84d..5750d86d8 100644
--- a/ui/localization/messages/cy.json
+++ b/ui/localization/messages/cy.json
@@ -962,6 +962,8 @@
"usb_config_update_identifiers": "Diweddaru Dynodwyr USB",
"usb_config_vendor_id_label": "ID Gwerthwr",
"usb_config_vendor_id_placeholder": "Rhowch ID Gwerthwr",
+ "usb_config_configuration_label": "Ffurfweddiad",
+ "usb_config_configuration_placeholder": "Rhowch ffurfweddiad",
"usb_device_classes_description": "Dosbarthiadau dyfais USB yn y ddyfais gyfansawdd",
"usb_device_classes_title": "Dosbarthiadau",
"usb_device_custom": "Personol",
diff --git a/ui/localization/messages/da.json b/ui/localization/messages/da.json
index 53734301c..f9a2215de 100644
--- a/ui/localization/messages/da.json
+++ b/ui/localization/messages/da.json
@@ -975,6 +975,8 @@
"usb_config_update_identifiers": "Opdater USB-identifikatorer",
"usb_config_vendor_id_label": "Leverandør-ID",
"usb_config_vendor_id_placeholder": "Indtast leverandør-ID",
+ "usb_config_configuration_label": "Konfiguration",
+ "usb_config_configuration_placeholder": "Indtast konfiguration",
"usb_device_classes_description": "USB-enhedsklasser i den sammensatte enhed",
"usb_device_classes_title": "Klasser",
"usb_device_custom": "Tilpasset",
diff --git a/ui/localization/messages/de.json b/ui/localization/messages/de.json
index 8c69023af..4b85ef4f5 100644
--- a/ui/localization/messages/de.json
+++ b/ui/localization/messages/de.json
@@ -975,6 +975,8 @@
"usb_config_update_identifiers": "USB-Kennungen aktualisieren",
"usb_config_vendor_id_label": "Lieferanten-ID",
"usb_config_vendor_id_placeholder": "Geben Sie die Lieferanten-ID ein",
+ "usb_config_configuration_label": "Konfiguration",
+ "usb_config_configuration_placeholder": "Konfiguration eingeben",
"usb_device_classes_description": "USB-Geräteklassen im Verbundgerät",
"usb_device_classes_title": "Klassen",
"usb_device_custom": "Benutzerdefiniert",
diff --git a/ui/localization/messages/es.json b/ui/localization/messages/es.json
index 01bbbff18..ee4604c65 100644
--- a/ui/localization/messages/es.json
+++ b/ui/localization/messages/es.json
@@ -975,6 +975,8 @@
"usb_config_update_identifiers": "Actualizar identificadores USB",
"usb_config_vendor_id_label": "Identificación del proveedor",
"usb_config_vendor_id_placeholder": "Ingrese el ID del proveedor",
+ "usb_config_configuration_label": "Configuración",
+ "usb_config_configuration_placeholder": "Introducir configuración",
"usb_device_classes_description": "Clases de dispositivos USB en el dispositivo compuesto",
"usb_device_classes_title": "Clases",
"usb_device_custom": "Costumbre",
diff --git a/ui/localization/messages/fr.json b/ui/localization/messages/fr.json
index 58f9bdbcf..2f5230895 100644
--- a/ui/localization/messages/fr.json
+++ b/ui/localization/messages/fr.json
@@ -975,6 +975,8 @@
"usb_config_update_identifiers": "Mettre à jour les identifiants USB",
"usb_config_vendor_id_label": "ID du fournisseur",
"usb_config_vendor_id_placeholder": "Entrez l'ID du fournisseur",
+ "usb_config_configuration_label": "Configuration",
+ "usb_config_configuration_placeholder": "Saisir la configuration",
"usb_device_classes_description": "Classes de périphériques USB dans le périphérique composite",
"usb_device_classes_title": "Classes",
"usb_device_custom": "Personnalisé",
diff --git a/ui/localization/messages/it.json b/ui/localization/messages/it.json
index 9cd3363e4..5ee162ab8 100644
--- a/ui/localization/messages/it.json
+++ b/ui/localization/messages/it.json
@@ -975,6 +975,8 @@
"usb_config_update_identifiers": "Aggiorna identificatori USB",
"usb_config_vendor_id_label": "ID fornitore",
"usb_config_vendor_id_placeholder": "Inserisci l'ID del fornitore",
+ "usb_config_configuration_label": "Configurazione",
+ "usb_config_configuration_placeholder": "Inserisci configurazione",
"usb_device_classes_description": "Classi di dispositivi USB nel dispositivo composito",
"usb_device_classes_title": "Classi",
"usb_device_custom": "Personalizzato",
diff --git a/ui/localization/messages/ja.json b/ui/localization/messages/ja.json
index 3bd4f3b2b..3de2c2fb2 100644
--- a/ui/localization/messages/ja.json
+++ b/ui/localization/messages/ja.json
@@ -975,6 +975,8 @@
"usb_config_update_identifiers": "USB識別子を更新",
"usb_config_vendor_id_label": "ベンダーID",
"usb_config_vendor_id_placeholder": "ベンダーIDを入力",
+ "usb_config_configuration_label": "構成",
+ "usb_config_configuration_placeholder": "構成を入力",
"usb_device_classes_description": "複合デバイス内のUSBデバイスクラス",
"usb_device_classes_title": "クラス",
"usb_device_custom": "カスタム",
diff --git a/ui/localization/messages/nb.json b/ui/localization/messages/nb.json
index f08ced348..5b5b934fa 100644
--- a/ui/localization/messages/nb.json
+++ b/ui/localization/messages/nb.json
@@ -975,6 +975,8 @@
"usb_config_update_identifiers": "Oppdater USB-identifikatorer",
"usb_config_vendor_id_label": "Leverandør-ID",
"usb_config_vendor_id_placeholder": "Skriv inn leverandør-ID",
+ "usb_config_configuration_label": "Konfigurasjon",
+ "usb_config_configuration_placeholder": "Angi konfigurasjon",
"usb_device_classes_description": "USB-enhetsklasser i den sammensatte enheten",
"usb_device_classes_title": "Klasser",
"usb_device_custom": "Tilpasset",
diff --git a/ui/localization/messages/pt.json b/ui/localization/messages/pt.json
index 33da87a09..a38c620ab 100644
--- a/ui/localization/messages/pt.json
+++ b/ui/localization/messages/pt.json
@@ -975,6 +975,8 @@
"usb_config_update_identifiers": "Atualizar Identificadores USB",
"usb_config_vendor_id_label": "ID do Fornecedor",
"usb_config_vendor_id_placeholder": "Digite o ID do Fornecedor",
+ "usb_config_configuration_label": "Configuração",
+ "usb_config_configuration_placeholder": "Introduzir configuração",
"usb_device_classes_description": "Classes de dispositivo USB no dispositivo composto",
"usb_device_classes_title": "Classes",
"usb_device_custom": "Personalizado",
diff --git a/ui/localization/messages/ru.json b/ui/localization/messages/ru.json
index 4582ce6c5..69fbc5237 100644
--- a/ui/localization/messages/ru.json
+++ b/ui/localization/messages/ru.json
@@ -975,6 +975,8 @@
"usb_config_update_identifiers": "Обновить идентификаторы USB",
"usb_config_vendor_id_label": "ID поставщика",
"usb_config_vendor_id_placeholder": "Введите ID поставщика",
+ "usb_config_configuration_label": "Конфигурация",
+ "usb_config_configuration_placeholder": "Введите конфигурацию",
"usb_device_classes_description": "Классы USB-устройств в составном устройстве",
"usb_device_classes_title": "Классы",
"usb_device_custom": "Пользовательский",
diff --git a/ui/localization/messages/sv.json b/ui/localization/messages/sv.json
index ddd9d3db6..8010dcbfb 100644
--- a/ui/localization/messages/sv.json
+++ b/ui/localization/messages/sv.json
@@ -975,6 +975,8 @@
"usb_config_update_identifiers": "Uppdatera USB-identifierare",
"usb_config_vendor_id_label": "Leverantörs-ID",
"usb_config_vendor_id_placeholder": "Ange leverantörs-ID",
+ "usb_config_configuration_label": "Konfiguration",
+ "usb_config_configuration_placeholder": "Ange konfiguration",
"usb_device_classes_description": "USB-enhetsklasser i den sammansatta enheten",
"usb_device_classes_title": "Klasser",
"usb_device_custom": "Anpassad",
diff --git a/ui/localization/messages/zh-tw.json b/ui/localization/messages/zh-tw.json
index c16e6c723..f3de1c95f 100644
--- a/ui/localization/messages/zh-tw.json
+++ b/ui/localization/messages/zh-tw.json
@@ -975,6 +975,8 @@
"usb_config_update_identifiers": "更新 USB 識別碼",
"usb_config_vendor_id_label": "供應商 ID",
"usb_config_vendor_id_placeholder": "輸入供應商 ID",
+ "usb_config_configuration_label": "設定",
+ "usb_config_configuration_placeholder": "輸入設定",
"usb_device_classes_description": "複合裝置中的 USB 裝置類別",
"usb_device_classes_title": "類別",
"usb_device_custom": "自訂",
diff --git a/ui/localization/messages/zh.json b/ui/localization/messages/zh.json
index 1095a795b..080187e9e 100644
--- a/ui/localization/messages/zh.json
+++ b/ui/localization/messages/zh.json
@@ -975,6 +975,8 @@
"usb_config_update_identifiers": "更新 USB 标识符",
"usb_config_vendor_id_label": "供应商ID",
"usb_config_vendor_id_placeholder": "输入供应商ID",
+ "usb_config_configuration_label": "配置",
+ "usb_config_configuration_placeholder": "输入配置",
"usb_device_classes_description": "复合设备中包含的 USB 设备类。",
"usb_device_classes_title": "设备类",
"usb_device_custom": "自定义",
diff --git a/ui/src/components/UsbInfoSetting.tsx b/ui/src/components/UsbInfoSetting.tsx
index c3d57c53c..c0284c3ae 100644
--- a/ui/src/components/UsbInfoSetting.tsx
+++ b/ui/src/components/UsbInfoSetting.tsx
@@ -67,7 +67,7 @@ export function UsbInfoSetting() {
serial_number: deviceId,
manufacturer: "JetKVM",
product: "USB Emulation Device",
- configuration: "Config 1: HID1",
+ configuration: "Config 1: HID",
},
"Logitech USB Input Device": {
vendor_id: "0x046d",
@@ -75,7 +75,7 @@ export function UsbInfoSetting() {
serial_number: generatedSerialNumber,
manufacturer: "Logitech (x64)",
product: "Logitech USB Input Device",
- configuration: "Config 1: HID2",
+ configuration: "RQR24.11_B0036",
},
"Wireless MultiMedia Keyboard": {
vendor_id: "0x045e",
@@ -83,7 +83,7 @@ export function UsbInfoSetting() {
serial_number: generatedSerialNumber,
manufacturer: "Microsoft",
product: "Wireless MultiMedia Keyboard",
- configuration: "Config 1: HID3",
+ configuration: "Config 1: HID",
},
"Multimedia Pro Keyboard": {
vendor_id: "0x413c",
@@ -91,7 +91,7 @@ export function UsbInfoSetting() {
serial_number: generatedSerialNumber,
manufacturer: "Dell Inc.",
product: "Multimedia Pro Keyboard",
- configuration: "Config 1: HID4",
+ configuration: "Config 1: HID",
},
}),
[deviceId],