--- /dev/null
+#!/usr/bin/env bash
+
+version="0.1"
+
+function usage()
+{
+ echo "Usage : $0 [options] [<idVendor>:]<idProduct>
+
+ 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