Linux System Controller
by @wangjiaocheng
Linux系统控制能力包;当用户需要控制桌面窗口、管理进程、调整音量亮度、管理电源网络、与串口设备通信、控制智能家居设备、进行鼠标键盘自动化、截图OCR或视觉识别时使用
clawhub install linux-system-controller📖 About This Skill
name: system-controller description: Linux系统控制能力包;当用户需要控制桌面窗口、管理进程、调整音量亮度、管理电源网络、与串口设备通信、控制智能家居设备、进行鼠标键盘自动化、截图OCR或视觉识别时使用 dependency: python: - pyserial>=3.5 - requests>=2.28.0 - pyautogui>=0.9.54 - pillow>=9.0.0 - pytesseract>=0.3.10 system: - apt-get update && apt-get install -y xdotool wmctrl tesseract-ocr alsa-utils
System Controller
Linux系统统一控制接口,支持桌面应用、系统硬件、串口设备和IoT平台的综合控制。
架构
用户请求 → 自然语言理解 → 脚本执行 → 系统操作
六个控制模块,每个模块都有专用的Python脚本:
| 模块 | 脚本 | 功能范围 |
|------|------|----------|
| Window Manager | scripts/window_manager.py | 桌面窗口控制 |
| Process Manager | scripts/process_manager.py | 系统进程管理 |
| Hardware Controller | scripts/hardware_controller.py | 系统硬件设置 |
| Serial Communication | scripts/serial_comm.py | Arduino / 串口设备 |
| IoT Controller | scripts/iot_controller.py | 智能家居 / HTTP APIs |
| GUI Controller | scripts/gui_controller.py | 鼠标、键盘、截图、OCR |
所有脚本都是独立的CLI工具,无脚本间依赖。
执行模型
前置条件
xdotool: 窗口和GUI自动化
- wmctrl: 窗口管理
- tesseract-ocr: 文字识别
- alsa-utils: 音量控制
脚本路径
所有脚本位于:scripts/
执行模式
使用 execute_command 运行脚本。模式:
python3 scripts/.py [flags]
安全规则
1. 执行破坏性操作前必须用户确认(关机、重启、结束进程、关闭窗口、禁用网卡)
2. 先列表/查询再操作。例如:先list再close,先list --name再kill
3. 电源操作前警告用户(关机、重启、睡眠、休眠)并要求明确确认
4. 禁用关键网卡前警告(正在使用的互联网连接)
5. 串口通信前先列表端口以确认正确的端口名称
模块详情
1. Window Manager (window_manager.py)
通过xdotool和wmctrl控制桌面应用窗口。
功能: list, activate, close, minimize, maximize, resize, move
决策流程:
1. 用户说"打开/关闭/聚焦X" → list查找窗口 → 确认 → 执行操作
2. 用户说"调整/移动X" → list查找窗口ID → resize/move
3. 用户说"发送/输入X到Y" → activate目标窗口 → type
常见示例:
process_manager.py start "gedit"window_manager.py list → 查找Chrome → window_manager.py close --title "Chrome"window_manager.py activate --title "WeChat"window_manager.py maximize --title "..."2. Process Manager (process_manager.py)
列表、启动、停止和监控系统进程。
功能: list, kill, start, info, system
决策流程:
1. 用户说"查看进程" → list 或 list --name
2. 用户说"结束X进程" → list --name X → 确认 → kill --name X
3. 用户说"启动X" → start "X"
4. 用户说"系统状态" → system
常见示例:
process_manager.py systemprocess_manager.py kill --name geditprocess_manager.py start "code"3. Hardware Controller (hardware_controller.py)
通过Linux系统工具控制硬件设置。
功能:
决策流程: 1. 用户说"音量/声音" → 音量命令 2. 用户说"亮度/屏幕" → 屏幕/亮度命令 3. 用户说"关机/锁屏/睡眠" → 电源命令(总是确认) 4. 用户说"网络/WiFi" → 网络命令 5. 用户说"USB" → usb list
常见示例:
hardware_controller.py volume set --level 50hardware_controller.py volume mutehardware_controller.py screen brightness --level 30hardware_controller.py power lockhardware_controller.py network wifi4. Serial Communication (serial_comm.py)
通过pyserial与Arduino、ESP32等串口设备通信。
功能: 列表端口, 检测波特率, 发送, 接收, 聊天, 监听
决策流程:
1. 用户说"串口/Arduino/tty" → 先list端口
2. 用户说"发送到Arduino" → send --port /dev/ttyUSB0 --data "..."
3. 用户说"读取传感器" → chat --port /dev/ttyUSB0 --data "READ"
自动安装: 首次使用时自动安装pyserial。
常见示例:
serial_comm.py listserial_comm.py send --port /dev/ttyUSB0 --data "LED_ON"serial_comm.py chat --port /dev/ttyUSB0 --data "GET_TEMP"serial_comm.py monitor --port /dev/ttyUSB0 --duration 305. IoT Controller (iot_controller.py)
通过Home Assistant REST API、Mijia或通用HTTP端点控制智能家居设备。
功能:
决策流程: 1. 用户提到"智能家居/Home Assistant/灯光/温度" → IoT命令 2. 用户说"控制设备/开关灯" → 需要用户提供URL和token 3. 用户说"调用API" → 通用HTTP命令
自动安装: 首次使用时自动安装requests。
常见示例:
iot_controller.py homeassistant --url ... --token ... listiot_controller.py homeassistant --url ... --token ... on --entity-id light.living_roomiot_controller.py homeassistant --url ... --token ... off --entity-id climate.bedroomiot_controller.py http --url ... get --path ...6. GUI Controller (gui_controller.py)
完整的GUI自动化:鼠标控制、键盘输入、截图、OCR和视觉识别。
功能:
自动安装: 首次使用时自动安装pyautogui和pillow。
决策流程:
1. 用户说"click/点击" → 确定位置(坐标/图像模板/颜色) → 点击
2. 用户说"type/输入文字" → keyboard type --text "..."
3. 用户说"screenshot/截图" → screenshot full 或 screenshot active-window
4. 用户说"read screen/OCR/识别文字" → 在相关区域 visual ocr
5. 用户说"find/查找图标" → visual find --template "icon.png"
6. 用户说"scroll/滚动" → mouse scroll
7. 用户说"drag/拖拽" → mouse drag --start-x ... --start-y ... --end-x ... --end-y ...
常见示例:
gui_controller.py screenshot fullgui_controller.py screenshot active-windowgui_controller.py mouse move --x 500 --y 300gui_controller.py mouse click --x 500 --y 300gui_controller.py mouse right-click --x 500 --y 300gui_controller.py mouse double-click --x 500 --y 300gui_controller.py mouse drag --start-x 100 --start-y 200 --end-x 500 --end-y 400gui_controller.py mouse scroll --direction down --clicks 10gui_controller.py keyboard type --text "Hello World"gui_controller.py keyboard press --keys "ctrl+c"gui_controller.py keyboard press --keys "alt+tab"gui_controller.py visual ocrgui_controller.py visual ocr --x 100 --y 100 --width 800 --height 600gui_controller.py visual find --template "button.png"gui_controller.py visual click-image --template "submit.png"gui_controller.py visual pixel --x 200 --y 200gui_controller.py mouse positiongui_controller.py screenshot size安全规则:
处理未知设备
当用户请求控制未直接涵盖的设备或软件时:
1. 检查是否可以作为进程启动: 使用 process_manager.py start "app_name"
2. 检查是否有窗口: 使用 window_manager.py list 查找
3. 截图查看: 使用 gui_controller.py screenshot full 查看屏幕内容
4. 使用OCR读取文字: 使用 gui_controller.py visual ocr 从屏幕提取文字
5. 点击图像匹配: 保存模板,然后 gui_controller.py visual click-image --template icon.png
6. 使用鼠标/键盘: gui_controller.py mouse click --x 100 --y 200 直接控制
7. 检查是否有API: 使用 iot_controller.py http 交互
8. 检查是否USB连接: 使用 hardware_controller.py usb list 然后 serial_comm.py list
9. 建议替代方案: 如果以上都不行,解释限制并建议自定义脚本
快速参考
详细命令语法,阅读 references/command_reference.md。