fix:改进atx usb 继电器适配;修复 webrtc 无法建立连接问题;网页样式优化

This commit is contained in:
mofeng-git
2026-05-05 00:52:16 +08:00
parent 6723f432a3
commit c27d3a6703
27 changed files with 1388 additions and 709 deletions

View File

@@ -314,6 +314,10 @@ export default {
title: 'Video device offline',
detail: 'Capture card is not responding, attempting to re-detect…',
},
audioDeviceLost: {
title: 'Audio device offline',
detail: 'Reconnecting the audio capture device…',
},
deviceBusy: {
title: 'Video channel busy',
detail: 'Applying a new configuration or another component is using the device, please wait…',
@@ -335,6 +339,8 @@ export default {
device_lost: 'Video node disappeared, waiting for the driver to recover',
config_changing: 'Applying new configuration',
mode_switching: 'Switching video mode',
audio_device_lost: 'Audio capture is unavailable; recovery in progress',
audio_reconnecting: 'Retrying audio device connection',
uvc_usb_error:
'Try another USB port or cable, avoid hubs, or reconnect the device. You can also reset the device from Settings → Environment → USB Devices.',
uvc_capture_stall: '',
@@ -352,6 +358,10 @@ export default {
webrtcPhaseSetRemote: 'Applying remote description...',
webrtcPhaseApplyIce: 'Applying ICE candidates...',
webrtcPhaseNegotiating: 'Negotiating secure connection...',
mjpegPhaseWebsocket: 'Connecting control channel...',
mjpegPhaseStream: 'Requesting video stream...',
mjpegPhaseFirstFrame: 'Waiting for first frame...',
stepProgress: 'Step {current}/{total}',
pointerLocked: 'Pointer Locked',
pointerLockedDesc: 'Press Escape to release the pointer',
pointerLockFailed: 'Failed to lock pointer',
@@ -476,10 +486,11 @@ export default {
},
settings: {
title: 'Settings',
sidebarSubtitle: 'Manage device, network and extensions',
basic: 'Basic',
general: 'General',
appearance: 'Appearance',
account: 'User',
account: 'Account',
access: 'Access',
video: 'Video',
encoder: 'Encoder',
@@ -496,6 +507,19 @@ export default {
configured: 'Configured',
security: 'Security',
about: 'About',
appearanceSubtitle: 'Customize interface appearance and language',
accountSubtitle: 'Manage credentials and session policy',
networkSubtitle: 'Configure web server ports, listen addresses and SSL certificate',
videoSubtitle: 'Configure capture device, video encoder and WebRTC ICE servers',
hidSubtitle: 'Configure keyboard and mouse backend with USB gadget descriptors',
msdSubtitle: 'Manage Mass Storage Device image directory',
atxSubtitle: 'Configure remote power control hardware and Wake-on-LAN',
environmentSubtitle: 'System runtime environment and USB device maintenance',
aboutSubtitle: 'Online upgrade, version info and hardware overview',
extTtydSubtitle: 'Open a host Shell terminal in the browser',
extRustdeskSubtitle: 'Remote graphical access via RustDesk',
extRtspSubtitle: 'Provide an RTSP video stream for external clients',
extRemoteAccessSubtitle: 'Remote access through NAT-traversal services',
aboutDesc: 'Open and Lightweight IP-KVM Solution',
deviceInfo: 'Device Info',
deviceInfoDesc: 'Host system information',
@@ -512,8 +536,8 @@ export default {
changePassword: 'Change Password',
currentPassword: 'Current Password',
newPassword: 'New Password',
usernameDesc: 'Change your login username',
passwordDesc: 'Change your login password',
usernameDesc: 'Change the console login username',
passwordDesc: 'Change the console login password',
version: 'Version',
buildInfo: 'Build Info',
detectDevices: 'Detect Devices',
@@ -542,20 +566,25 @@ export default {
addBindAddress: 'Add address',
bindAddressListEmpty: 'Add at least one IP address.',
httpsEnabled: 'Enable HTTPS',
httpsEnabledDesc: 'Enable HTTPS encrypted connection (a self-signed certificate is generated if none is specified)',
httpsEnabledDesc: 'Serve over an encrypted connection. A self-signed certificate is generated automatically if none is provided.',
portConfig: 'Port & Protocol',
portConfigDesc: 'The service runs on a single port at a time, determined by the HTTPS toggle',
portConfigDesc: 'The service listens on a single port at a time, determined by the HTTPS toggle',
httpPortReserved: 'HTTP port (reserved)',
httpsPortReserved: 'HTTPS port (reserved)',
portActive: 'Active',
portReserved: 'Reserved',
portReservedHint: 'The reserved port is applied only after switching protocol; you can preconfigure it now.',
previewUrl: 'Access URL preview',
copyUrl: 'Copy access URL',
openInBrowser: 'Open in browser',
listenAddress: 'Listen Address',
listenAddressDesc: 'Configure which network interfaces the web server listens on',
listenAddressDesc: 'Choose which network interfaces the web server binds to',
bindModeAllDesc: '0.0.0.0 — Listen on all network interfaces',
bindModeLocalDesc: '127.0.0.1 — Allow local access only',
bindModeCustomDesc: 'Specify a list of IP addresses',
effectiveAddresses: 'Listen address preview',
bindModeLocalDesc: '127.0.0.1 — Loopback only (local access)',
bindModeCustomDesc: 'Bind to a specific list of IP addresses',
effectiveAddresses: 'Effective listen addresses',
sslCertificate: 'SSL Certificate',
sslCertificateDesc: 'Upload a custom PEM certificate to replace the self-signed one, restart required',
sslCertificateDesc: 'Upload a custom PEM certificate to replace the self-signed one. A service restart is required to apply.',
sslCertCustom: 'Custom Certificate',
sslCertSelfSigned: 'Self-Signed',
sslCertActive: 'Custom certificate is active',
@@ -568,6 +597,8 @@ export default {
sslCertSaved: 'Certificate saved, restart to apply',
sslCertCleared: 'Reverted to self-signed certificate, restart to apply',
restartRequired: 'Restart Required',
restartRequiredHint: 'The service will restart automatically to apply the new configuration.',
unsavedChangesHint: 'Click Save to apply changes',
restartMessage: 'Web server configuration saved. A restart is required for changes to take effect.',
restarting: 'Restarting...',
autoRestarting: 'Restarting automatically',
@@ -600,10 +631,10 @@ export default {
updateMsgInstalling: 'Replacing binary',
updateMsgRestarting: 'Restarting service',
auth: 'Access',
authSettings: 'Access Settings',
authSettingsDesc: 'Single-user access and session behavior',
allowMultipleSessions: 'Allow multiple web sessions',
allowMultipleSessionsDesc: 'When disabled, a new login will kick the previous session.',
authSettings: 'Session Policy',
authSettingsDesc: 'Configure single-user login and concurrent session behavior',
allowMultipleSessions: 'Allow concurrent web sessions',
allowMultipleSessionsDesc: 'When disabled, a new login automatically signs out the previous session',
userManagement: 'User Management',
userManagementDesc: 'Manage user accounts and permissions',
addUser: 'Add User',
@@ -665,10 +696,10 @@ export default {
atxWolInterface: 'Network Interface',
atxWolInterfacePlaceholder: 'e.g. eth0, enp0s3',
atxWolInterfaceHint: 'Specify network interface for WOL packets, leave empty for default routing',
themeDesc: 'Choose your preferred color scheme',
languageDesc: 'Select your preferred language',
videoSettings: 'Video Settings',
videoSettingsDesc: 'Configure video capture device',
themeDesc: 'Choose the interface color scheme',
languageDesc: 'Choose the interface display language',
videoSettings: 'Video Capture',
videoSettingsDesc: 'Configure capture device format, resolution and frame rate',
videoDevice: 'Video Device',
selectDevice: 'Select device...',
videoFormat: 'Video Format',
@@ -676,13 +707,13 @@ export default {
driver: 'Driver',
resolution: 'Resolution',
frameRate: 'Frame Rate',
encoderBackend: 'Encoder Backend',
encoderBackendDesc: 'Select encoder backend for WebRTC streaming',
encoderBackend: 'Video Encoder',
encoderBackendDesc: 'Select the encoder backend used for WebRTC streaming',
backend: 'Backend',
autoRecommended: 'Auto (Recommended)',
software: 'Software',
supportedFormats: 'Supported Formats',
encoderHint: 'Hardware encoders provide better performance with lower CPU usage. Software encoders are more compatible but require more CPU resources.',
supportedFormats: 'Supported Codecs',
encoderHint: 'Hardware encoders deliver lower latency and CPU usage; software encoders offer broader compatibility at a higher resource cost.',
hidSettings: 'HID Settings',
hidSettingsDesc: 'Configure keyboard and mouse control',
hidBackend: 'HID Backend',
@@ -824,20 +855,20 @@ export default {
resetConfirmDesc: 'This will reset USB device "{device}" by cycling its authorized attribute. All connections to this device will be temporarily interrupted. Continue?',
resetAction: 'Reset Device',
},
webrtcSettings: 'WebRTC Settings',
webrtcSettingsDesc: 'Configure STUN/TURN servers for NAT traversal',
publicIceServersHint: 'Empty uses Google public STUN, configure your own TURN for production',
webrtcSettings: 'WebRTC Signaling',
webrtcSettingsDesc: 'Configure STUN/TURN servers to assist NAT traversal',
publicIceServersHint: 'Leave empty to use Google\u2019s public STUN servers; TURN must be self-hosted',
stunServer: 'STUN Server',
stunServerPlaceholder: 'stun:stun.l.google.com:19302',
stunServerHint: 'Custom STUN server (leave empty to use Google public server)',
stunServerHint: 'Leave empty to use Google\u2019s public STUN servers',
turnServer: 'TURN Server',
turnServerPlaceholder: 'turn:turn.example.com:3478',
turnServerHint: 'Custom TURN relay server (required for production)',
turnServerHint: 'TURN relay server. Strongly recommended for public deployments or strict NAT environments.',
turnUsername: 'TURN Username',
turnPassword: 'TURN Password',
turnPasswordConfigured: 'Password already configured. Leave empty to keep current password.',
turnCredentialsHint: 'Credentials for TURN server authentication',
iceConfigNote: 'Note: Changes require reconnecting the WebRTC session to take effect.',
turnPasswordConfigured: 'A password is already saved. Leave empty to keep the current password.',
turnCredentialsHint: 'Credentials used for TURN server authentication',
iceConfigNote: 'Changes apply to the next WebRTC session',
},
virtualKeyboard: {
title: 'Virtual Keyboard',
@@ -872,6 +903,10 @@ export default {
format: 'Format',
resolution: 'Resolution',
fps: 'FPS',
fpsTarget: 'Target FPS',
fpsActual: 'Actual FPS',
fpsStaticHint: 'Frame rate drops automatically while the image is static',
paused: 'Paused',
clients: 'Clients',
backend: 'Backend',
mouse: 'Mouse',

View File

@@ -313,6 +313,10 @@ export default {
title: '视频设备已断开',
detail: '采集卡离线,正在尝试重新识别…',
},
audioDeviceLost: {
title: '音频设备已断开',
detail: '正在尝试重新连接音频采集设备…',
},
deviceBusy: {
title: '视频通道忙',
detail: '正在切换配置或被其他组件占用,请稍候…',
@@ -334,6 +338,8 @@ export default {
device_lost: '视频节点丢失,等待驱动恢复',
config_changing: '正在应用新配置',
mode_switching: '正在切换视频模式',
audio_device_lost: '音频采集不可用,正在自动恢复',
audio_reconnecting: '正在重试连接音频设备',
uvc_usb_error:
'可尝试更换 USB 口或线、避免 HUB、或重新插拔设备也可在 设置 → 环境 → USB 设备 中复位。',
uvc_capture_stall: '',
@@ -351,6 +357,10 @@ export default {
webrtcPhaseSetRemote: '正在应用远端会话描述...',
webrtcPhaseApplyIce: '正在应用 ICE 候选...',
webrtcPhaseNegotiating: '正在协商安全连接...',
mjpegPhaseWebsocket: '正在连接控制通道...',
mjpegPhaseStream: '正在请求视频流...',
mjpegPhaseFirstFrame: '正在等待首帧...',
stepProgress: '第 {current}/{total} 步',
pointerLocked: '鼠标已锁定',
pointerLockedDesc: '按 Escape 键释放鼠标',
pointerLockFailed: '鼠标锁定失败',
@@ -475,10 +485,11 @@ export default {
},
settings: {
title: '系统设置',
sidebarSubtitle: '管理设备、网络与扩展',
basic: '基础',
general: '通用',
appearance: '外观',
account: '户',
account: '户',
access: '访问',
video: '视频',
encoder: '编码器',
@@ -495,6 +506,19 @@ export default {
configured: '已配置',
security: '安全',
about: '关于',
appearanceSubtitle: '自定义界面外观与显示语言',
accountSubtitle: '管理登录凭据与会话策略',
networkSubtitle: '配置 Web 服务端口、监听地址与 SSL 证书',
videoSubtitle: '配置采集设备、视频编码器与 WebRTC 信令服务器',
hidSubtitle: '配置键盘鼠标后端与 USB Gadget 描述符',
msdSubtitle: '管理虚拟存储设备 (MSD) 镜像目录',
atxSubtitle: '配置远程电源控制硬件与网络唤醒',
environmentSubtitle: '系统级运行环境与 USB 设备维护',
aboutSubtitle: '在线升级、版本信息与设备硬件概览',
extTtydSubtitle: '在浏览器中打开本机 Shell 终端',
extRustdeskSubtitle: '通过 RustDesk 实现远程图形访问',
extRtspSubtitle: '提供 RTSP 视频流以供其他客户端拉流',
extRemoteAccessSubtitle: '通过内网穿透服务实现远程访问',
aboutDesc: '开放轻量的 IP-KVM 解决方案',
deviceInfo: '设备信息',
deviceInfoDesc: '主机系统信息',
@@ -511,8 +535,8 @@ export default {
changePassword: '修改密码',
currentPassword: '当前密码',
newPassword: '新密码',
usernameDesc: '修改登录用户名',
passwordDesc: '修改登录密码',
usernameDesc: '修改控制台登录用户名',
passwordDesc: '修改控制台登录密码',
version: '版本',
buildInfo: '构建信息',
detectDevices: '探测设备',
@@ -541,20 +565,25 @@ export default {
addBindAddress: '添加地址',
bindAddressListEmpty: '请至少填写一个 IP 地址。',
httpsEnabled: '启用 HTTPS',
httpsEnabledDesc: '启用 HTTPS 加密连接(未指定证书将生成自签证书',
httpsEnabledDesc: '使用加密连接对外提供服务,未配置证书时自动生成自签证书',
portConfig: '端口与协议',
portConfigDesc: '服务一次只运行在一个端口,由 HTTPS 开关决定使用哪个端口',
portConfigDesc: '服务一次仅监听一个端口,由 HTTPS 开关决定生效端口',
httpPortReserved: 'HTTP 端口(备用)',
httpsPortReserved: 'HTTPS 端口(备用)',
portActive: '当前生效',
portReserved: '备用',
portReservedHint: '备用端口仅在切换协议后生效,可提前配置',
previewUrl: '访问地址预览',
copyUrl: '复制访问地址',
openInBrowser: '在浏览器中打开',
listenAddress: '监听地址',
listenAddressDesc: '配置 Web 服务监听哪些网络接口',
bindModeAllDesc: '0.0.0.0 — 监听所有网络接口',
bindModeLocalDesc: '127.0.0.1 — 仅允许本机访问',
bindModeCustomDesc: '指定一组 IP 地址',
effectiveAddresses: '监听地址预览',
effectiveAddresses: '生效监听地址',
sslCertificate: 'SSL 证书',
sslCertificateDesc: '上传自定义 PEM 证书替换自签名证书,修改后需重启生效',
sslCertificateDesc: '上传自定义 PEM 证书替换自签名证书,保存后需重启服务生效',
sslCertCustom: '自定义证书',
sslCertSelfSigned: '自签名证书',
sslCertActive: '自定义证书已启用',
@@ -567,6 +596,8 @@ export default {
sslCertSaved: '证书已保存,重启后生效',
sslCertCleared: '已恢复自签名证书,重启后生效',
restartRequired: '需要重启',
restartRequiredHint: '保存后将自动重启服务以应用新配置',
unsavedChangesHint: '点击右侧按钮保存当前配置',
restartMessage: 'Web 服务器配置已保存,需要重启程序才能生效。',
restarting: '正在重启...',
autoRestarting: '正在自动重启',
@@ -599,10 +630,10 @@ export default {
updateMsgInstalling: '替换程序中',
updateMsgRestarting: '服务重启中',
auth: '访问控制',
authSettings: '访问设置',
authSettingsDesc: '单用户访问与会话策略',
allowMultipleSessions: '允许多个 Web 会话',
allowMultipleSessionsDesc: '关闭后,新登录会踢掉旧会话',
authSettings: '会话策略',
authSettingsDesc: '配置单用户登录与并发会话规则',
allowMultipleSessions: '允许多个 Web 会话并存',
allowMultipleSessionsDesc: '关闭后,新登录将自动踢出旧会话',
userManagement: '用户管理',
userManagementDesc: '管理用户账号和权限',
addUser: '添加用户',
@@ -664,10 +695,10 @@ export default {
atxWolInterface: '网络接口',
atxWolInterfacePlaceholder: '例如: eth0, enp0s3',
atxWolInterfaceHint: '指定发送 WOL 包的网络接口,留空则使用系统默认路由',
themeDesc: '选择您喜欢的颜色方案',
languageDesc: '选择您的首选语言',
videoSettings: '视频设置',
videoSettingsDesc: '配置视频采集设备',
themeDesc: '选择界面颜色方案',
languageDesc: '选择界面显示语言',
videoSettings: '视频采集',
videoSettingsDesc: '配置视频采集设备的格式、分辨率与帧率',
videoDevice: '视频设备',
selectDevice: '选择设备...',
videoFormat: '视频格式',
@@ -675,13 +706,13 @@ export default {
driver: '驱动',
resolution: '分辨率',
frameRate: '帧率',
encoderBackend: '编码器后端',
encoderBackendDesc: '选择 WebRTC 流的编码器后端',
encoderBackend: '视频编码器',
encoderBackendDesc: '选择 WebRTC 输出使用的视频编码器后端',
backend: '后端',
autoRecommended: '自动(推荐)',
software: '软件',
supportedFormats: '支持的格式',
encoderHint: '硬件编码器性能更好,CPU 占用更低。软件编码器兼容性更好,但需要更多 CPU 资源。',
supportedFormats: '支持的编码格式',
encoderHint: '硬件编码器延迟低、CPU 占用小;软件编码器兼容性更广但占用资源更多。',
hidSettings: 'HID 设置',
hidSettingsDesc: '配置键盘和鼠标控制',
hidBackend: 'HID 后端',
@@ -823,20 +854,20 @@ export default {
resetConfirmDesc: '将通过 authorized 属性复位 USB 设备「{device}」,该设备上的所有连接将短暂中断。确定继续?',
resetAction: '确认复位',
},
webrtcSettings: 'WebRTC 设置',
webrtcSettingsDesc: '配置 STUN/TURN 服务器以实现 NAT 穿透',
publicIceServersHint: '留空将使用 Google 公共 STUN 服务器TURN 服务器需自行配置',
webrtcSettings: 'WebRTC 信令',
webrtcSettingsDesc: '配置 STUN/TURN 服务器以辅助 NAT 穿透',
publicIceServersHint: '留空将使用 Google 公共 STUN 服务器TURN 服务器需自行部署',
stunServer: 'STUN 服务器',
stunServerPlaceholder: 'stun:stun.l.google.com:19302',
stunServerHint: '自定义 STUN 服务器(留空使用 Google 公共服务器',
stunServerHint: '留空使用 Google 公共 STUN 服务器',
turnServer: 'TURN 服务器',
turnServerPlaceholder: 'turn:turn.example.com:3478',
turnServerHint: '自定义 TURN 中继服务器(生产环境必须配置',
turnServerHint: 'TURN 中继服务器;公网部署或严格 NAT 环境强烈建议配置',
turnUsername: 'TURN 用户名',
turnPassword: 'TURN 密码',
turnPasswordConfigured: '密码已配置。留空则保持当前密码。',
turnCredentialsHint: '用于 TURN 服务器证的凭据',
iceConfigNote: '注意:更改后需要重新连接 WebRTC 会话才能生效',
turnPasswordConfigured: '密码已保存。留空则保持当前密码不变。',
turnCredentialsHint: '用于 TURN 服务器身份验证的凭据',
iceConfigNote: '更改后将在下一次 WebRTC 会话建立时生效',
},
virtualKeyboard: {
title: '虚拟键盘',
@@ -871,6 +902,10 @@ export default {
format: '格式',
resolution: '分辨率',
fps: '帧率',
fpsTarget: '目标帧率',
fpsActual: '实际帧率',
fpsStaticHint: '画面静止时会自动降帧',
paused: '已暂停',
clients: '客户端',
backend: '后端',
mouse: '鼠标',