一个用于监控桌面和 Android 设备活动状态的 Python 服务器
| .gitignore | ||
| LICENSE | ||
| main.py | ||
| README.md | ||
| requirements.txt | ||
| run.sh | ||
Status Monitor
一个用于监控桌面和 Android 设备活动状态的 Python 服务器
功能特性
- 🖥️ 桌面活动监控: 自动检测键盘和鼠标输入,监控桌面活动状态
- 📱 Android 设备监控: 接收来自 Android 应用的状态更新
- 🌐 REST API: 提供简单的 HTTP API 接口查询设备状态
- ⏰ 智能超时: 桌面设备 60 秒超时,Android 设备 305 秒超时
- 🔒 线程安全: 使用锁机制确保多线程环境下的数据一致性
系统要求
- 操作系统: Linux(需要访问
/dev/input/event*设备) - Python: 3.8+
- 权限: 需要 root 权限以访问输入设备
- 依赖: FastAPI, uvicorn, pydantic
安装
- 克隆仓库:
git clone http://git.s3.fan/Steve3184/StatusMoniter
cd StatusMoniter
- 安装依赖(通过venv):
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
使用方法
启动服务器
sudo su
# 基本启动(需要 root 权限)
python3 main.py
# 自定义配置
python3 main.py --host 0.0.0.0 --port 5000 --debug
# 查看帮助
python3 main.py --help
命令行参数
--host: 绑定地址(默认: 0.0.0.0)--port: 端口号(默认: 5000)--debug: 启用调试模式
API 接口
查询设备状态
GET /query?device=desktop
GET /query?device=android
响应:
active: 设备处于活跃状态inactive: 设备处于非活跃状态
更新 Android 设备状态
POST /update
Content-Type: application/json
{
"device": "android",
"active": true
}
获取所有设备状态
GET /status
响应示例:
{
"desktop": {
"active": true,
"last_activity": "2024-01-15T10:30:00.123456"
},
"android": {
"active": false,
"last_activity": "2024-01-15T10:25:00.654321"
}
}
工作原理
桌面监控
- 扫描
/dev/input/event*设备,识别键盘和鼠标 - 使用
select()系统调用监听输入事件 - 解析 Linux input_event 结构体,检测按键和鼠标移动
- 60 秒无活动后标记为非活跃状态
Android 监控
- 通过 HTTP POST 接口接收 Android 应用的状态更新
- 305 秒(5 分钟 + 5 秒)无更新后标记为非活跃状态
- Android 端应用需要定期发送心跳包
Android 客户端
Android 端应用位于独立仓库:StatusMoniterAndroid
Android 应用:
- 定期向服务器发送 POST 请求更新状态
- 检测设备的活动状态(屏幕开关、应用使用等)
- 在设备活跃时发送
"active": true,非活跃时发送"active": false
安全注意事项
- 服务器需要 root 权限运行以访问输入设备
- 默认绑定到
0.0.0.0,请确保网络安全 - 建议在生产环境中使用防火墙限制访问
故障排除
常见问题
- 权限错误: 确保以 root 权限运行
- 找不到设备: 检查
/dev/input/目录是否存在相关设备 - Android 连接问题: 确认 Android 设备可以访问服务器 IP 和端口
调试模式
使用 --debug 参数启动可以查看详细日志信息:
sudo python main.py --debug
许可证
贡献
欢迎提交 Issue 和 Pull Request!
版本历史
- v1.0.0: 初始版本,支持桌面和 Android 设备监控