寻求Ubuntu服务器上临时停止与恢复USB绘图板监听的Bash命令
嘿,这个问题太贴合实际场景了——既要处理文件IO时不让绘图板的输入干扰,又不想杀掉绘图进程,还要避免物理拔插的麻烦对吧?我给你两个在Ubuntu上可行的Bash方案,完美匹配你的Wacom CTH-470设备:
方案一:内核原生的Sysfs设备授权控制(无需额外安装软件)
这个方法直接通过内核的Sysfs接口临时禁用设备的USB授权,相当于让系统暂时“忽略”它,恢复后又能正常工作,不需要重新枚举设备。
操作步骤:
先定位你的绘图板对应的Sysfs路径
根据你给出的lsusb输出(Bus 001 Device 005),可以用下面的命令自动找到设备路径:DEVICE_PATH=$(find /sys/bus/usb/devices -path "*1-*" -exec grep -l "005" {} \; | head -1)(如果多次运行输出不一样,你可以手动跑
ls /sys/bus/usb/devices/,找对应1-xx格式的目录,里面会有idVendor和idProduct文件,内容对应056a和00de)临时禁用绘图板
执行这条命令,系统就会停止监听该USB设备:echo 0 | sudo tee $DEVICE_PATH/authorized恢复绘图板监听
文件IO操作完成后,用这条命令恢复:echo 1 | sudo tee $DEVICE_PATH/authorized
封装成便捷函数:
你可以把这些命令写到你的bash脚本里,做成函数方便调用:
# 禁用Wacom绘图板 disable_wacom() { # 提前确认DEVICE_PATH是否正确,这里自动匹配你的设备信息 DEVICE_PATH=$(find /sys/bus/usb/devices -path "*1-*" -exec grep -l "005" {} \; | head -1) echo 0 | sudo tee $DEVICE_PATH/authorized > /dev/null echo "Wacom tablet temporarily disabled" } # 启用Wacom绘图板 enable_wacom() { DEVICE_PATH=$(find /sys/bus/usb/devices -path "*1-*" -exec grep -l "005" {} \; | head -1) echo 1 | sudo tee $DEVICE_PATH/authorized > /dev/null echo "Wacom tablet re-enabled" }
之后在你的文件操作脚本里,只需要先调用disable_wacom,执行完保存/新建文件的逻辑后,再调用enable_wacom就好。
方案二:用uhubctl模拟物理拔插(完全切断端口电源)
如果上面的方法对你的绘图程序兼容性不好,你可以试试uhubctl——这个工具能控制USB集线器的端口电源,效果和物理拔插几乎一样,设备会重新枚举,适合需要彻底断开再连接的场景。
操作步骤:
安装uhubctl
sudo apt update && sudo apt install -y uhubctl找到绘图板所在的集线器和端口
运行这条命令列出所有USB集线器和连接的设备:uhubctl你会看到类似这样的输出(找标注Wacom设备的那一行,对应前面的hub编号和端口号,比如
hub 1 port 3)禁用端口(切断电源)
假设你的绘图板在hub 1的port 3上,执行:sudo uhubctl -l 1 -p 3 -a off启用端口(恢复电源)
文件操作完成后,恢复端口:sudo uhubctl -l 1 -p 3 -a on
注意事项:
- 两种方法都需要
sudo权限,所以你的Arduino触发的脚本要确保能以root权限运行,或者给相关命令配置sudo免密(可以通过visudo添加规则) - 建议先手动测试命令,确认绘图程序在禁用设备后停止记录,恢复后正常工作,再集成到自动化脚本里
备注:内容来源于stack exchange,提问作者j0h

