Skip to content

whitenul/OneDesk

Repository files navigation

OneDesk - 跨平台远程桌面控制系统

OneDesk Logo

基于 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 build

Rust 开发

cd src-tauri

# 检查编译
cargo check

# 运行测试
cargo test

# 构建发布版本
cargo build --release

添加新的 Tauri 命令

  1. src-tauri/src/ 下实现功能
  2. lib.rsinvoke_handler 中注册命令
  3. 在前端通过 @tauri-apps/api 调用

常见问题

Q: 无法捕获屏幕?

A: 检查系统权限设置:

  • Windows: 设置 > 隐私 > 屏幕录制
  • macOS: 系统偏好设置 > 安全性与隐私 > 屏幕录制

Q: 视频解码失败?

A: 检查浏览器支持:

  • Chrome 94+、Firefox 103+ 支持 WebCodecs
  • 确认显卡支持 AV1/H.264 硬件解码

Q: 连接延迟高?

A: 优化建议:

  • 使用局域网直连模式
  • 启用硬件加速编码
  • 降低视频分辨率或帧率
  • 检查网络稳定性

Q: 输入控制无响应?

A: 检查权限:

  • Windows: 可能需要管理员权限
  • macOS: 辅助功能权限

更新日志

v2.0.1 (当前版本)

  • ✨ 升级到 Tauri 2.0
  • 🚀 添加 AV1 硬件加速视频编码
  • 🔧 重构后端模块化架构
  • ⚡ 优化视频流水线性能
  • 📦 改进安装包打包流程

v1.x

  • 基础远程桌面功能
  • 局域网设备发现
  • 密码认证机制

贡献指南

欢迎参与项目贡献!

  1. Fork 本仓库
  2. 创建功能分支 (git checkout -b feature/amazing-feature)
  3. 提交更改 (git commit -m 'Add amazing feature')
  4. 推送分支 (git push origin feature/amazing-feature)
  5. 创建 Pull Request

代码规范

  • 前端:遵循 Vue 官方风格指南
  • 后端:遵循 Rust 标准命名约定
  • 提交信息:使用约定式提交格式

许可证

本项目采用 MIT 许可证开源。


致谢

感谢以下开源项目:

  • Tauri - 轻量级跨平台框架
  • Vue.js - 渐进式前端框架
  • Rust - 内存安全的系统语言
  • FFmpeg - 多媒体处理框架
  • WebCodecs API - 浏览器原生编解码

如果觉得项目有用,请给一个 ⭐ Star!

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors