Necesito obtener el título del dispositivo USB conectado. Puedo hacer eso con lsusb
.
udev permite algunas sustituciones cuando escribo reglas: por ejemplo, podemos usar $kernel
para obtener el nombre del dispositivo o $devpath
para obtener la ruta al dispositivo.
Pero el problema es que lsusb
devuelve una cadena así:
Bus 005 Device 032: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Pero el devpath de udev es:
/devices/pci0000:00/0000:00:1d.0/usb5/5-2
El número de bus es el mismo ( 5
), pero los números son diferentes: Device 032
parece ser un número lógico (cuando vuelvo a conectar el dispositivo, este número aumenta) y 2
parece ser un número de dispositivo físico.
Entonces udev devuelve un número físico, y necesito obtener un número lógico. Entonces, puedo recuperar datos como este:lsusb -D /dev/bus/usb/005/032
Entonces, ¿cómo puedo obtener el número de dispositivo lógico 032
por ruta física como /devices/pci0000:00/0000:00:1d.0/usb5/5-2
?
udev
vs.lsusb
ysys/devices/..
vs./dev/bus/usb/..
y, a juzgar por su respuesta, parece saberlo :) ¿Quizás pueda arrojar algo de luz sobre estas dos preguntas? askubuntu.com/questions/342061/power-on-off-usb-ports y askubuntu.com/questions/498950/…/sys/devices/...
vs/dev/...
:/sys
está poblado por el núcleo, es una representación de la jerarquía real de los dispositivos del núcleo. Udev es un demonio de espacio de usuario que maneja la/sys
jerarquía y las poblaciones/dev/...
(teniendo en cuenta las reglas). Entonces, udev es completamente responsable de los/dev
contenidos.La respuesta aceptada realmente no me ayudó mucho. Finalmente descubrí una forma probando idProduct e idVendor si existen. Aquí hay un script de shell
Esto es lo que obtengo en mi sistema.
Aquí puedo ver que, por ejemplo
0a5c:21e6
, que es un dispositivo bluetooth, se asigna a2-1.4
.Para una mayor conveniencia, podría definir esto como una función en su shell, algo así como
fuente