Update PPT
DeviceShare 是一款跨平台的多主机输入设备共享工具,支持 Windows、Linux、MacOS 等操作系统,支持在Wayland桌面环境下运行。
通过 DeviceShare,您可以在多台主机之间共享鼠标、键盘等输入设备,支持剪切板和文件共享实现多台主机之间的共享协同。
项目在Windows10、Debian12、Ubuntu20.4、MacOS、openKylin等多个平台进行运行演示,服务端主机连接usb键鼠,所有主机以无线局域网的形式连接,测试环境如下图所示:
演示视频:https://img.qylh.xyz/DeviceShare.mp4
针对x86架构的Windows、OpenKylin操作系统,我们打包构建了可执行程序,可在Release界面下载合适的版本。
run.sh
sudo chmod 777 run.sh
bash run.sh
若构建的版本无法支持目标机器,可选择源码运行或自行打包。该方案需具备Python3 环境,具体步骤如下:
pip install -r requirements.txt
python deviceShare.py
pyinstaller
pip install pyinstaller
pyinstaller deviceShare.spec
dist
resources
注意Kylin操作系统在安装python的evdev依赖时可能出现错误,请选择安装预编译版本evdev-binary,参考 https://python-evdev.readthedocs.io/en/latest/install.html
pynput
pyperclip
wayland
evdev
uinput
wl-clipboard
项目的整体设计框架如上图所示,整体由四个部分构成:
项目代码结构
DeviceShare ├── resources # 资源文件 ├── src # 源码 │ ├── communication # 网络通信模块 │ │ ├── client_state.py # 客户端状态 │ │ ├── message.py # 消息定义 │ │ └── my_socket.py # socket封装 │ ├── controller # 设备控制模块 │ │ ├── clipboard_controller.py # 剪切板控制 │ │ ├── keyboard_controller.py # 键盘控制 │ │ ├── file_controller.py # 文件控制 │ │ └── mouse_controller.py # 鼠标控制 │ ├── gui # GUI界面 │ │ ├── client_gui.py # 客户端GUI │ │ ├── position.py # 屏幕位置 │ │ ├── screen.py # 屏幕管理 │ │ └── server_gui.py # 服务端GUI │ ├── utils # 工具模块 │ │ ├── device.py # 设备信息 │ │ ├── device_name.py # 设备名称 │ │ ├── device_storage.py # 设备存储 │ │ ├── key_code.py # 键盘按键 │ │ ├── key_storage.py # 键盘存储 │ │ ├── net.py # 网络工具 │ │ ├── plantform.py # 平台信息 │ │ ├── rsautil.py # RSA加密工具 │ │ └── service_listener.py # 服务监听 │ ├── client.py # 客户端,被控设备 │ └── server.py # 服务端,主控设备 ├── deviceShare.py # 启动程序 ├── run.sh # linux启动脚本 ├── deviceShare.spec # pyinstaller打包配置 ├── keys.db # RSA密钥存储,自动生成 ├── readme.md # 说明文档 ├── requirements.txt # 依赖 └── temp.db # 设备信息存储, 自动生成
软件的运行流程如下图所示,客户端与服务端作为两个独立模块单独启动,客户端启动后会向局域网中广播自身信息, 服务端收到广播信息后将其加入主机列表,并配置屏幕间的相对位置信息。当服务端主机的光标移出屏幕范围后,会自动判断接下来被控的主机, 并将本机输入设备产生的输入拦截,通过网络模块转发给客户端,客户端收到输入信息后响应相应的控制信号。当客户端的光标移出范围后向服务端主机发送事件标志, 服务端主机停止控制信号的转发,并恢复输入事件的响应。
服务端为具备Hid Input设备的主机,由以下几个线程构成:
客户端为需要使用服务主机的Hid Input设备的主机,由以下几个线程构成:
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
DeviceShare —— 跨平台多主机输入设备共享跨平台、可扩展的多主机Hid-Input设备共享协同智能解决方案
项目介绍
DeviceShare 是一款跨平台的多主机输入设备共享工具,支持 Windows、Linux、MacOS 等操作系统,支持在Wayland桌面环境下运行。
通过 DeviceShare,您可以在多台主机之间共享鼠标、键盘等输入设备,支持剪切板和文件共享实现多台主机之间的共享协同。
功能特性
项目演示
项目在Windows10、Debian12、Ubuntu20.4、MacOS、openKylin等多个平台进行运行演示,服务端主机连接usb键鼠,所有主机以无线局域网的形式连接,测试环境如下图所示:
演示视频:https://img.qylh.xyz/DeviceShare.mp4
说明
针对x86架构的Windows、OpenKylin操作系统,我们打包构建了可执行程序,可在Release界面下载合适的版本。
run.sh
启动程序,将run.sh
复制到dist目录下,执行sudo chmod 777 run.sh
赋予执行权限,执行bash run.sh
启动程序Build说明
若构建的版本无法支持目标机器,可选择源码运行或自行打包。该方案需具备Python3 环境,具体步骤如下:
pip install -r requirements.txt
命令安装依赖python deviceShare.py
启动程序pyinstaller
:pip install pyinstaller
pyinstaller
打包目标程序:pyinstaller deviceShare.spec
dist
目录下生成的可执行文件resources
目录复制到dist目录下注意Kylin操作系统在安装python的evdev依赖时可能出现错误,请选择安装预编译版本evdev-binary,参考 https://python-evdev.readthedocs.io/en/latest/install.html
使用说明
控制原理
pynput
进行鼠标和键盘的控制,基于pyperclip
进行剪切板的控制。wayland
环境下,基于evdev
和uinput
进行鼠标和键盘的控制,基于wl-clipboard
进行剪切板的控制。系统架构
项目的整体设计框架如上图所示,整体由四个部分构成:
项目代码结构
软件的运行流程如下图所示,客户端与服务端作为两个独立模块单独启动,客户端启动后会向局域网中广播自身信息, 服务端收到广播信息后将其加入主机列表,并配置屏幕间的相对位置信息。当服务端主机的光标移出屏幕范围后,会自动判断接下来被控的主机, 并将本机输入设备产生的输入拦截,通过网络模块转发给客户端,客户端收到输入信息后响应相应的控制信号。当客户端的光标移出范围后向服务端主机发送事件标志, 服务端主机停止控制信号的转发,并恢复输入事件的响应。
服务端为具备Hid Input设备的主机,由以下几个线程构成:
客户端为需要使用服务主机的Hid Input设备的主机,由以下几个线程构成:
TODO