LINUX.ORG.RU

Как по имени узнать расположение в /sys/bus/usb/devices?

 ,


0

1
sudo echo 'auto' > '/sys/bus/usb/devices/3-4.4/power/control'

Как узнать это самое 3-4.4 по имени устройства программно, чтобы в скрипте это использовать?

lsusb  |grep -i tempot
Bus 003 Device 006: ID 22e1:e208 TEMPOTEC TempoTec HD USB AUDIO
★★★

Видишь bus 003 device 006?

Вот например у меня: Bus 004 Device 002: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port

004 + 002 = 4-2

/sys/devices/pci0000:00/0000:00:12.1/usb4/4-2

idVendor = 067b и idProduct = 2303 в этом каталоге

А вот эти /sys/bus/usb/devices они всё равно туда в PCI ссылаются

Уточни, что подразумевается под по имени? «TEMPOTEC TempoTec HD USB AUDIO» - вот это?

I-Love-Microsoft ★★★★★
()

Как правильно советуют, завязывайся на эти 22e1:e208

/sys/bus/usb/devices тут ссылки на каталоги с устройствами. В моем случае я захожу в каждый подкаталог пока не нахожу в /sys/bus/usb/devices/4-2 файлы idVendor и idProduct которые мне нужны

Но мне кажется предложенный метод - шлак. Может быть в коде утилиты lsusb будет более внятный способ где рядом будет лежать и ссылка на устройство

Однако даже sudo lsusb -vvv не показывает что надо, ни даже sudo lsusb -t

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от serg002

22e1:e208 - лучше на это завязываться, потому что может эти имена берутся из какой то таблицы, которая может отличаться. Но вот 22e1:e208 это железное соответствие желаемому устройству

I-Love-Microsoft ★★★★★
()

https://github.com/gregkh/usbutils/blob/master/sysfs.c#L29

Ох, походу даже гениальные хакеры что писали lsusb тоже сделали тупой перебор, подобно тому тупняку что предложил я…

#define USB_MAX_DEPTH 7 и вообще ограничили свою перебираловку уровнями вложенностей )))

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от Jeronimo

Смотри, получить ID не особо сложно:

lsusb |grep -i tempotec | awk '{ print $6 }'

out:

22e1:e208

Но тут есть большая загвоздка. Надо это всё сделать из-под скрипта деплоя. Проблемы нет, если устройство на момент запуска скрипта деплоя присутствует в системе. Тогда мы:

  1. получаем id устройства
  2. подставляем id в ATTR{idProduct}
ACTION==«add», SUBSYSTEM==«usb», TEST==«power/control», ATTR{idVendor}==«ваш_Vid», ATTR{idProduct}==«ваш_Pid», ATTR{power/control}=«auto»
  1. далее это сохраняем в /etc/udev/rules.d/61-tempotec.rules

А вот как быть, если устройство не присутствует на момент запуска в системе?

serg002 ★★★
() автор топика
Ответ на: комментарий от serg002

Так правило сработает, если увидит устройство с этими vid/pid. Нет устройства- нет проблемы. Т.е. оно сработает сразу, как только устройство обнаруживается системой. У меня такое правило для мыши. Использую самописный скрипт энергосбережения в зависимости от подключения зарядки.

Jeronimo ★★
()
Последнее исправление: Jeronimo (всего исправлений: 1)
Ответ на: комментарий от Jeronimo

этими vid/pid

Их еще надо положить в

cat /etc/udev/rules.d/21-tempotec.rules

Т.е сначала их нужно в скрипте узнать, а потом положить в rules. Если на момент запуска скрипта деплоя этого устройства не будет в системе, как ты узнаешь его vid/pid?

Поэтому нужно(скорей всего) в скрипте деплоя определять название девайса ака tempotec sonata bhd, потом в 21-tempotec.rules добавлять общий класс устройства usb и запускать скрипт

/usr/local/bin/udev-tempotec.sh

в котором он будет делать lsusb |grep -i tempotec. Если он есть - брать его vid/pid и устанавливать параметр и/или делать какое-то действие

Вообще есть еще одна хотелка: хочу, чтобы на этот девайс питание отключалось при standby и включалось по выводу из standby

serg002 ★★★
() автор топика
Последнее исправление: serg002 (всего исправлений: 2)