基于 Tauri 2.0 + Vue 3 + Rust 的高性能远程桌面解决方案
| 功能 | 描述 |
|---|---|
| 🖥️ 双模式运行 | 控制端(远程查看)+ 被控端(本地共享) |
| 🔗 双重连接方式 | 局域网直连 + 中继服务器穿透 |
| 🎥 高性能视频 | AV1/H.264 硬件加速编码(NVENC/QSV/AMF) |
| 🖱️ 实时控制 | 低延迟鼠标键盘事件传输 |
| 📺 多显示器支持 | 自动检测并选择显示器 |
| 🔍 设备发现 | 局域网 UDP 广播自动发现 |
- 📊 性能监控 - 实时显示延迟、FPS、CPU/内存占用
- 🔄 自适应传输 - 根据网络状况动态调整质量
- 📝 连接历史 - 自动记录,支持快速重连
- 🔐 安全认证 - 基于密码的设备认证,bcrypt 加密存储
- 📋 剪贴板同步 - 跨设备文本/图片同步
- 📁 文件传输 - 拖拽上传/下载
| 依赖 | 版本要求 |
|---|---|
| 操作系统 | Windows 10/11, macOS, Linux |
| Node.js | ≥ 16.0 |
| Rust | ≥ 1.70.0 |
| WebView2 | 自动安装(Windows) |
# 克隆项目
git clone https://github.com/your-username/onedesk.git
cd onedesk
# 安装依赖
npm install
# 开发模式
npm run tauri:dev
# 构建生产版本
npm run tauri:build项目提供一键打包脚本,生成完整的 Windows 安装包:
# Windows 一键打包
tauri-bundle.bat
# 输出位置
# src-tauri/target/release/bundle/nsis/OneDesk_2.0.1_x64-setup.exe| 技术 | 版本 | 用途 |
|---|---|---|
| Vue | 3.5.x | 渐进式前端框架 |
| TypeScript | 5.x | 类型安全的 JavaScript |
| Pinia | 3.x | 状态管理 |
| Element Plus | 2.x | UI 组件库 |
| Vue Router | 4.x | 路由管理 |
| Tailwind CSS | 3.x | 原子化 CSS 框架 |
| Vite | 6.x | 构建工具 |
| WebCodecs | - | 浏览器原生视频解码 |
| 技术 | 版本 | 用途 |
|---|---|---|
| Rust | 1.70+ | 系统编程语言 |
| Tauri | 2.0 | 跨平台桌面框架 |
| Tokio | 1.x | 异步运行时 |
| tokio-tungstenite | 0.20 | WebSocket 通信 |
| ffmpeg-next | 8.0 | 视频编解码 |
| scrap | 0.5 | 屏幕捕获 |
| enigo | 0.2 | 输入模拟 |
| sqlx | 0.7 | 数据库异步查询 |
| SQLite | - | 嵌入式数据库 |
onedesk/
├── src/ # 前端源码
│ ├── components/ # Vue 组件
│ │ ├── ClipboardSyncPanel.vue
│ │ ├── ConnectionQuality.vue
│ │ ├── DeviceCard.vue
│ │ ├── FileTransferDialog.vue
│ │ ├── PerformanceOverlay.vue
│ │ ├── RemoteScreen.vue
│ │ └── ...
│ ├── composables/ # 组合式函数
│ │ ├── useConnectionManagement.ts
│ │ ├── useLocalPreview.ts
│ │ ├── useRemoteDesktop.ts
│ │ ├── useScreenSharing.ts
│ │ └── preview/ # 预览相关
│ ├── services/ # API 服务层
│ │ ├── api.ts
│ │ ├── websocket_status.ts
│ │ └── ...
│ ├── stores/ # Pinia 状态管理
│ │ ├── app.ts
│ │ ├── device.ts
│ │ └── ui.ts
│ ├── views/ # 页面视图
│ ├── types/ # TypeScript 类型定义
│ └── utils/ # 工具函数
│
├── src-tauri/ # Rust 后端
│ ├── src/
│ │ ├── app/ # 应用状态管理
│ │ ├── client/ # 客户端模块
│ │ ├── server/ # 服务端模块
│ │ ├── media/ # 媒体处理
│ │ │ ├── capture/ # 屏幕捕获
│ │ │ ├── ffmpeg_encoder.rs # 视频编码器
│ │ │ ├── video_capture_pipeline.rs
│ │ │ └── ...
│ │ ├── network/ # 网络通信
│ │ │ ├── websocket.rs
│ │ │ ├── websocket_server.rs
│ │ │ └── ...
│ │ ├── discovery/ # 设备发现
│ │ ├── events/ # 输入事件处理
│ │ ├── storage/ # 数据存储
│ │ ├── device/ # 设备管理
│ │ ├── clipboard/ # 剪贴板同步
│ │ ├── connection/ # 连接管理
│ │ ├── error.rs # 错误处理
│ │ ├── logger.rs # 日志系统
│ │ └── lib.rs # 库入口
│ ├── Cargo.toml # Rust 依赖配置
│ └── tauri.conf.json # Tauri 配置
│
├── public/ # 静态资源
├── data/ # 数据库文件
├── package.json
├── vite.config.ts
└── README.md
┌─────────────────────────────────────────────────────────────────┐
│ 前端 (Vue 3 + TypeScript) │
├─────────────────────────────────────────────────────────────────┤
│ UI 组件 │ 状态管理 (Pinia) │ Composables │ API 服务层 │
└───────────────────────────┬─────────────────────────────────────┘
│ IPC (Tauri Commands/Events)
┌───────────────────────────▼─────────────────────────────────────┐
│ 后端 (Rust + Tauri 2.0) │
├─────────────────────────────────────────────────────────────────┤
│ 屏幕捕获 │ 视频编码 │ 网络通信 │ 输入处理 │ 数据存储 │
│ (scrap) │ (ffmpeg) │ (ws/quic) │ (enigo) │ (SQLite) │
└───────────────────────────┬─────────────────────────────────────┘
│ 系统调用
┌───────────────────────────▼─────────────────────────────────────┐
│ 操作系统接口 (Windows/macOS/Linux) │
└─────────────────────────────────────────────────────────────────┘
被控端模式:
屏幕捕获 → 视频编码 → 网络发送 → 远程显示
↑ ↓
输入执行 ← 网络接收 ← 远程输入事件
控制端模式:
网络接收 → 视频解码 → 画面渲染
↓
输入捕获 → 网络发送 → 远程执行
| 指标 | 典型值 | 说明 |
|---|---|---|
| 端到端延迟 | 20-60ms | 局域网环境 |
| 视频帧率 | 30-60fps | 1080p 分辨率 |
| CPU 占用 | 10-20% | 编码状态 |
| 内存占用 | 60-100MB | 运行时 |
| 网络带宽 | 1-5Mbps | 视频传输 |
| 分辨率 | 帧率 | 软件编码 | 硬件编码 (NVENC/QSV) |
|---|---|---|---|
| 1080p | 30fps | 10-20fps | 30-60fps |
| 1080p | 60fps | 5-10fps | 30-60fps |
| 4K | 30fps | <5fps | 15-30fps |
# 安装依赖
npm install
# 启动开发服务器
npm run tauri:dev
# 检查代码
npm run lint
# 构建前端
npm run buildcd src-tauri
# 检查编译
cargo check
# 运行测试
cargo test
# 构建发布版本
cargo build --release- 在
src-tauri/src/下实现功能 - 在
lib.rs的invoke_handler中注册命令 - 在前端通过
@tauri-apps/api调用
A: 检查系统权限设置:
- Windows: 设置 > 隐私 > 屏幕录制
- macOS: 系统偏好设置 > 安全性与隐私 > 屏幕录制
A: 检查浏览器支持:
- Chrome 94+、Firefox 103+ 支持 WebCodecs
- 确认显卡支持 AV1/H.264 硬件解码
A: 优化建议:
- 使用局域网直连模式
- 启用硬件加速编码
- 降低视频分辨率或帧率
- 检查网络稳定性
A: 检查权限:
- Windows: 可能需要管理员权限
- macOS: 辅助功能权限
- ✨ 升级到 Tauri 2.0
- 🚀 添加 AV1 硬件加速视频编码
- 🔧 重构后端模块化架构
- ⚡ 优化视频流水线性能
- 📦 改进安装包打包流程
- 基础远程桌面功能
- 局域网设备发现
- 密码认证机制
欢迎参与项目贡献!
- Fork 本仓库
- 创建功能分支 (
git checkout -b feature/amazing-feature) - 提交更改 (
git commit -m 'Add amazing feature') - 推送分支 (
git push origin feature/amazing-feature) - 创建 Pull Request
- 前端:遵循 Vue 官方风格指南
- 后端:遵循 Rust 标准命名约定
- 提交信息:使用约定式提交格式
本项目采用 MIT 许可证开源。
感谢以下开源项目:
- Tauri - 轻量级跨平台框架
- Vue.js - 渐进式前端框架
- Rust - 内存安全的系统语言
- FFmpeg - 多媒体处理框架
- WebCodecs API - 浏览器原生编解码
如果觉得项目有用,请给一个 ⭐ Star!