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

如何创建udev规则以在插入USB存储设备时运行脚本?

如何通过udev规则实现插入USB存储设备时自动运行脚本

步骤1:准备可执行脚本

先写好要运行的Shell或Python脚本,确保赋予可执行权限。

示例Shell脚本

创建/usr/local/bin/usb-trigger.sh:

#!/bin/bash
# 脚本逻辑示例:记录USB插入事件到日志
echo "USB存储设备插入,时间:$(date)" >> /var/log/usb-action.log

示例Python脚本

创建/usr/local/bin/usb-trigger.py:

#!/usr/bin/env python3
import datetime

with open('/var/log/usb-action.log', 'a') as log_file:
    log_file.write(f"USB存储设备插入,时间:{datetime.datetime.now()}\n")

添加可执行权限:

sudo chmod +x /usr/local/bin/usb-trigger.sh
# 若用Python脚本则执行:
sudo chmod +x /usr/local/bin/usb-trigger.py

步骤2:创建udev规则文件

在/etc/udev/rules.d/目录下新建规则文件(文件名前缀数字决定执行优先级,数字越小优先级越高),比如99-usb-auto-run.rules:

sudo nano /etc/udev/rules.d/99-usb-auto-run.rules

基础规则(匹配所有USB存储设备)

添加以下内容:

# 匹配USB存储块设备插入事件
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd*[!0-9]", RUN+="/usr/local/bin/usb-trigger.sh"

精准匹配特定USB设备(可选)

如果只想触发特定设备,先通过lsusb查看设备的厂商ID和产品ID,再修改规则:

# 替换xxxx/yyyy为你的设备ID
ACTION=="add", SUBSYSTEM=="block", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="yyyy", RUN+="/usr/local/bin/usb-trigger.sh"

规则参数说明

  • ACTION=="add":仅在设备插入(添加)时触发
  • SUBSYSTEM=="block":匹配块设备(存储设备属于此类)
  • KERNEL=="sd*[!0-9]":匹配主设备节点(如sdb,而非分区sdb1),若要匹配分区则改为KERNEL=="sd*[0-9]"
  • RUN+="/path/to/script":指定要执行的脚本路径,RUN+表示追加执行,不会覆盖其他规则的命令

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

修改规则后,执行以下命令重载:

sudo udevadm control --reload-rules
sudo udevadm trigger

关键注意事项

  • udev执行脚本时环境变量极少,脚本内所有路径务必用绝对路径(比如用/usr/bin/python3而非python3)
  • 避免在脚本中执行长时间任务,udev会等待脚本完成,可能导致设备挂载延迟
  • 若脚本需要访问桌面资源(如X11),需通过su - 用户名 -c "命令"切换到对应用户执行
  • 可用udevadm monitor命令实时查看udev事件,调试规则是否正常触发

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:00:59