Я использую 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. Это я понятия не имею, как сделать.
uhubctl
использует тот же метод обращения для USB-устройств как ядро Linux: b-x.y.z
, где b
число Шины USB, затем x
, y
, z
номера портов цепочки концентратора, начинающей с корневого концентратора USB для данной шины. Это обращение полустабильно - оно не изменится, если Вы отключите и включите USB-устройства назад в тот же физический порт (порты).Если у Вас будет совместимый концентратор USB 3.0, подключенный к порту восходящего направления USB3, то он будет обнаружен как 2 независимых виртуальных концентратора: USB2 и USB3 и Ваши USB-устройства будут подключены к USB2 или виртуальному концентратору USB3 в зависимости от их возможностей и скорости соединения. Для управления питанием для таких концентраторов необходимо повернуться прочь/на, включают и USB2 и виртуальные концентраторы USB3 для питания от/на изменений для вступления в силу. uhubctl попытается сделать это автоматически (если Вы не отключите это поведение с опцией-e).
Раскрытие: Я - uhubctl автор :) Не стесняйтесь к нерешенным вопросам против uhubctl здесь.