[开源]SafeRemote 小助手:一个基于 Java 的轻量级远程控制系统
SafeRemote 小助手:一个基于 Java 的轻量级远程控制系统
前言
在日常开发、远程协助、服务器维护或者家用电脑管理中,我们经常会遇到一种场景:
人在外面,但是需要临时操作另一台 Windows 电脑。
常见的远程控制软件虽然功能完整,但有时候也会遇到一些问题,比如:
- 软件体积较大;
- 需要登录第三方账号;
- 端口和网络限制比较多;
- 部署方式不够灵活;
- 想自己掌握服务端和数据转发逻辑。
基于这些需求,我尝试开发了一个轻量级远程控制系统,取名为 SafeRemote 小助手。
这个系统主要使用 Java + Web + 中转服务器 实现,可以通过浏览器远程查看和控制被控端电脑。
本项目仅用于个人学习、远程协助和授权设备管理,禁止用于任何未授权控制、入侵或恶意用途。

一、系统整体介绍
SafeRemote 小助手主要由三个部分组成:
- 被控端 Agent
- 中转服务器 Relay Server
- 网页控制端 Web Client
整体流程如下:
控制端浏览器 <——> 中转服务器 <——> 被控端 Agent
被控端运行后,会主动连接中转服务器并上传屏幕画面。
控制端通过浏览器访问中转服务器页面,输入对应令牌和访问密码后,就可以查看远程画面,并发送鼠标、键盘、终端命令等控制指令。
这种设计的好处是:
被控端不需要暴露在公网,只要它能访问中转服务器,就可以被授权控制端连接。
二、主要功能
目前系统已经实现了以下功能。
1. 屏幕共享
被控端可以实时采集 Windows 桌面画面,并通过中转服务器传输到网页控制端。
支持配置:
- 帧率 FPS;
- JPEG 图像质量;
- 默认传输宽度;
- 默认传输高度;
- 缩放模式;
- 暂停屏幕共享。
在控制端页面中,可以实时看到远程电脑的屏幕画面。
2. 鼠标控制
控制端可以通过浏览器直接操作被控端鼠标,包括:
- 鼠标移动;
- 左键点击;
- 右键点击;
- 双击;
- 拖拽;
- 滚轮滚动。
为了适配不同显示器比例,比如普通 16:9 屏幕、带鱼屏、多屏幕环境,系统对鼠标坐标映射进行了处理。
控制端看到的是缩放后的画面,但最终发送给被控端的是根据真实桌面分辨率换算后的坐标,从而保证点击位置更加准确。
3. 键盘输入
控制端支持向被控端发送键盘输入。
例如:
- 在远程电脑的输入框中输入文字;
- 操作网页搜索框;
- 执行快捷键;
- 粘贴剪贴板内容。
这部分的目标是尽量接近 Windows 自带远程桌面或者常见远控软件的输入体验。
4. 网页终端
系统内置了一个网页终端功能,可以在浏览器中执行被控端命令。
最开始的实现方式比较简单:
每输入一条命令,就单独启动一次进程执行。
这种方式的问题是:
cd Desktop
dir
第一条命令执行完后,第二条命令不会保留上一条的目录状态。
也就是说,它不是一个真正的交互式终端。
后来对这部分进行了改造,改成了持久化 Shell 会话。
现在终端更接近 Xshell 的体验:
- 当前目录可以保留;
- 环境变量状态可以保留;
- 可以连续输入命令;
- 输出内容实时追加到网页终端窗口;
- 不再是“一条命令一个进程”的伪终端。
5. P2P / 局域网直连
系统预留了 P2P 与局域网直连相关配置。
当控制端和被控端处于同一局域网时,可以优先尝试直连。
如果不满足直连条件,则通过中转服务器进行转发。
被控端界面中可以配置:
- 是否启用 P2P / 局域网直连;
- P2P 直连端口;
- P2P 公网地址。
这种设计可以提高局域网场景下的传输效率,减少服务器中转压力。
6. 分辨率与缩放控制
远程控制中,一个比较常见的问题就是分辨率不匹配。
例如:
- 被控端是带鱼屏;
- 控制端是普通笔记本屏幕;
- 浏览器缩放比例不是 100%;
- 远程画面被压缩后鼠标坐标不准确。
为了解决这个问题,系统加入了分辨率配置功能。
控制端可以设置:
- 传输宽度;
- 传输高度;
- 缩放模式;
- 是否保持比例;
- 是否适合窗口显示。
并且分辨率修改不是立即生效,而是通过 “应用分辨率”按钮 手动确认后才会应用,避免误操作导致画面突然变化。
7. 全屏观看
为了提高远程操作体验,控制端网页增加了 全屏观看 按钮。
点击后,远程画面可以进入浏览器全屏模式,更适合长时间操作被控端电脑。
这个功能在以下场景比较有用:
- 远程写代码;
- 远程配置软件;
- 远程操作后台系统;
- 远程协助他人处理电脑问题。
8. 托盘运行
被控端程序现在支持托盘运行。
也就是说,点击窗口右上角关闭按钮时,程序不会直接退出,而是最小化到 Windows 右下角托盘。
托盘右键菜单支持:
- 显示窗口;
- 退出程序。
这样可以避免用户误关程序导致远程连接中断。
9. 无黑色控制台窗口
Windows 被控端打包后,已经改成 GUI 程序运行方式。
也就是说,双击 RemoteAgentSafe.exe 后,不会再弹出黑色命令行窗口,只显示图形界面。
这对于普通用户来说体验更好,也更接近正式桌面软件。
三、技术架构
1. 被控端 Agent
被控端主要负责:
- 采集屏幕;
- 压缩画面;
- 上传画面帧;
- 接收控制指令;
- 执行鼠标和键盘操作;
- 执行终端命令;
- 管理窗口和托盘。
核心技术点包括:
- Java Swing 图形界面;
- Java Robot 屏幕采集与输入模拟;
- HTTP/WebSocket 通信;
- JPEG 图像压缩;
- Windows 托盘 TrayIcon;
- 持久化 Shell 进程。
2. 中转服务器
中转服务器主要负责连接控制端和被控端。
它的作用类似一个消息中转站:
被控端上传画面帧
控制端请求最新画面
控制端发送鼠标键盘指令
被控端拉取并执行控制指令
中转服务器的优势是部署灵活,可以放在 Linux 云服务器上运行。
只要被控端和控制端都能访问这台服务器,就可以建立远程控制链路。
3. 网页控制端
网页控制端运行在浏览器中,不需要安装额外软件。
主要功能包括:
- 显示远程屏幕;
- 发送鼠标事件;
- 发送键盘事件;
- 调整分辨率;
- 全屏观看;
- 打开网页终端;
- 查看连接状态。
这种方式的好处是跨平台,只要有浏览器就能访问控制端页面。
四、系统界面
被控端界面主要分为几个区域:
- 连接与授权;
- 画面质量设置;
- P2P 与控制;
- 状态栏;
- 启动、保存并重连、停止按钮。
控制端网页主要包括:
- 远程画面显示区;
- 全屏观看按钮;
- 分辨率设置;
- 鼠标键盘控制;
- 网页终端;
- 连接状态显示。
后续可以继续优化界面,让它更加接近专业远程控制软件。
五、使用方式
1. 启动中转服务器
在服务器上运行:
java -jar relay-server.jar
服务器启动后,会监听指定端口。
例如:
http://服务器IP:端口
控制端浏览器访问这个地址即可打开网页控制端。
2. 启动被控端
在 Windows 被控电脑上运行:
RemoteAgentSafe.exe
然后填写:
- 中转服务器地址;
- 被控端令牌;
- 访问密码;
- 画面质量;
- 分辨率配置。
点击启动后,被控端就会连接服务器。
3. 控制端访问
在另一台电脑或者手机浏览器中打开服务器地址。
输入对应令牌和密码后,就可以进入远程控制页面。
六、性能优化思路
远程控制系统的流畅度主要受几个因素影响:
1. 屏幕采集速度
被控端需要不断截取屏幕画面,如果分辨率很高,比如 2752×1152 或 4K,采集和压缩压力会明显增加。
2. 图像压缩速度
JPEG 压缩质量越高,画面越清晰,但数据量也越大,传输和编码压力也越高。
3. 网络延迟
如果通过公网服务器中转,延迟会比局域网直连高。
如果控制端和被控端在同一局域网,优先使用直连会更流畅。
4. 浏览器刷新机制
网页端显示远程画面时,也要考虑浏览器刷新、图片解码、Canvas 绘制等问题。
5. 目标帧率设置
理论上可以设置 60 FPS,但实际能不能达到,还取决于:
- 被控端 CPU 性能;
- 屏幕分辨率;
- JPEG 质量;
- 网络带宽;
- 中转服务器性能;
- 控制端浏览器性能。
因此,比较推荐的配置是:
FPS:30
JPEG质量:60% - 75%
传输分辨率:1280×720 或 1600×900
如果追求清晰度,可以提高分辨率。
如果追求流畅度,可以降低分辨率和 JPEG 质量。
七、目前存在的问题
这个系统目前还是学习和实验性质,和成熟远程控制软件相比,还有不少可以优化的地方。
例如:
- 画面传输还可以改成 WebRTC;
- 终端可以进一步做成完整伪终端 PTY;
- 文件传输功能可以继续完善;
- P2P 穿透能力可以增强;
- 远程声音传输还没有实现;
- 权限控制和连接日志可以加强;
- 控制端 UI 还可以继续美化;
- 多用户同时观看和控制需要进一步设计。
这些都是后续可以继续迭代的方向。
八、后续计划
后面可以继续优化以下功能:
1. 改进画面传输
目前主要基于截图和 JPEG 传输。
后续可以考虑使用:
- WebRTC;
- H.264 编码;
- 差分帧传输;
- 局部区域更新。
这样可以显著提升帧率和流畅度。
2. 增强终端能力
目前网页终端已经支持持久 Shell 会话。
后续可以继续增强为更接近真实终端的模式,比如:
- 支持方向键;
- 支持 Tab 补全;
- 支持 Ctrl+C;
- 支持交互式程序;
- 支持 ANSI 颜色输出;
- 支持命令历史。
3. 文件传输
可以增加一个简单的文件管理模块,实现:
- 上传文件到被控端;
- 从被控端下载文件;
- 浏览目录;
- 删除文件;
- 创建文件夹;
- 生成临时下载链接。
这样系统就不仅能远程控制,还能完成远程文件管理。
4. 权限与安全
远程控制软件最重要的是安全。
后续可以继续完善:
- 访问密码加密;
- Token 自动生成;
- 连接日志记录;
- 控制端白名单;
- 操作审计;
- 临时授权码;
- 连接确认弹窗;
- 超时自动断开。
只有把授权和安全做好,远程控制系统才适合长期使用。
九、总结
SafeRemote 小助手是一个基于 Java 实现的轻量级远程控制系统。
它实现了远程屏幕查看、鼠标键盘控制、网页终端、分辨率调整、全屏观看、托盘运行、无黑窗启动等功能。
虽然它目前还不能完全替代专业远程桌面软件,但作为一个学习项目,它涵盖了很多实用技术点:
- Java 桌面程序开发;
- 屏幕采集;
- 鼠标键盘模拟;
- Web 控制端;
- 服务端中转;
- 远程终端;
- Windows 程序打包;
- 托盘程序设计;
- 网络通信与性能优化。
通过这个项目,可以比较完整地理解一个远程控制系统从被控端、服务端到控制端的基本实现思路。
后续如果继续加入 WebRTC、文件传输、权限审计和更完善的 P2P 能力,这个系统还可以进一步发展成一个更完整的个人远程协助工具。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)