J'ai besoin d'obtenir le titre du périphérique USB connecté. Je peux le faire avec lsusb
.
udev autorise certaines substitutions lorsque j'écris des règles: disons, nous pouvons utiliser $kernel
pour obtenir le nom du périphérique, ou $devpath
pour obtenir le chemin vers le périphérique.
Mais le problème est que lsusb
renvoie une chaîne comme ça:
Bus 005 Device 032: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Mais le devpath d'udev est:
/devices/pci0000:00/0000:00:1d.0/usb5/5-2
Le numéro de bus est le même ( 5
), mais les numéros sont différents: Device 032
semble être un certain nombre logique (lorsque je reconnecte le périphérique, ce nombre augmente), et 2
semble être le numéro du périphérique physique.
Donc, udev renvoie un nombre physique, et j'ai besoin d'obtenir un nombre logique. Ensuite, je peux récupérer des données comme ceci:lsusb -D /dev/bus/usb/005/032
Alors, comment puis-je obtenir le numéro de périphérique logique 032
par un chemin physique comme /devices/pci0000:00/0000:00:1d.0/usb5/5-2
?
udev
vslsusb
etsys/devices/..
vs/dev/bus/usb/..
et à en juger par votre réponse, vous semblez être au courant :) Peut-être pouvez-vous éclairer ces deux questions? askubuntu.com/questions/342061/power-on-off-usb-ports et askubuntu.com/questions/498950/…/sys/devices/...
vs/dev/...
:/sys
est peuplé par le noyau, c'est une représentation de la hiérarchie réelle des périphériques du noyau. Udev est un démon de l'espace utilisateur qui gère la/sys
hiérarchie et remplit/dev/...
(en tenant compte des règles). Ainsi, udev est entièrement responsable du/dev
contenu.La réponse acceptée ne m'a vraiment pas beaucoup aidé. J'ai finalement trouvé un moyen en sondant idProduct et idVendor s'ils existent. Voici un script shell
Voici ce que j'obtiens sur mon système.
Ici, je peux voir que, par exemple
0a5c:21e6
, qui est un appareil Bluetooth, est mappé2-1.4
.Pour encore plus de commodité, vous pouvez définir cela comme une fonction dans votre shell, quelque chose comme
la source