Preciso obter o título do dispositivo USB conectado. Eu posso fazer isso com lsusb
.
O udev permite algumas substituições quando escrevo regras: digamos, podemos usar $kernel
para obter o nome do dispositivo ou $devpath
para encontrar o caminho para o dispositivo.
Mas o problema é que lsusb
retorna uma string assim:
Bus 005 Device 032: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Mas o devpath do udev é:
/devices/pci0000:00/0000:00:1d.0/usb5/5-2
O número do barramento é o mesmo ( 5
), mas os números são diferentes: Device 032
parece ser um número lógico (quando reconecto o dispositivo, esse número aumenta) e 2
parece ser o número físico do dispositivo.
Então o udev retorna o número físico e preciso obter o número lógico. Então, eu posso recuperar dados como este:lsusb -D /dev/bus/usb/005/032
Então, como posso obter o número do dispositivo lógico 032
por caminho físico /devices/pci0000:00/0000:00:1d.0/usb5/5-2
?
udev
vs.lsusb
esys/devices/..
vs./dev/bus/usb/..
e, a julgar pela sua resposta, você parece ter conhecimento :) Talvez você possa lançar alguma luz sobre essas duas perguntas? askubuntu.com/questions/342061/power-on-off-usb-ports e askubuntu.com/questions/498950/.../sys/devices/...
vs/dev/...
:/sys
é preenchido pelo kernel, é uma representação da hierarquia real dos dispositivos do kernel. O Udev é um daemon de espaço do usuário que lida com a/sys
hierarquia e preenche/dev/...
(levando em conta as regras). Portanto, o udev é completamente responsável pelo/dev
conteúdo.A resposta aceita realmente não me ajudou muito. Finalmente descobri uma maneira de investigar o idProduct e o idVendor, se eles existirem. Aqui está um script de shell
Aqui está o que recebo no meu sistema.
Aqui posso ver que, por exemplo
0a5c:21e6
, que é um dispositivo bluetooth, mapeia para2-1.4
.Para uma conveniência ainda maior, você pode definir isso como uma função em seu shell, algo como
fonte