Как я могу выключить питание к USB-порту?

Я использую Lubuntu 16.04. У меня есть аналоговые динамики, которые берут их питание от гнезда USB. Я хотел бы, чтобы они выключили, когда я выключаю ПК и приостанавливаю его. Я думал, что это будет довольно легко, но я провел много времени, гугля и все еще не имею решения.

Мой лучший выбор, кажется, uhubctl, поскольку это, кажется, работает на моих аппаратных средствах (автор предупреждает, что не все hubcontrollers поддерживают функциональность). Я верю этому, потому что я успешно выключил клавиатуру USB.

Таким образом, теперь я должен знать, что указать для выключения питание на гнезде USB для динамиков. Это обязано взять некоторые догадки, так как они не реальные USB-устройства и не покажут в lsusb. Смотря на заднюю панель и руководство материнской платы, я вижу, что группа из четырех сокетов, где динамики включаются, описана как порты USB 2.0 7-10. Моя мышь и веб-камера включаются в ту же группу сокетов.

Выполнение uhubctl без аргументов дает:

Current status for hub 2-1 [8087:8002, USB 2.00, 8 ports]
Port 1: 0100 power
Port 2: 0100 power
Port 3: 0100 power
Port 4: 0100 power
Port 5: 0100 power
Port 6: 0100 power
Port 7: 0100 power
Port 8: 0100 power
Current status for hub 1-1 [8087:800a, USB 2.00, 6 ports]
Port 1: 0100 power
Port 2: 0100 power
Port 3: 0100 power
Port 4: 0100 power
Port 5: 0100 power
Port 6: 0100 power
Current status for hub 4-5 [174c:3074 ASUS TEK. ASM107x, USB 3.00, 4 ports]
Port 1: 02a0 power 5gbps Rx.Detect
Port 2: 02a0 power 5gbps Rx.Detect
Port 3: 02a0 power 5gbps Rx.Detect
Port 4: 02a0 power 5gbps Rx.Detect
Current status for hub 3-9 [174c:2074 ASUS TEK. ASM107x, USB 2.10, 4 ports]
Port 1: 0100 power
Port 2: 0303 power lowspeed enable connect [047d:2043 NOVATEK Kensington U+P Keyboard]
Port 3: 0100 power
Port 4: 0100 power

Это не слишком полезно. Моя клавиатура обнаруживается, но все мои другие USB-устройства - мышь, Seagate жесткий диск, веб-камера - не упоминается.

Я попробовал различные команды:

uhubctl -a off -p 2 -l 3-9     #Turns off keyboard as expected
uhubctl -a off -p 2 -l 4-5     #ALSO turns off keyboard. Why ?

uhubctl -a off -p 12345678 -l 2-1 #Does not turn anything off
uhubctl -a off -p 123456   -l 1-1 #Does not turn anything off
uhubctl -a off -p 134      -l 4-5 #Does not turn anything off.

Таким образом, я могу выключить клавиатуру. Никакое другое USB-устройство не перечислено (хотя они там), и они не могут быть выключены.

Я понятия не имею, что имена концентратора представляют т.е. 2-1, 1-1, 4-5, 3-9. И при этом, кажется, нет никакого способа вывести имена концентратора из lsusb.

lsusb дает:

Bus 002 Device 002: ID 8087:8002 Intel Corp. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 008 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 007 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:800a Intel Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 003: ID 174c:3074 ASMedia Technology Inc. ASM1074 SuperSpeed hub
Bus 004 Device 002: ID 0bc2:ab24 Seagate RSS LLC 
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 007: ID 047d:2043 Kensington 
Bus 003 Device 003: ID 174c:2074 ASMedia Technology Inc. ASM1074 High-Speed hub
Bus 003 Device 002: ID 0f62:1001 Acrox Technologies Co., Ltd Targus Mini Trackball Optical Mouse
Bus 003 Device 006: ID 046d:0994 Logitech, Inc. QuickCam Orbit/Sphere AF
Bus 003 Device 004: ID 0b05:180a ASUSTek Computer, Inc. 
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

lsusb-t дает:

/:  Bus 08.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 10000M
/:  Bus 07.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 10000M
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=uas, 5000M
    |__ Port 5: Dev 3, If 0, Class=Hub, Driver=hub/4p, 5000M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/15p, 480M
    |__ Port 5: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 9: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 2: Dev 7, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 2: Dev 7, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 10: Dev 4, If 1, Class=Vendor Specific Class, Driver=btusb, 12M
    |__ Port 10: Dev 4, If 2, Class=Vendor Specific Class, Driver=btusb, 12M
    |__ Port 10: Dev 4, If 0, Class=Vendor Specific Class, Driver=btusb, 12M
    |__ Port 10: Dev 4, If 3, Class=Application Specific Interface, Driver=, 12M
    |__ Port 14: Dev 6, If 0, Class=Video, Driver=uvcvideo, 480M
    |__ Port 14: Dev 6, If 1, Class=Video, Driver=uvcvideo, 480M
    |__ Port 14: Dev 6, If 2, Class=Audio, Driver=snd-usb-audio, 480M
    |__ Port 14: Dev 6, If 3, Class=Audio, Driver=snd-usb-audio, 480M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M

Я вижу, что существуют некоторые отношения между именами концентратора и шиной/номерами портов, но я не могу придумать правило.

Я заметил от lsusb, что устройства USB 2.0, кажется, используют контроллер Intel, тогда как USB 3.0 и 2,1 устройства, кажется, используют контроллер ASUS. Я задался вопросом, не могли ли процессоры Intel поддерживать управление питанием, таким образом, я судил динамики в сокете USB 2.1, который я могу выключить, когда это присоединено к клавиатуре. Никакая удача.

У кого-либо есть какая-либо идея, почему uhubctrl ведет себя, как это делает?

Возможно, uhubctl является отвлекающим маневром и не собирается работать. Я знаю, что существуют другие способы переключить питание в Ubuntu, но они, кажется, зависят от способности определить каталог, который представляет гнездо USB. Это я понятия не имею, как сделать.

3
задан 27 April 2018 в 22:34

1 ответ

  • uhubctl использует тот же метод обращения для USB-устройств как ядро Linux: b-x.y.z, где b число Шины USB, затем x, y, z номера портов цепочки концентратора, начинающей с корневого концентратора USB для данной шины. Это обращение полустабильно - оно не изменится, если Вы отключите и включите USB-устройства назад в тот же физический порт (порты).
  • Для ответа на второй вопрос я должен заключить это в кавычки из uhubctl README:

    Если у Вас будет совместимый концентратор USB 3.0, подключенный к порту восходящего направления USB3, то он будет обнаружен как 2 независимых виртуальных концентратора: USB2 и USB3 и Ваши USB-устройства будут подключены к USB2 или виртуальному концентратору USB3 в зависимости от их возможностей и скорости соединения. Для управления питанием для таких концентраторов необходимо повернуться прочь/на, включают и USB2 и виртуальные концентраторы USB3 для питания от/на изменений для вступления в силу. uhubctl попытается сделать это автоматически (если Вы не отключите это поведение с опцией-e).

  • И наконец, uhubctl только перечислит концентраторы USB, которые утверждают, что поддерживали PPPS (переключение питания на порт). Однако существуют концентраторы, которые требуют поддержки, но действительно не работают (переключающаяся схема является физически недостающей). Я веду список всех концентраторов, которые, как известно, работают наверняка.

Раскрытие: Я - uhubctl автор :) Не стесняйтесь к нерешенным вопросам против uhubctl здесь.

4
ответ дан 1 December 2019 в 15:50

Другие вопросы по тегам:

Похожие вопросы: