diff --git a/src/config/schema.rs b/src/config/schema.rs
index 0c3d6d9f..ac681396 100644
--- a/src/config/schema.rs
+++ b/src/config/schema.rs
@@ -166,6 +166,8 @@ impl Default for OtgDescriptorConfig {
pub enum OtgHidProfile {
/// Full HID device set (keyboard + relative mouse + absolute mouse + consumer control)
Full,
+ /// Full HID device set without MSD
+ FullNoMsd,
/// Legacy profile: only keyboard
LegacyKeyboard,
/// Legacy profile: only relative mouse
@@ -234,6 +236,7 @@ impl OtgHidProfile {
pub fn resolve_functions(&self, custom: &OtgHidFunctions) -> OtgHidFunctions {
match self {
Self::Full => OtgHidFunctions::full(),
+ Self::FullNoMsd => OtgHidFunctions::full(),
Self::LegacyKeyboard => OtgHidFunctions::legacy_keyboard(),
Self::LegacyMouseRelative => OtgHidFunctions::legacy_mouse_relative(),
Self::Custom => custom.clone(),
diff --git a/web/src/i18n/en-US.ts b/web/src/i18n/en-US.ts
index 12646d2f..5cd71156 100644
--- a/web/src/i18n/en-US.ts
+++ b/web/src/i18n/en-US.ts
@@ -584,7 +584,8 @@ export default {
otgHidProfile: 'OTG HID Profile',
otgHidProfileDesc: 'Select which HID functions are exposed to the host',
profile: 'Profile',
- otgProfileFull: 'Full (keyboard + relative mouse + absolute mouse + consumer)',
+ otgProfileFull: 'Full (keyboard + relative mouse + absolute mouse + consumer + MSD)',
+ otgProfileFullNoMsd: 'Full (keyboard + relative mouse + absolute mouse + consumer, no MSD)',
otgProfileLegacyKeyboard: 'Legacy: keyboard only',
otgProfileLegacyMouseRelative: 'Legacy: relative mouse only',
otgProfileCustom: 'Custom',
diff --git a/web/src/i18n/zh-CN.ts b/web/src/i18n/zh-CN.ts
index 85c67e9a..d5069fe2 100644
--- a/web/src/i18n/zh-CN.ts
+++ b/web/src/i18n/zh-CN.ts
@@ -584,7 +584,8 @@ export default {
otgHidProfile: 'OTG HID 组合',
otgHidProfileDesc: '选择对目标主机暴露的 HID 功能',
profile: '组合',
- otgProfileFull: '完整(键盘 + 相对鼠标 + 绝对鼠标 + 多媒体)',
+ otgProfileFull: '完整(键盘 + 相对鼠标 + 绝对鼠标 + 多媒体 + 虚拟媒体)',
+ otgProfileFullNoMsd: '完整(键盘 + 相对鼠标 + 绝对鼠标 + 多媒体,不含虚拟媒体)',
otgProfileLegacyKeyboard: '兼容:仅键盘',
otgProfileLegacyMouseRelative: '兼容:仅相对鼠标',
otgProfileCustom: '自定义',
@@ -596,7 +597,7 @@ export default {
otgFunctionMouseAbsoluteDesc: '绝对定位(类似触控)',
otgFunctionConsumer: '多媒体控制',
otgFunctionConsumerDesc: '音量/播放/暂停等按键',
- otgFunctionMsd: 'U盘(MSD)',
+ otgFunctionMsd: '虚拟媒体(MSD)',
otgFunctionMsdDesc: '向目标主机暴露 USB 存储',
otgProfileWarning: '修改 HID 功能将导致 USB 设备重新连接',
otgFunctionMinWarning: '请至少启用一个 HID 功能后再保存',
diff --git a/web/src/types/generated.ts b/web/src/types/generated.ts
index e057c738..1bb12b46 100644
--- a/web/src/types/generated.ts
+++ b/web/src/types/generated.ts
@@ -58,6 +58,8 @@ export interface OtgDescriptorConfig {
export enum OtgHidProfile {
/** Full HID device set (keyboard + relative mouse + absolute mouse + consumer control) */
Full = "full",
+ /** Full HID device set without MSD */
+ FullNoMsd = "full_no_msd",
/** Legacy profile: only keyboard */
LegacyKeyboard = "legacy_keyboard",
/** Legacy profile: only relative mouse */
diff --git a/web/src/views/SettingsView.vue b/web/src/views/SettingsView.vue
index a2aec5cf..8d87bfc0 100644
--- a/web/src/views/SettingsView.vue
+++ b/web/src/views/SettingsView.vue
@@ -548,6 +548,8 @@ async function saveConfig() {
if (config.value.hid_backend === 'otg') {
if (config.value.hid_otg_profile === 'full') {
desiredMsdEnabled = true
+ } else if (config.value.hid_otg_profile === 'full_no_msd') {
+ desiredMsdEnabled = false
} else if (
config.value.hid_otg_profile === 'legacy_keyboard'
|| config.value.hid_otg_profile === 'legacy_mouse_relative'
@@ -1477,6 +1479,7 @@ onMounted(async () => {