usbctl
轻量 USB/IP Web 控制台,支持设备列表、绑定/解绑和 SSE 实时状态推送。
01 / PROJECT OVERVIEW
项目研究解读
轻量 USB/IP Web 控制台,支持设备列表、绑定/解绑和 SSE 实时状态推送。 本仓库以 C 为主要技术栈,当前快照索引 23 个文件。报告依据README 与目录结构整理,重点呈现项目用途、工程结构和复用方式,不把宣传描述等同于验证结论。
02 / CORE CAPABILITIES
值得关注的能力
- 01
围绕“轻量 USB/IP Web 控制台,支持设备列表、绑定/解绑和 SSE 实时状态推送”提供公开实现或研究资料
- 02
以 C 为主,保留 23 个可检查仓库文件
- 03
提供原始 GitHub 链接、目录导览和本地研究快照,便于复核与二次开发
03 / ENGINEERING
工程与仓库结构
仓库以 C 为主要实现语言,研究快照包含 23 个文件、9 个主要顶层入口。已提供 README 作为使用与能力说明。 项目最近更新时间为 2026-08-25,许可标记为 MIT License。
项目文件与实现资料
项目文件与实现资料
项目文件与实现资料
项目文件与实现资料
项目文件与实现资料
项目文件与实现资料
04 / USE CASES
适合用在哪里
- 学习项目设计与实现
- 评估后用于二次开发
- 作为相关领域的研究参考
05 / QUICK START
从仓库开始
以下命令摘自项目 README 或根据仓库地址生成。请先阅读源仓库的安装要求、许可和脚本,再在自己的环境中运行。
./build/usbctl
# 若提示 usbip 未找到,需安装 usbip 工具06 / REPOSITORY MAP
目录证据导览
这里列出快照中的前 23 个索引文件中的代表路径,帮助你快速定位源码、文档、测试与资源。
.clang-format.github/workflows/c-cpp.yml.github/workflows/flawfinder.yml.gitignore.idea/.gitignore.idea/codeStyles/codeStyleConfig.xml.idea/copilot.data.migration.agent.xml.idea/copilot.data.migration.ask.xml.idea/copilot.data.migration.ask2agent.xml.idea/copilot.data.migration.edit.xml.idea/dictionaries/project.xml.idea/editor.xml.idea/misc.xml.idea/vcs.xmlLICENSEMakefileREADME.mdREADME_en.mdarchitecture.svgarchitecture_en.svginstall-service.shusbctl.cusbctl.jpg
07 / SOURCE NOTES
README 原文摘录
保留原始说明便于复核。中文研究结论以当前快照为依据,后续变化请以 GitHub 仓库为准。
English | 中文
usbctl - USB/IP 设备 Web 管理器
项目架构图
[图片] 项目架构图
[图片] usbctl 响应式界面截图
项目简介
usbctl 是一个轻量级、跨平台的 USB/IP 设备管理 Web 界面,支持 PC 和移动端响应式访问。它集成了设备列表、绑定/解绑操作、实时状态推送(SSE)、操作日志等功能,适用于 Linux(包括树莓派、Openwrt)、Windows(WSL/usbipd-win)、macOS 等环境。
- 单文件 C 语言实现
- 内嵌 HTML/CSS/JS 资源,无需外部依赖
- 支持配置持久化、自动恢复绑定
- 实时设备状态推送,AJAX 操作
- ARM Linux 优化,适合树莓派等嵌入式设备
目录结构
usbctl/
├── build/ # 编译输出目录,包含可执行文件 usbctl
│ └── usbctl # 主程序,已编译(约944KB)
├── LICENSE # 许可证
├── Makefile # 构建脚本,支持多平台
├── usbctl.c # 主程序源码
├── usbctl.jpg # 界面截图
├── install-service.sh # 自动化部署脚本(推荐)编译方法
推荐使用 Makefile 自动化构建:
make # 构建本地平台静态二进制
# 或手动编译
gcc -static -O2 -o build/usbctl usbctl.c -lpthread支持多平台交叉编译,详见 Makefile。
部署环境与流程(Raspberry Pi OS arm64 实测)
1. 运行 usbctl 检查依赖
./build/usbctl
# 若提示 usbip 未找到,需安装 usbip 工具2. 安装 usbip 工具
适用于 Debian/Ubuntu/Raspberry Pi OS:
sudo apt update
sudo apt install usbip3. 验证 usbip 工具
usbip
# 显示命令帮助即安装成功4. 检查 USB 设备
lsusb -t
# 查看总线和设备信息5. 加载内核驱动
sudo modprobe usbip-host
lsmod | grep usbip
# 应显示 usbip_host 和 usbip_core 模块已加载6. 启动 usbipd 服务
sudo usbipd -D
ps -Al | grep usb
sudo netstat -tlnp | grep :3240
# 确认 usbipd 已监听 3240 端口7. 放开防火墙端口(如有)
sudo ufw allow 3240/tcp
# 或检查 iptables 是否阻止
sudo iptables -L8. 启动 usbctl Web 服务
sudo ./build/usbctl
# 默认监听 11980 端口,支持自定义浏览器访问:
- http://localhost:11980
- http://树莓派IP:11980
🚀 自动化部署脚本(推荐方式)
为简化部署流程,项目提供了一个 一键安装/卸载脚本 install-service.sh,适用于 Debian / Ubuntu / Raspberry Pi OS (ARM64) 系统。
该脚本会自动完成以下操作:
- ✅ 检测并安装
usbip工具(兼容 Raspberry Pi OS 和通用 Debian) - ✅ 自动加载并持久化
usbip-host内核模块(开机自动加载) - ✅ 启动
usbipd -D守护进程(兼容无 systemd 服务的系统) - ✅ 开放防火墙端口
3240/tcp(usbipd)和11980/tcp(usbctl) - ✅ 将
usbctl安装到/usr/local/bin/usbctl - ✅ 创建标准化配置文件:
/etc/usbctl/config - ✅ 配置日志轮转(
/var/log/usbctl.log) - ✅ 安装并启用 systemd 服务,实现开机自启
- ✅ 自动检测并清理端口冲突(避免 "Address already in use")
使用步骤
1. 获取部署脚本
将以下脚本保存为项目根目录下的 install-service.sh(点击此处获取脚本内容 或从仓库下载)。
2. 赋予执行权限
chmod +x install-service.sh3. 执行安装
sudo ./install-service.sh install成功输出示例:
[INFO] 🚀 开始部署 usbctl...
[INFO] usbip 已安装
[INFO] 已写入 /etc/modules-load.d/usbip.conf 实现开机自动加载
[WARN] 未找到 usbipd.service,手动启动 usbipd -D
[INFO] 开放端口 3240/tcp (UFW)
[INFO] 开放端口 11980/tcp (UFW)
[INFO] 已创建默认配置文件:/etc/usbctl/config
[INFO] systemd 服务已启用并启动
[INFO] 已配置 logrotate:/etc/logrotate.d/usbctl
[INFO] ✅ 部署完成!访问 http://192.168.x.x:119804. 验证服务状态
# 查看服务状态
systemctl status usbctl
# 查看实时日志
journalctl -u usbctl -f
# 检查端口监听
ss -tlnp | grep -E ':(3240|11980)'5. 卸载(可选)
sudo ./install-service.sh uninstall⚠️ 卸载时会保留 /etc/usbctl/config 配置文件,避免误删用户自定义设置。如需彻底清除,请手动删除该目录。配置文件说明
安装后,配置文件位于:
/etc/usbctl/config默认内容:
port=11980
bind=0.0.0.0
poll_interval=3
verbose_logging=1
log_file=/var/log/usbctl.log修改后需重启服务生效:
sudo systemctl restart usbctl故障排查
| 问题 | 解决方案 |
|---|---|
Bind failed: Address already in use | 脚本已自动检测并清理,若仍出现,请手动执行 sudo pkill -f usbctl |
usbip: command not found | 脚本会自动安装,若失败请手动运行 sudo apt install usbip |
| 无法访问 Web 界面 | 检查防火墙:sudo ufw status,确保 11980 端口开放 |
| 设备未显示 | 确保 USB 设备已插入,且 usbip list -l 能列出设备 |
✅ 推荐:在树莓派等嵌入式设备上,优先使用此脚本部署,避免手动操作遗漏步骤。
Windows 客户端推荐
建议使用微软认证(WHLK)的 usbip-win2 项目:
- https://github.com/vadimgrn/usbip-win2
或官方 usbipd-win(WSL 支持):
- https://github.com/dorssel/usbipd-win
其他说明
- 支持 systemd 服务安装:
./build/usbctl --install-service - 配置文件默认路径:
~/.config/usbctl/config(**脚本部署后改为/etc/usbctl/config**) - 日志文件默认路径:
/var/log/usbctl.log - 更多命令行参数见
./build/usbctl --help
许可证
MIT License,详见 [LICENSE](LICENSE)。
英文版
请参考 README_en.md。
如需更多帮助或反馈,请访问 github.com/suifei/usbctl。

