You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu Server 21.10 插入USB设备时自动执行Shell脚本失败求助

问题排查与解决步骤

核心问题点

  • 通配符使用错误:udev规则里匹配任意值使用单个*即可,你写的****额外加了反引号和多余的星号,属于无效规则,完全无法匹配设备
  • 规则文件选择错误:/etc/udev/rules.d/70-snap.snapd.rules是snap服务自动管理的文件,后续snap更新时会被覆盖,不建议用来写自定义规则
  • 脚本没有使用绝对路径:udev的执行环境没有完整的系统PATH变量,直接写netplan命令会因为找不到执行文件而失败
  • 规则生效方式不完整:只重启udev服务不会重新触发已有设备的规则加载,需要额外执行重载规则命令

步骤1:修正脚本内容

修改/home/update.sh内容如下,增加日志便于排查,同时补全命令绝对路径:

#!/bin/sh
# 写入执行日志
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 检测到USB插入,执行netplan apply" >> /var/log/usb-trigger.log
# 补全netplan绝对路径,可执行`which netplan`确认你环境的实际路径
/usr/sbin/netplan apply

确认脚本可执行权限,之前已经执行过chmod +x /home/update.sh无需重复操作。

步骤2:新建独立udev规则文件

先将之前添加到70-snap.snapd.rules里的自定义规则删除,恢复原文件内容,再新建/etc/udev/rules.d/99-usb-trigger.rules文件,写入以下规则:

# 匹配所有USB设备插入事件,执行指定脚本
ACTION=="add", SUBSYSTEM=="usb", RUN+="/home/update.sh"

如果你需要限定只匹配特定USB设备,可以查询对应设备的idVendor和idProduct后,添加对应条件:

ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="xxxx", RUN+="/home/update.sh"

步骤3:重载udev规则使其生效

执行以下命令重载规则,无需重启系统:

sudo udevadm control --reload-rules
sudo udevadm trigger

步骤4:测试验证

插入USB设备后,查看/var/log/usb-trigger.log是否有对应的日志记录,确认netplan apply是否正常执行。如果没有日志生成,可以查看/var/log/syslog中udev相关的报错信息进一步排查。
另外你日志里出现的蓝牙规则报错是树莓派Ubuntu 21.10的已知问题,和本次USB规则不生效无关,不需要处理。

内容的提问来源于stack exchange,提问作者Henri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:39:00