Выключение одного устройства USB... снова
Я знаю, что эта тема обсуждалась много раз, но ни один из ответов не помог мне. Для записи я запускаю Debian.
Сделка: я купил светодиодную лампу с питанием от USB, которая очень проста и даже не имеет переключателя вкл/выкл (он работает и всегда включен). Я хочу, чтобы включить/выключить его через командную строку. Вот что я пробовал:
echo on > /sys/bus/usb/devices/usb1/power/level # turn on
echo suspend > /sys/bus/usb/devices/usb1/power/level # turn off
что я нашел на многих форумах. Поворот "on" работает, но "приостановка" дает
-su: echo: write error: Invalid argument
для каждого usbN. Я также пробовал
echo "0" > "/sys/bus/usb/devices/usbX/power/autosuspend_delay_ms"
который не дает ошибки, но также ничего не делает (опять же, для каждого usbN)
попытка
echo "usb1" > /sys/bus/usb/drivers/usb/unbind
работает только для более "интеллектуальных" устройств, таких как клавиатура, мышь или Wi-Fi-карта Wi-Fi. Я имею в виду, что только отключенные устройства отключены, другие usbN не выдают ошибку, но лампа никогда не гаснет.
содержимое/sys/bus/usb/devices/are
1-0:1.0 1-1:1.0 1-2:1.0 1-2:1.2 2-0:1.0 4-0:1.0 4-1:1.0 6-0:1.0 8-0:1.0 8-2:1.0 usb2 usb4 usb6 usb8
1-1 1-2 1-2:1.1 1-2:1.3 3-0:1.0 4-1 5-0:1.0 7-0:1.0 8-2 usb1 usb3 usb5 usb7
Я пытался сделать
echo device_name > /sys/bus/usb/drivers/usb/unbind
с каждым из них, но реагируют только устройства usbN и N-M, которые имеют вид n-m: x.y yield
tee: /sys/bus/usb/drivers/usb/bind: No such device
(я попытался вставить, например, "1-0: 1.0", "1-0 \: 1.0" и "1-0 \: 1.0", все дали тот же результат).
Последнее, что показано после выполнения
lsusb -t
не изменяется при подключении или отключении лампы.
Любые идеи?
Ответы
Ответ 1
Отключите идентификатор устройства 2-1:
echo '2-1' |sudo tee /sys/bus/usb/drivers/usb/unbind
Включить идентификатор устройства 2-1:
echo '2-1' |sudo tee /sys/bus/usb/drivers/usb/bind
В моем случае использование идентификатора устройства 2-1 контролирует питание на моем USB-накопителе и, как следствие, контролирует свет.
- СОВЕТ. Если они работают для вас в Debian, создайте для них псевдоним, чтобы облегчить вам жизнь позже.
Надеюсь, это поможет,
Су
Ответ 2
Если все, что вы хотите сделать, это reset устройство USB, чтобы исправить его, когда оно попадает в разбитое состояние, тогда использование специальных файлов bind/unbind usbfs может быть немного больно (поскольку идентификаторы устройств могут меняться, и они немного сложно определить, если вы не хотите переустанавливать другие устройства). В этом случае я нашел гораздо проще использовать идентификаторы поставщика и продукта, указанные lsusb
с usb_modeswitch
. Например, если я идентифицирую свой беспроводной адаптер, используя:
$ lsusb
Bus 001 Device 042: ID 7392:7811 Edimax Technology Co., Ltd EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS]
Bus 001 Device 035: ID 0409:005a NEC Corp. HighSpeed Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Я могу использовать reset беспроводной адаптер, используя:
$ sudo usb_modeswitch -v 0x7392 -p 0x7811 --reset-usb
Если у вас несколько устройств с одинаковыми идентификаторами поставщиков и продуктов, то usb_modeswitch предоставляет флаги номера шины и устройства. В приведенном выше примере беспроводного адаптера я добавлю -b 1 -g 42
к флагам.
Ответ 3
Это не будет работать для вашей лампы. Это отключение логически. Это устройство для работы с электропитанием. И ваша лампа просто ничего не делает (