Это пример с беспроводной мышью Logitech USB под Linux.
Прочитайте соответствующий параграф «/ proc / bus / usb / devices» в соответствии с вашими устройствами «Vendor» (идентификатор поставщика) и «ProdID» (идентификатор продукта)
или «Производитель» и «Продукт» (все эти значения постоянны для каждого устройства).
cat /proc/bus/usb/devices
(первый абзац с включенным устройством, второй с выключенным, но подключенным тем же устройством)
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 4 Spd=1.5 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=046d ProdID=c50e Rev=25.10
S: Manufacturer=Logitech
S: Product=USB RECEIVER
C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr= 70mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=usbhid
E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=10ms
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 4 Spd=1.5 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=046d ProdID=c50e Rev=25.10
S: Manufacturer=Logitech
S: Product=USB RECEIVER
C: #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr= 70mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=
E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=10ms
Вам нужны две переменные здесь.
Они расположены в строке «T:» (первая строка абзаца).
Эти переменные:
Bus (Bus = 01 в этом примере)
Cnt (Cnt = 01 в этом примере)
Вам нужно будет добавить «1» (арифметическое) к «Cnt», чтобы получить ранг
Rank = Cnt + 1 (это математическая функция, в данном примере Rank = 2)
Итак, устройство, которое вы ищете, это следующая строка:
Bus-Rank (это не математическая функция, это строка, 1-2 в этом примере)
Помните также строку "C: ".
Содержит информацию о мощности (токе) устройства.
Если в «C: » есть звездочка (как в нашем 1-м примере), то на устройство подается питание.
Если нет («C:»), то устройство «более или менее» выключено, что означает, что при подключении устройства всегда есть небольшой ток, иначе мы не сможем прочитать всю эту информацию.
В конце концов, помните линию «Я:».
Если поле «I: *» содержит звездочку (как в нашем 1-м примере), то есть ввод с устройства или на устройство, я не уверен, может быть, оба.
Поле последней строки содержит используемый драйвер ("usbhid" в нашем первом примере)
Мы готовы к включению питания нашего устройства:
выключить
echo -n "Bus-Rank" > /sys/bus/usb/drivers/usb/unbind
echo -n "1-2" > /sys/bus/usb/drivers/usb/unbind (in our example)
включите
echo -n "Bus-Rank" > /sys/bus/usb/drivers/usb/bind
echo -n "1-2" > /sys/bus/usb/drivers/usb/bind (in our example)
Ниже приведен простой bash-скрипт «USBMS» (USB Mouse Switch), который управляет питанием устройства в нашем примере выше.
Он не очень динамичен и использует константы «Продукт» и «Производитель», чтобы найти соответствующий абзац «/ proc / bus / usb / devices»
Вместо этого вы должны использовать «Vendor» (идентификатор поставщика) и «ProdID» (идентификатор продукта).
Он также проверяет состояние питания устройства.
Запуск от имени суперпользователя.
Команда: ./USBMS action
параметр: action = "off" или "0" для выключения - action = "on" или "1" для включения (без кавычек)
#!/bin/bash
USBmouseProduct="USB RECEIVER"
USBmouseManufacturer="Logitech"
signal=$1
nr3=$(awk '/Product='"$USBmouseProduct"'/ {print NR}' /proc/bus/usb/devices)
nr3=$(expr $nr3 + 0)
nr2=$(awk '/Manufacturer='"$USBmouseManufacturer"'/ {print NR}' /proc/bus/usb/devices)
nr2=$(expr $nr2 + 0)
nr1=$(expr $nr2 - 3)
nr4=$(expr $nr3 + 1)
nrdiff=$(expr $nr3 - $nr2)
[ $nr3 != 0 -a $nr2 != 0 -a $nrdiff = 1 ] && (
usbmbus0=$(awk 'NR=='$nr1' {print $2}' /proc/bus/usb/devices | awk -F= '{print $2}')
usbmbus=$(expr $usbmbus0 + 0)
usbmdev=$(awk 'NR=='$nr1' {print $8}' /proc/bus/usb/devices)
usbmrank=$(awk 'NR=='$nr1' {print $5}' /proc/bus/usb/devices | awk -F= '{print $2}')
usbmrank=$(expr $usbmrank + 1)
usbmbusrank="$usbmbus""-""$usbmrank"
usbmpower=$(awk 'NR=='$nr4' {if ( $1=="C:" ) {print 0}; if ( $1=="C:*" ) {print 1}}' /proc/bus/usb/devices)
case $signal in
off|0)
[ $usbmpower = 1 ] && echo -n "$usbmbusrank" > /sys/bus/usb/drivers/usb/unbind
;;
on|1)
[ $usbmpower = 0 ] && echo -n "$usbmbusrank" > /sys/bus/usb/drivers/usb/bind
;;
esac
)