Skip to content

Commit 1bcf274

Browse files
committed
update: readme
1 parent 714552b commit 1bcf274

File tree

1 file changed

+65
-5
lines changed

1 file changed

+65
-5
lines changed

readme.md

Lines changed: 65 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# DeviceShare —— 跨平台多主机输入设备共享
22

33
## 项目介绍
4-
4+
![](https://img.qylh.xyz/blog/1723181688963.png)
55
DeviceShare 是一款跨平台的多主机输入设备共享工具,支持 Windows、Linux、MacOS 等操作系统,支持在Wayland环境下运行。
66

77
通过 DeviceShare,您可以在多台主机之间共享鼠标、键盘、剪贴板等输入设备,实现多台主机之间的输入设备共享。
@@ -46,23 +46,84 @@ https://github.com/qy-liuhuo/deviceShare/assets/60374114/1b911b8a-976f-4128-9518
4646

4747
6. 注意Kylin操作系统在安装python的evdev依赖时可能出现错误,请选择安装预编译版本evdev-binary,参考 https://python-evdev.readthedocs.io/en/latest/install.html
4848

49+
## 控制原理
50+
51+
1. 主要基于`pynput`进行鼠标和键盘的控制,基于`pyperclip`进行剪切板的控制。
52+
2.`wayland`环境下,基于`evdev``uinput`进行鼠标和键盘的控制,基于`wl-clipboard`进行剪切板的控制。
4953

5054
## 系统架构
5155

52-
![1718631831164.png](https://img.qylh.xyz/blog/1718631831164.png)
56+
![1723181787105.png](https://img.qylh.xyz/blog/1723181787105.png)
5357

5458
项目的整体设计框架如上图所示,整体由四个部分构成:
5559
- 服务端为Hid Input设备的拥有者,可向其他客户端主机共享其拥有的输入设备。
5660
- 客户端可使用主机共享的输入设备。
5761
- 网络通信模块用于服务端和客户端的数据传输。
5862
- 设备控制模块用于读取Hid Input设备信息及控制Hid Input设备。
5963

64+
项目目录结构
65+
```
66+
DeviceShare
67+
├── resources # 资源文件
68+
├── src # 源码
69+
│ ├── communication # 网络通信模块
70+
│ │ ├── client_state.py # 客户端状态
71+
│ │ ├── message.py # 消息定义
72+
│ │ └── my_socket.py # socket封装
73+
│ ├── controller # 设备控制模块
74+
│ │ ├── clipboard_controller.py # 剪切板控制
75+
│ │ ├── keyboard_controller.py # 键盘控制
76+
│ │ └── mouse_controller.py # 鼠标控制
77+
│ ├── gui # GUI界面
78+
│ │ ├── client_gui.py # 客户端GUI
79+
│ │ ├── position.py # 屏幕位置
80+
│ │ ├── screen.py # 屏幕管理
81+
│ │ └── server_gui.py # 服务端GUI
82+
│ ├── utils # 工具模块
83+
│ │ ├── device.py # 设备信息
84+
│ │ ├── device_name.py # 设备名称
85+
│ │ ├── device_storage.py # 设备存储
86+
│ │ ├── key_code.py # 键盘按键
87+
│ │ ├── key_storage.py # 键盘存储
88+
│ │ ├── net.py # 网络工具
89+
│ │ ├── plantform.py # 平台信息
90+
│ │ ├── rsautil.py # RSA加密工具
91+
│ │ └── service_listener.py # 服务监听
92+
│ ├── client.py # 客户端,被控设备
93+
│ └── server.py # 服务端,主控设备
94+
├── deviceShare.py # 启动程序
95+
├── keys.db # RSA密钥存储,自动生成
96+
├── readme.md # 说明文档
97+
├── requirements.txt # 依赖
98+
└── temp.db # 设备信息存储, 自动生成
99+
```
100+
101+
60102
软件的运行流程如下图所示,客户端与服务端作为两个独立模块单独启动,客户端启动后会向局域网中广播自身信息,
61103
服务端收到广播信息后将其加入主机列表,并配置屏幕间的相对位置信息。当服务端主机的光标移出屏幕范围后,会自动判断接下来被控的主机,
62104
并将本机输入设备产生的输入拦截,通过网络模块转发给客户端,客户端收到输入信息后响应相应的控制信号。当客户端的光标移出范围后向服务端主机发送事件标志,
63105
服务端主机停止控制信号的转发,并恢复输入事件的响应。
64-
![1718631845356.png](https://img.qylh.xyz/blog/1718631845356.png)
65106

107+
![1723181806729.png](https://img.qylh.xyz/blog/1723181806729.png)
108+
109+
服务端为具备Hid Input设备的主机,由以下几个线程构成:
110+
- 主线程:服务注册及启动其他线程
111+
- TCP监听线程:用于监听处理TCP连接,并为每一个连接创建子线程。
112+
- TCP 处理线程,用于处理与客户端的TCP连接
113+
- 消息监听线程:监听客户端消息,主要为心跳信息和剪切板信息
114+
- 设备监听线程:监听Hid Input设备的输入信息和剪切板信息。
115+
- GUI线程: GUI界面的显示和处理。
116+
117+
![1723181908743.png](https://img.qylh.xyz/blog/1723181908743.png)
118+
119+
客户端为需要使用服务主机的Hid Input设备的主机,由以下几个线程构成:
120+
- 主线程:处理服务发现,发起连接请求,启动其他线程。
121+
- 心跳包线程:定期发送心跳包。
122+
- 消息监听线程:用于接收并响应主机传递的控制信息。
123+
- GUI线程: GUI界面的显示和处理。
124+
- 设备监听线程:用于监听鼠标移出事件及剪切板更新事件。
125+
126+
![1723181937936.png](https://img.qylh.xyz/blog/1723181937936.png)
66127

67128
## TODO
68129
- [x] 主机发现机制
@@ -75,5 +136,4 @@ https://github.com/qy-liuhuo/deviceShare/assets/60374114/1b911b8a-976f-4128-9518
75136
- [x] 优化代码质量,提升代码可读性,提升软件性能和稳定性
76137
- [x] 测试更多类型操作系统
77138
- [x] 优化文档
78-
- [ ] 解耦各设备共享模块,支持用户自定义开关相关功能
79-
- [ ] 文件拖拽共享功能
139+
- [ ] 文件拖拽共享功能(实现中)

0 commit comments

Comments
 (0)