web-dev-qa-db-fra.com

La règle udev semble ne pas fonctionner correctement pour forcer le périphérique USB à se placer

J'ai créé une règle udev pour forcer mes périphériques usb dans des dossiers fixes à /dev/ (l'une est une webcam dans /dev/video1 et l'autre est un framegrabber dans /dev/video0). faites ceci parce que, par défaut, j'attache la webcam après le framegrabber à mon ordinateur (jusqu'ici tout va bien) mais si je redémarre le système (tant qu'ils sont encore connectés), la webcam sera assignée à /dev/video0 et au framegrabber. à /dev/video1, ce qui entraînera l'échec des applications qui tentent de les utiliser en tant que ressources d'enregistrement (pipeline gstreamer, dans ce cas)

Je mets le 25-video-devices.rules dans /etc/udev/rules.d/ et je recharge les règles udev. Je redémarre même le service udev mais après le redémarrage du système, le résultat est toujours le même ...

SUBSYSTEMS=="usb", ATTRS{idVendor}=="5555", ATTRS{idProduct}=="3500", NAME:="video0", OPTIONS:="link_priority=100"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="0843", NAME:="video1"

Il semble que la règle udev ne fonctionne pas correctement ou que je fais quelque chose de mal ou que je manque quelque chose?

Pouvez-vous s'il vous plaît m'aider avec ça?

p.s: J'ai les identifiants vendeur et produit en utilisant lsusb

2
Sina Sh

De man 7 udev (souligné par moi):

Le noyau n'assigne généralement que des noms de périphériques imprévisibles en fonction de l'ordre de découverte. […] Le nom d'un nœud de périphérique ne peut pas être modifié par udev, seuls des liens symboliques supplémentaires peuvent être créés.

En d’autres termes, je pense que vous ne pourrez pas utiliser _/dev/video0_ ou _/dev/video1_ de manière fiable. Au lieu de cela, vous devez créer et utiliser des liens symboliques stables. Quelque chose comme ce qui suit pourrait fonctionner à la place:

_KERNEL=="video*", SUBSYSTEMS=="usb", ATTRS{idVendor}=="5555", ATTRS{idProduct}=="3500", SYMLINK+="myframegrabber"
KERNEL=="video*", SUBSYSTEMS=="usb", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="0843", SYMLINK+="mywebcam"
_

Vous utiliseriez ensuite _/dev/mywebcam_ et _/dev/myframegrabber_ dans vos applications.

En passant, comme récemment mentionné dans ne réponse similaire :

Il est possible que video4linux vous ait déjà fourni des noms de périphérique stables. Vous souhaiterez peut-être vérifier les répertoires _/dev/v4l/by-id/_ et _/dev/v4l/by-path/_ pour cela.

3
Chriki