当前仓库属于暂停状态,部分功能使用受限,详情请查阅 仓库状态说明
131 Star 726 Fork 353

matrixy / tentacle远程桌面
暂停

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

基于Java AWT、SpringBoot、websocket、canvas的跨平台远程桌面实现

UDP协议版本有很严重的通信问题,先将UDP部分拆分到了udp分支上了,此分支还是TCP协议版本

模块划分

  1. common 公共开发库
  2. tentacle-server 服务器端,主入口:cn.org.hentai.server.app.ServerApp
  3. tentacle-client 远程主机端(受控端),主入口:cn.org.hentai.client.app.Tentacle

使用

  1. 修改配置文件的相应项目,比如监听端口,以及${rds.access.password}远程控制访问密码
  2. 使用mvn package编绎打包,服务器端使用original-tentacle-server-1.5.9.RELEASE.jar,被控制的主机端使用tentacle-client-1.0-SNAPSHOT.jar
  3. 通过java -jar original-tentacle-server-1.5.9.RELEASE.jar启动服务器端
  4. 在需要被控制的机器上,使用java -jar tentacle-client-1.0-SNAPSHOT.jar来启动主机端,注意控制台输出,显示INFO: Connected to server...即表示己成功的连接到服务器端。
  5. 在浏览器里输入http://server_ip:server_port/,输入${rds.access.password}开始远程桌面控制。

传输协议

基础包结构

# 协议标识头
48 45 4E 54 41 49       H E N T A I
01                      指令:心跳
00 00 00 05             数据包长度5字节
48 45 4C 4C 4F          H E L L O

流程

画面传输

压缩

  1. 行程编码,对于大画积的连续的同色区域压缩率相当显著。
  2. 通过简易的位运算的方式,对非灰度颜色值(RR == GG == BB),进行与0b111100001111000011110000按位与运算,变相的对颜色进行了有损压缩,但是因为完全保留了灰度色,对于绝大部分屏幕画面影响很小,对于图像影响很明显。
  3. 通过对比两祯间的画面,同一位置的颜色值如果相等,则保留透明色,否则则保留新画面祯的颜色值,如此以来,对于变化较小的画面祯,整个画面的数据包,几乎只传输了变化部分的内容(画面不变则不传输数据)。
  4. 目前javascript的解压缩实现与后台的java压缩实现,在Google ChromeFirefox上表现相当好,很少有单祯画面解压时间超过10毫秒,未来将进一步考虑更加慢的高压缩比算法,进一步的控制流量的消耗。

流程

鼠标/键盘交互

因为浏览器端脚本不能百分百的拦截所有的组合键,所以不是所有的组合键都能够用于远程控制端,比如ALT+TAB的切换窗口(tentacle在窗口失焦时,将释放所有己按下的按键)。

注:向远程主机发送CTRL+ALT+DELETE组合键不起作用,估计使用的java.awt.Robot类有安全权限控制。

剪切板

因为浏览器安全策略上的原因,故不做剪切板的直接访问,只提供了获取与设置远程主机的剪切板的操作界面与功能。

TODO

  1. 压缩率优化
  2. 文件上传
  3. windows平台系统解锁/登陆

系统使用指南

windows平台

在windows平台上,实际上有两个desktop,一个是正常使用时的desktop,就叫它workbench desktop吧,我们的程序可以与之交互,另外一个是专用于登陆/验证的desktop,这个就叫它logon desktop吧。 当系统处于未登陆、锁定中或是UAC提示时,logon desktop将切换到前台来,在这个情况下,我们的程序是无法进行截屏的,也无法发送按键,控制鼠标等。针对于这个问题,目前己经测试过如下方案:

  1. 命令行自动登陆/解锁
    1. Logon,只支持windows 7以前的操作系统。
    2. Logon Expert,可以完成自动登陆解锁,但是是收费的。
  2. Mirror Driver,可以截取锁屏界面的画面,但是截取不到登陆输入框。
  3. pGina,自动登陆方案,好像对系统用户有不可知的限制或要求,暂不可行。
  4. 其它命令行截屏工具,对于锁屏界面是全线溃败,没有一个能打的。。。

目前来说,windows平台的远程桌面比较苦逼,还在想办法,本项目短期内不会继续更新,找到解决方案了再说。 比较可行的办法是,设置系统用户自动登陆,然后在设置屏幕保护界面不要勾选“在恢复时显示登陆屏幕”,然后就可以一直用了。

linux平台

linux平台对扩展开发比较友好(或者是我比较了解linux的缘故吧),登陆界面上没有像windows那样的限制,比较好弄。 如果要在命令行模式下运行,或是想要设置自启动,有可能会碰到java.awt.AWTException: headless environment报错,这是因为缺少$DISPLAY环境变量所导致的java awt找不到相应桌面,进而无法截屏或控制鼠标,解决方法如下:

  1. 确定$DISPLAY变量的值,可以通过在桌面环境下,打开终端terminal,输入echo $DISPLAY来查看,一般不是:0就是:1
  2. 设置$DISPLAY环境变量,执行export DISPLAY=:0,你可以忽略掉第1步,直接使用:0:1试试。
  3. 这个时候就可以正常启动tentacle-client

诚证合作小伙伴

目前在如下两个方面上尚有不足之处,有兴趣的小伙伴可以留言或加QQ65827536联系我。

  1. windows用户解锁
  2. 压缩率优化
Copyright [2018] [matrixy] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

基于Java AWT、SpringBoot、websocket、canvas的跨平台远程桌面实现,目前支持远程桌面控制,剪切板共享、文件传输等。 展开 收起
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/matrixy/tentacle.git
git@gitee.com:matrixy/tentacle.git
matrixy
tentacle
tentacle远程桌面
tcp

搜索帮助