#!/usr/bin/env bash version="0.1" function usage() { echo "Usage : $0 [options] [:] Reset usb device identified by idVendor:idProduct. Options: -h,--help Display this message -v,--version Display script version" } function check_ids() { local syspath=$1 [[ -n $idVendor && "$idVendor" != $(cat $syspath/idVendor 2>/dev/null) ]] && return 1 [[ -n $idProduct && "$idProduct" != $(cat $syspath/idProduct 2>/dev/null) ]] && return 1 return 0 } function main() { for syspath in /sys/bus/usb/devices/*; do if ! check_ids $syspath; then continue fi echo "Resetting '$syspath'" echo 0 | sudo tee $syspath/authorized >/dev/null echo 1 | sudo tee $syspath/authorized >/dev/null done } # Parse arguments declare -a args while [[ $# -gt 0 ]]; do opt="$1" case $opt in -h|--help) usage; exit 0 ;; -v|--version) echo "$0 -- Version $version"; exit 0 ;; -* ) echo -e "\n Option does not exist : $opt\n" usage; exit 1 ;; *) args+=("$opt"); shift ;; esac done if [[ ${#args[@]} != 1 ]]; then usage exit 1 fi if [[ ${args[0]} =~ ([^:]+):([^:]+) ]]; then idVendor=${BASH_REMATCH[1]} idProduct=${BASH_REMATCH[2]} else idProduct=${args[0]} fi sudo -v main