Я использую Lubuntu 16.04. У меня есть аналоговые динамики, которые берут свое питание от USB-разъема. Я бы хотел, чтобы они отключились, когда я выключил компьютер и приостановил его. Я подумал, что это будет довольно легко, но я потратил много времени на поиски в Google и до сих пор не имею решения.
Лучше всего сделать ставку на uhubctl, поскольку это, похоже, работает на моем оборудовании (автор предупреждает, что не все хаб-контроллеры поддерживают функциональность). Я верю в это, потому что я успешно отключил 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 HDD, веб-камера - не упоминаются.
Я пробовал различные команды:
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 :) Не стесняйтесь открывать проблемы против uhubctl здесь.
Это старый ответ от октября 2016 года, который по-прежнему актуальен в апреле 2018 года для Ubuntu 16.04 LTS: как отключить питание USB к моей мыши, когда я приостанавливаю ноутбук?
Текущий (d2)
Создайте сценарий (см. любое имя, которое вы хотите) в каталоге /etc/pm/sleep.d/ и поместите в него следующее:
#!/bin/bash
ZeroBUS=$(lsusb | grep 174c:2074 | cut -c 5-7 )
# Strip leading zeros
BUS=$(echo $ZeroBUS | sed 's/^0*//')
# Build "usbX" usb number
USB=usb$BUS
case $1 in
suspend|suspend_hybrid|hibernate)
echo "Powering off: " $USB
echo $USB | sudo tee /sys/bus/usb/drivers/usb/unbind
;;
resume|thaw)
# No need to do anything here, kernel unsuspends USB devices
# Show how to power on for interest sake but since device is
# powered off the usb number will be blank.
echo "Powering on: " $USB
echo $USB | sudo tee /sys/bus/usb/drivers/usb/bind
;;
esac
Отметьте файл как исполняемый с помощью sudo chmod +x file_name, где «имя_файла» - это имя, которое вы выбрали.
Это решение отключает весь USB-концентратор, который в моем случае означает телефон, беспроводную мышь, беспроводную клавиатуру и т. д. При вызове сценария из командной строки необходимо ввести пароль sudo , Надеемся, что при вызове из systemd sudo полномочия наследуются. Я не мог проверить это, потому что у меня нет проводной мыши. Поэтому для sudo-мощностей может потребоваться дополнительное уточнение.
Питание не физически отключается, когда BIOS обеспечивает постоянный источник питания 5 В, а устройствам на шине говорят, что они отключены. В моем случае беспроводная клавиатура и мышь перестали работать и вынуждены были прибегать к клавиатуре ноутбука и сенсорной панели, чтобы вернуть питание.
Вы можете проверить это вручную, вызвав скрипт и передав параметры «suspend». Передача параметра «возобновление» ничего не может сделать, потому что устройство выключено, у него нет идентификатора устройства, чтобы включить его.
Извините за «копировать и вставить» с незначительной ревизией для изменения имени устройства, но я сосредоточен на написании сценариев для тестирования Ubuntu 18.04 в этот период занятости.
Раскрытие информации: Я автор uhubctl :) Не стесняйтесь открывать проблемы против uhubctl здесь.
Это старый ответ от октября 2016 года, который по-прежнему актуальен в апреле 2018 года для Ubuntu 16.04 LTS: как отключить питание USB к моей мыши, когда я приостанавливаю ноутбук?
Текущий (d2)
Создайте сценарий (см. любое имя, которое вы хотите) в каталоге /etc/pm/sleep.d/ и поместите в него следующее:
#!/bin/bash
ZeroBUS=$(lsusb | grep 174c:2074 | cut -c 5-7 )
# Strip leading zeros
BUS=$(echo $ZeroBUS | sed 's/^0*//')
# Build "usbX" usb number
USB=usb$BUS
case $1 in
suspend|suspend_hybrid|hibernate)
echo "Powering off: " $USB
echo $USB | sudo tee /sys/bus/usb/drivers/usb/unbind
;;
resume|thaw)
# No need to do anything here, kernel unsuspends USB devices
# Show how to power on for interest sake but since device is
# powered off the usb number will be blank.
echo "Powering on: " $USB
echo $USB | sudo tee /sys/bus/usb/drivers/usb/bind
;;
esac
Отметьте файл как исполняемый с помощью sudo chmod +x file_name, где «имя_файла» - это имя, которое вы выбрали.
Это решение отключает весь USB-концентратор, который в моем случае означает телефон, беспроводную мышь, беспроводную клавиатуру и т. д. При вызове сценария из командной строки необходимо ввести пароль sudo , Надеемся, что при вызове из systemd sudo полномочия наследуются. Я не мог проверить это, потому что у меня нет проводной мыши. Поэтому для sudo-мощностей может потребоваться дополнительное уточнение.
Питание не физически отключается, когда BIOS обеспечивает постоянный источник питания 5 В, а устройствам на шине говорят, что они отключены. В моем случае беспроводная клавиатура и мышь перестали работать и вынуждены были прибегать к клавиатуре ноутбука и сенсорной панели, чтобы вернуть питание.
Вы можете проверить это вручную, вызвав скрипт и передав параметры «suspend». Передача параметра «возобновление» ничего не может сделать, потому что устройство выключено, у него нет идентификатора устройства, чтобы включить его.
Извините за «копировать и вставить» с незначительной ревизией для изменения имени устройства, но я сосредоточен на написании сценариев для тестирования Ubuntu 18.04 в этот период занятости.