# uinput_server **Repository Path**: hyper-agent/uinput_server ## Basic Information - **Project Name**: uinput_server - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-08 - **Last Updated**: 2025-07-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # uinput Touch Server 一个基于C语言的uinput触屏模拟服务器,用于接收Android设备的触屏事件并在Linux系统上进行模拟。 ## 功能特性 - 通过TCP服务器接收Android触屏事件 - 使用Linux uinput子系统模拟触屏输入 - 支持多种触屏操作(按下、抬起、移动、取消) - 可配置屏幕分辨率和服务器端口 - 完整的事件验证和错误处理 - 优雅的信号处理和资源清理 ## 系统要求 - Linux操作系统(内核支持uinput) - gcc编译器 - root权限(访问/dev/uinput设备) ## 编译 ### 标准编译 ```bash make ``` ### 调试编译 ```bash make debug ``` ### 静态编译(推荐用于Android) ```bash # 简单静态编译 make static-simple # 完整静态编译(使用目标文件) make static ``` ### Android交叉编译 ```bash # 设置Android NDK路径 export ANDROID_NDK_PATH=/path/to/android-ndk # ARM64版本(推荐) make android-arm64 # ARM32版本(旧设备) make android-arm32 ``` ### 清理编译文件 ```bash make clean ``` ## 安装 ```bash make install ``` 这将把程序安装到 `/usr/local/bin/uinput_server` ## 使用方法 ### 基本用法 ```bash sudo ./uinput_server ``` ### 指定参数 ```bash sudo ./uinput_server -p 8888 -w 1920 -h 1080 -d /dev/uinput ``` ### 命令行选项 - `-p, --port PORT`: TCP服务器端口(默认: 8888) - `-w, --width WIDTH`: 屏幕宽度像素(默认: 1920) - `-h, --height HEIGHT`: 屏幕高度像素(默认: 1080) - `-d, --device DEVICE`: uinput设备路径(默认: /dev/uinput) - `--help`: 显示帮助信息 ## 触屏事件格式 Android客户端需要发送以下格式的数据: ``` action,x,y,pressure,slot,timestamp ``` ### 参数说明 - `action`: 触屏动作(0=按下, 1=抬起, 2=移动, 3=取消) - `x`: X坐标 - `y`: Y坐标 - `pressure`: 压力值(0-255) - `slot`: 多点触控槽位ID - `timestamp`: 事件时间戳 ### 示例数据 ``` 0,500,300,128,0,1234567890 # 在(500,300)按下 2,510,310,128,0,1234567891 # 移动到(510,310) 1,510,310,0,0,1234567892 # 在(510,310)抬起 ``` ## 权限设置 程序需要访问 `/dev/uinput` 设备,通常需要root权限。可以通过以下方式设置权限: ### 方法1:使用sudo运行 ```bash sudo ./uinput_server ``` ### 方法2:设置uinput设备权限 ```bash sudo chmod 666 /dev/uinput ``` ### 方法3:添加用户到input组 ```bash sudo usermod -a -G input $USER ``` ## 项目结构 ``` ├── uinput_server.h # 主头文件 ├── main.c # 主程序 ├── uinput_device.c # uinput设备操作 ├── tcp_server.c # TCP服务器 ├── event_handler.c # 事件处理 ├── Makefile # 编译配置 └── README.md # 项目说明 ``` ## 测试 ### 使用telnet测试 ```bash # 启动服务器 sudo ./uinput_server -p 8888 # 在另一个终端连接并发送数据 telnet localhost 8888 0,500,300,128,0,1234567890 ``` ### Android客户端示例 Android应用需要建立TCP连接到服务器,并按照指定格式发送触屏事件数据。 ## Android设备部署 对于Android设备使用,建议使用静态编译版本: ### 编译静态版本 ```bash make static-simple ``` ### 传输到Android设备 ```bash adb push uinput_server_static /data/local/tmp/uinput_server adb shell chmod 755 /data/local/tmp/uinput_server ``` ### 在Android设备上运行 ```bash adb shell su # 需要root权限 cd /data/local/tmp ./uinput_server -p 8888 -w 1080 -h 2340 ``` 详细的Android部署指南请参考 `ANDROID_USAGE.md` 文件。 ## 故障排除 ### 常见问题 1. **权限被拒绝**: 确保以root权限运行或正确设置了uinput设备权限 2. **设备不存在**: 确保内核已加载uinput模块:`sudo modprobe uinput` 3. **端口被占用**: 使用 `-p` 参数指定其他端口 4. **连接失败**: 检查防火墙设置和网络连接 5. **Android权限问题**: 检查SELinux设置,可能需要 `setenforce 0` ## 许可证 此项目采用MIT许可证。 ## 贡献 欢迎提交issue和pull request来改进此项目。