智算多多
官方邮箱:service@zsdodo.com

公司地址:北京市丰台区南四环西路188号总部基地三区国联股份数字经济总部


传统的硬件KVM切换器通过物理开关实现多设备输入控制,存在成本高、布线复杂、延迟明显等局限性。Lan Mouse采用软件虚拟化方案,将输入设备抽象为网络服务,实现了真正的软件定义KVM。
Lan Mouse采用模块化设计,将系统划分为四个核心组件:输入捕获、事件处理、网络传输和输入模拟。这种分层架构确保了系统的可扩展性和跨平台兼容性。
1. // 系统核心组件架构示意
2. graph TD
3. A[输入捕获层] -->|原始输入事件| B[事件处理层]
4. B -->|标准化事件| C[网络传输层]
5. C -->|加密数据包| D[输入模拟层]
6. E[配置管理] --> A
7. E --> B
8. E --> C
9. E --> D
rust运行
输入捕获层负责从操作系统底层API获取原始输入事件,支持多种后端实现:
事件处理层将不同平台的输入事件转换为统一的事件格式,处理坐标映射、按键状态跟踪等逻辑。
网络传输层采用DTLS 1.3加密通信,确保数据传输的安全性,同时实现高效的事件序列化和反序列化。
输入模拟层在目标设备上重建输入事件,支持多种模拟后端,包括wlroots虚拟指针协议、X11 XTest扩展等。
Lan Mouse的事件处理采用异步非阻塞设计,确保低延迟和高吞吐量。每个输入事件经过以下处理流程:
1. // 事件处理状态机
2. enum EventState {
3. Idle,
4. Capturing(CaptureHandle),
5. Emulating(EmulationHandle),
6. Transitioning,
7. }
rust运行
状态管理机制:系统维护精确的设备状态跟踪,确保不会出现事件反馈循环。每个连接设备处于"发送"或"接收"状态之一,当设备A控制设备B时,设备B自动进入只接收状态,防止事件回传。
坐标映射算法:Lan Mouse实现了智能的坐标转换系统,处理不同分辨率设备间的光标映射。算法采用贝塞尔曲线插值,确保光标移动轨迹平滑自然。
1. // 坐标映射核心逻辑
2. fn map_coordinates(
3. source_resolution: (u32, u32),
4. target_resolution: (u32, u32),
5. position: (f64, f64),
6. ) -> (f64, f64) {
7. let (sx, sy) = source_resolution;
8. let (tx, ty) = target_resolution;
9. let (x, y) = position;
11. // 归一化处理
12. let normalized_x = x / sx as f64;
13. let normalized_y = y / sy as f64;
15. // 目标坐标计算
16. let target_x = normalized_x * tx as f64;
17. let target_y = normalized_y * ty as f64;
19. (target_x, target_y)
20. }
rust运行
Lan Mouse采用UDP作为传输层协议,结合DTLS加密,在保证实时性的同时确保安全性。通信协议包含以下关键特性:
发现协议:使用UDP广播实现设备自动发现,默认每5秒发送一次设备信息包,包含设备名称、IP地址、端口和证书指纹。
连接建立流程:
数据包格式:事件数据采用紧凑的二进制格式序列化,包含时间戳、事件类型、坐标信息等字段,最小化网络开销。
Lan Mouse采用端到端加密方案,确保输入事件传输的安全性:
证书管理:每个设备生成唯一的RSA-2048证书,证书指纹作为设备身份标识。首次连接时需要人工确认证书指纹,防止中间人攻击。
1. // 证书指纹生成算法
2. pub fn generate_fingerprint(cert: &[u8]) -> String {
3. let mut hash = Sha256::new();
4. hash.update(cert);
5. let bytes = hash
6. .finalize()
7. .iter()
8. .map(|x| format!("{x:02x}"))
9. .collect::<Vec<_>>();
10. bytes.join(":").to_lowercase()
11. }
rust运行
密钥交换:使用ECDHE密钥交换算法,确保前向安全性。每次会话建立时生成新的会话密钥。
数据加密:采用AES-256-GCM算法加密事件数据,同时提供数据完整性和机密性保护。
Lan Mouse通过抽象层屏蔽平台差异,为不同操作系统提供统一的接口:
1. // 输入捕获后端接口
2. trait InputCapture {
3. fn start(&self) -> Result<CaptureHandle, CaptureError>;
4. fn stop(&self) -> Result<(), CaptureError>;
5. fn events(&self) -> Receiver<CaptureEvent>;
6. }
8. // 输入模拟后端接口
9. trait InputEmulation {
10. fn emulate_mouse_move(&self, x: f64, y: f64) -> Result<(), EmulationError>;
11. fn emulate_key_press(&self, keycode: u32) -> Result<(), EmulationError>;
12. fn emulate_key_release(&self, keycode: u32) -> Result<(), EmulationError>;
13. }
rust运行
Linux Wayland支持:
Windows支持:
macOS支持:
X11支持:
事件批处理:将多个输入事件合并为单个网络包发送,减少网络开销和系统调用次数。
自适应压缩:根据网络状况动态调整压缩级别(0-9级),在延迟和带宽间取得平衡。
预测性光标移动:使用卡尔曼滤波器预测光标轨迹,提前发送移动事件,减少感知延迟。
内存池技术:预分配事件缓冲区,避免频繁的内存分配和释放操作。
连接池管理:复用DTLS连接,减少握手开销,支持快速设备切换。
事件优先级队列:为不同类型的输入事件分配不同优先级,确保关键事件(如点击)优先处理。
Lan Mouse使用TOML格式配置文件,支持丰富的自定义选项:
# 高级配置示例
port = 5800 # 自定义端口
broadcast_interval = 3000 # 广播间隔(毫秒)
compression_level = 3 # 压缩级别(0-9)
[network]
bind_address = "0.0.0.0" # 绑定所有网络接口
multicast_group = "239.255.255.250" # 组播地址
mtu = 1500 # 最大传输单元
[[clients]]
name = "workstation"
position = "right"
static_ips = ["192.168.1.100", "10.0.1.100"]
auth_required = true
priority = 10 # 连接优先级
[[clients]]
name = "laptop"
position = "left"
allow_wake_on_lan = true
auto_reconnect = true
reconnect_timeout = 5000 # 重连超时(毫秒)
toml
Lan Mouse支持自定义热键绑定,用于快速切换设备或执行特定操作:
# 热键配置示例
release_bind = ["KeyA", "KeyS", "KeyD", "KeyF"] # 释放绑定组合键
[[hotkeys]]
keys = ["Control", "Alt", "ArrowRight"]
action = "switch_to_next" # 切换到下一个设备
[[hotkeys]]
keys = ["Control", "Alt", "ArrowLeft"]
action = "switch_to_previous" # 切换到上一个设备
[[hotkeys]]
keys = ["Control", "Alt", "L"]
action = "lock_all" # 锁定所有设备
toml
连接失败排查:
nc -u <目标IP> <端口>验证延迟优化策略:
键盘映射问题:
Lan Mouse提供内置的性能监控功能,可通过命令行工具查看:
1. # 查看连接状态
2. lan-mouse cli status
4. # 监控网络性能
5. lan-mouse cli monitor --interval=1000
7. # 诊断连接问题
8. lan-mouse cli diagnose --client=workstation
bash
监控指标包括:
systemd服务配置:Lan Mouse提供完整的systemd服务文件,支持开机自启和用户级服务管理。
# systemd服务配置示例
[Unit]
Description=Lan Mouse Daemon
After=graphical-session.target
[Service]
Type=simple
ExecStart=/usr/bin/lan-mouse daemon
Restart=on-failure
Environment=DISPLAY=:0
[Install]
WantedBy=default.target
ini
桌面环境集成:
Lan Mouse提供丰富的API接口,支持第三方集成和自定义开发:
REST API:通过HTTP接口提供设备管理、状态查询功能。
DBus接口:支持通过DBus与其他应用程序交互。
插件系统:支持自定义输入处理插件和网络传输插件。
网络隔离:在敏感环境中,建议将Lan Mouse部署在独立的VLAN中,限制网络访问范围。
证书管理:定期轮换设备证书,建议每90天更新一次。
访问控制:结合系统防火墙,限制允许连接的IP地址范围。
审计日志:启用详细日志记录,监控异常连接尝试。
# 安全强化配置
[security]
require_authentication = true
certificate_lifetime = 90 # 证书有效期(天)
max_connection_attempts = 5 # 最大连接尝试次数
connection_timeout = 30000 # 连接超时(毫秒)
[network]
allowed_networks = ["192.168.1.0/24", "10.0.0.0/8"]
block_unknown_devices = true
enable_intrusion_detection = true
toml
协议优化:计划支持QUIC协议,进一步降低延迟,提升连接稳定性。
AI增强:集成机器学习算法,智能预测用户操作模式,优化设备切换策略。
云同步:支持配置和证书的云端同步,简化多设备管理。
移动端支持:扩展对Android和iOS设备的完整支持,包括触摸手势识别。
插件市场:建立第三方插件生态系统,支持自定义输入处理、可视化界面等扩展。
性能基准测试:建立标准化的性能测试套件,持续优化系统性能。
文档完善:提供更详细的技术文档和API参考,降低开发门槛。
Lan Mouse通过创新的软件架构设计,实现了高性能、高安全性的跨设备输入共享解决方案。其核心技术优势包括:

Lan Mouse深色主题界面展示设备连接管理与安全认证机制

Lan Mouse浅色主题界面提供清晰的连接状态和设备位置配置
通过深入理解Lan Mouse的技术实现原理,开发者可以更好地利用其功能,进行定制化开发和性能调优。对于企业用户,Lan Mouse提供了安全可靠的多设备管理方案;对于个人用户,它极大地提升了多设备工作流的效率。
随着技术的不断发展,Lan Mouse将继续演进,为用户提供更智能、更高效的跨设备输入体验,成为开源软件KVM解决方案的标杆项目。
