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

如何在USB设备接入PC时触发bash脚本并实现设备授权?

USB设备接入自动授权实现方案

一、编写udev规则

udev规则用于监听USB设备接入事件,并触发授权脚本。

  1. 创建规则文件:
    在/etc/udev/rules.d/目录下新建99-usb-authorization.rules文件,内容如下:

    SUBSYSTEM=="usb", ACTION=="add", DEVTYPE=="usb_device", ATTR{authorized}="0", RUN+="/usr/local/bin/usb-auth.sh $idVendor $idProduct $devpath"
    

    规则说明:

    • SUBSYSTEM=="usb":匹配USB子系统设备
    • ACTION=="add":仅在设备接入时触发
    • DEVTYPE=="usb_device":排除USB集线器,仅针对实际USB设备
    • ATTR{authorized}="0":默认禁用设备,防止未授权使用
    • RUN+="/usr/local/bin/usb-auth.sh ...":调用授权脚本,传入厂商ID、产品ID和设备路径
  2. 重新加载udev规则:

    udevadm control --reload-rules && udevadm trigger
    

二、编写bash授权脚本

脚本接收udev传递的设备参数,通过zenity弹窗询问用户授权,并根据选择控制设备权限。

  1. 创建脚本文件:
    在/usr/local/bin/目录下新建usb-auth.sh,内容如下:

    #!/bin/bash
    
    # 接收udev传递的参数
    VENDOR_ID=$1
    PRODUCT_ID=$2
    DEVPATH=$3
    
    # 获取设备制造商和产品名称(从sysfs读取)
    MANUFACTURER=$(cat /sys/bus/usb/devices/$DEVPATH/manufacturer 2>/dev/null || echo "未知")
    PRODUCT=$(cat /sys/bus/usb/devices/$DEVPATH/product 2>/dev/null || echo "未知")
    
    # 获取当前登录用户的X会话信息(确保zenity能正常显示GUI弹窗)
    USER=$(who | grep -E '(:[0-9]+)' | head -n1 | awk '{print $1}')
    DISPLAY=$(who | grep -E '(:[0-9]+)' | head -n1 | awk '{print $NF}')
    XAUTHORITY="/home/$USER/.Xauthority"
    
    # 导出环境变量,供zenity使用
    export DISPLAY
    export XAUTHORITY
    
    # 显示授权弹窗
    sudo -u $USER zenity --question \
        --title="USB设备授权" \
        --text="检测到新USB设备接入:\n\n制造商:$MANUFACTURER\n产品名称:$PRODUCT\n厂商ID:$VENDOR_ID\n产品ID:$PRODUCT_ID\n\n是否授权该设备使用?"
    
    # 根据用户选择设置设备权限
    if [ $? -eq 0 ]; then
        # 用户选择授权:启用设备
        echo 1 > /sys/bus/usb/devices/$DEVPATH/authorized
    else
        # 用户拒绝授权:保持设备禁用
        echo 0 > /sys/bus/usb/devices/$DEVPATH/authorized
    fi
    
  2. 设置脚本可执行权限:

    chmod +x /usr/local/bin/usb-auth.sh
    

三、功能说明

  • 当任何USB设备(U盘、鼠标、键盘等)接入时,udev会立即禁用设备,并触发授权脚本
  • 脚本读取设备信息并通过zenity弹窗展示给用户,询问是否授权
  • 用户点击"是":设备被启用,可正常使用;点击"否":设备保持禁用状态

注意事项

  • 仅适用于带GUI的桌面环境(依赖zenity)
  • 若多用户登录,脚本默认选择第一个登录用户的会话显示弹窗
  • 部分特殊设备可能需要额外配置(如加密存储设备),但基础授权逻辑通用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:20:24