Re: Détection automatique d'une connection USB
Le 13 avril 2018 à 09:15, Pascal Hambourga écrit : > Le 13/04/2018 à 07:31, Danilo Uccelli a écrit : > >> >> Effectivement un des problèmes était bien le manque de slash et j'ai aussi >> bien compris la faille de sécurité que cela crée. >> > > Quel manque de slash ? Tu veux dire qu'il manquerait un / entre /sbin et > sh ? Sûrement pas, car /sbin/sh n'existe pas ; sh est dans /bin. > > J'ai donc donné à root la propriété du script. >> > > Pas suffisant car le propriétaire non root du répertoire contenant le > script peut toujours le supprimer, le renommer et le remplacer par ce qu'il > veut. > > Puis, j'ai réalisé que udev n'était pas la meilleure solution puisque il >> suffit d'exécuter le script une seule fois au démarrage, ensuite le >> périphérique se monte tout seul. J'ai donc fait un crontab en root, au >> démarrage. >> > > Il y a mieux qu'un cronjob, je trouve. > Pour charger un module au démarrage, on peut le mentionner dans le fichier > /etc/modules. > Pour qu'il soit chargé automatiquement lors de la détection d'identifiants > donnés, on peut créer un alias pour modprobe (cf. man modprobe.d). > Et modinfo nous apprend que le module ftdi_sio a deux paramètres vendor et > product permettant de spécifier ses propres identifiants, qui peuvent être > ajoutés par modprobe. > > # modinfo -p ftdi_sio > debug:Debug enabled or not (bool) > vendor:User specified vendor ID (default=0x0403) (ushort) > product:User specified product ID (ushort) > ndi_latency_timer:NDI device latency timer override (int) > > Cela pourrait être rassemblé dans un fichier /etc/modprobe.d/ftdi_sio.conf > : > > alias usb:v0403pEFE0d*dc*dsc*dp*ic*isc*ip* ftdi_sio > options ftdi_sio vendor=0x0403 product=0xEFE0 > > A tester et vérifier. Je ne suis pas sûr s'il faut 0x devant les > identifiants en hexadécimal. > > Pour finir, note qu tu aurais pu et pourrais encore demander à ce que tes > identifiants personnalisés soient ajoutés au module ftdi_sio directement > dans les sources du noyau, comme beaucoup d'autres semblent l'être déjà. > > Oui, c'est vrai, il est dans /bin, cependant il maquait bien le slash. Merci infiniment pour cette explication intéressante et détaillée, je vais essayer tout ça. Danilo
Re: Détection automatique d'une connection USB
Le 13/04/2018 à 07:31, Danilo Uccelli a écrit : Effectivement un des problèmes était bien le manque de slash et j'ai aussi bien compris la faille de sécurité que cela crée. Quel manque de slash ? Tu veux dire qu'il manquerait un / entre /sbin et sh ? Sûrement pas, car /sbin/sh n'existe pas ; sh est dans /bin. J'ai donc donné à root la propriété du script. Pas suffisant car le propriétaire non root du répertoire contenant le script peut toujours le supprimer, le renommer et le remplacer par ce qu'il veut. Puis, j'ai réalisé que udev n'était pas la meilleure solution puisque il suffit d'exécuter le script une seule fois au démarrage, ensuite le périphérique se monte tout seul. J'ai donc fait un crontab en root, au démarrage. Il y a mieux qu'un cronjob, je trouve. Pour charger un module au démarrage, on peut le mentionner dans le fichier /etc/modules. Pour qu'il soit chargé automatiquement lors de la détection d'identifiants donnés, on peut créer un alias pour modprobe (cf. man modprobe.d). Et modinfo nous apprend que le module ftdi_sio a deux paramètres vendor et product permettant de spécifier ses propres identifiants, qui peuvent être ajoutés par modprobe. # modinfo -p ftdi_sio debug:Debug enabled or not (bool) vendor:User specified vendor ID (default=0x0403) (ushort) product:User specified product ID (ushort) ndi_latency_timer:NDI device latency timer override (int) Cela pourrait être rassemblé dans un fichier /etc/modprobe.d/ftdi_sio.conf : alias usb:v0403pEFE0d*dc*dsc*dp*ic*isc*ip* ftdi_sio options ftdi_sio vendor=0x0403 product=0xEFE0 A tester et vérifier. Je ne suis pas sûr s'il faut 0x devant les identifiants en hexadécimal. Pour finir, note qu tu aurais pu et pourrais encore demander à ce que tes identifiants personnalisés soient ajoutés au module ftdi_sio directement dans les sources du noyau, comme beaucoup d'autres semblent l'être déjà.
Re: Détection automatique d'une connection USB
Merci à vous tous, vous m'avez mis sur la bonne voie. Effectivement un des problèmes était bien le manque de slash et j'ai aussi bien compris la faille de sécurité que cela crée. J'ai donc donné à root la propriété du script. Puis, j'ai réalisé que udev n'était pas la meilleure solution puisque il suffit d'exécuter le script une seule fois au démarrage, ensuite le périphérique se monte tout seul. J'ai donc fait un crontab en root, au démarrage. Mais là ça n'allait toujours pas... par contre c'était plus facile pour moi de debugger et en fait il fallait mettre /sbin/modprobe dans mon script au lieu de modprobe tout seul, car il semble qu'à ce stade (ou bien c'est parce que c'est root qui l'exécute et non pas sudo) le path n'est pas (encore) connu. Maintenant tout fonctionne :-) Danilo
Re: Détection automatique d'une connection USB
Le 12/04/2018 à 07:59, Danilo Uccelli a écrit : J'ai écrit la règle suivante dans /etc/udev/rules.d/99-axiome.rules : ACTION=="add", SUBSYSTEM=="usb", ATTR{idProduct}=="EFE0", ATTR{idVendor}=="0403", RUN+="/sbin sh /home/du2/Applications/utils/Usb_axiome.sh" Si quelqu'un voit mon erreur ou a une autre idée pour arriver au résultat, Pas regardé le reste, mais "/sbin sh" me semble suspect. Que vient faire un chemin de répertoire au début d'une commande ? Accessoirement, faire exécuter par udev avec les privilèges root un script situé dans un emplacement qui est sous le contrôle d'un utilisateur normal ne me semble pas un excellente idée.
Re: Détection automatique d'une connection USB
bonjour, lorsque vous plugger votre composant usb, si cela crée toujours un /dev/ttyUSBx, vous pouvez utiliser inotify qui detecte les changements, creation etc de fichiers. Me semble avoir utilisé des regles UDEV, avec des resultats aleatoires. cordialement Le jeu. 12 avr. 2018 10:43, Jean-Marca écrit : > Thu, 12 Apr 2018 07:59:17 +0200 > Danilo Uccelli écrivait : > > > Par contre, je souhaiterais ne pas avoir à lancer manuellement ce script > et > > j'ai pensé à une règle UDEV, mais là je nage, tous mes essais sont > > infructueux. Et surtout je ne sais pas comment investiguer de façon > > efficace. > > Apparemment, il existe pas mal d'info sur comment debugger les règles udev. > Comme celui qui consiste à utiliser : > > Cf. > https://www.jpichon.net/blog/2011/12/debugging-udev-rules/ > > Ma modeste contribution. > > Jean-Marc > https://6jf.be/keys/ED863AD1.txt >
Re: Détection automatique d'une connection USB
Thu, 12 Apr 2018 07:59:17 +0200 Danilo Uccelliécrivait : > Par contre, je souhaiterais ne pas avoir à lancer manuellement ce script et > j'ai pensé à une règle UDEV, mais là je nage, tous mes essais sont > infructueux. Et surtout je ne sais pas comment investiguer de façon > efficace. Apparemment, il existe pas mal d'info sur comment debugger les règles udev. Comme celui qui consiste à utiliser : Cf. https://www.jpichon.net/blog/2011/12/debugging-udev-rules/ Ma modeste contribution. Jean-Marc https://6jf.be/keys/ED863AD1.txt pgpYpdBnEcc_e.pgp Description: PGP signature
Détection automatique d'une connection USB
Bonjour la liste, J'ai des appareils fabriqués en interne qui utilisent des chips FTDI pour lesquels j'ai obtenu de la part de FTDI, il y a déjà de nombreuses années, une plage de PID. En fait, j'utilise essentiellement le PID 0xEFE0, donc mon interface apparaît comme 0403:EFE0 Sur mes PC Linux (en l’occurrence "Mint" à jour), je dois lancer en root, un script pour initier la reconnaissance de connection, le contenu de mon script /home/du2/Applications/utils/ Usb_Axiome.sh est le suivant : modprobe ftdi_sio chmod 666 /sys/bus/usb-serial/drivers/ftdi_sio/new_id echo "0403 EFE0" > /sys/bus/usb-serial/drivers/ftdi_sio/new_id Après avoir lancé ce script, je peux bien communiquer avec mes appareil par un port VCP du type /dev/ttyUSBx La déconnexion et reconnexion devient bien automatique, pas de soucis. Par contre, je souhaiterais ne pas avoir à lancer manuellement ce script et j'ai pensé à une règle UDEV, mais là je nage, tous mes essais sont infructueux. Et surtout je ne sais pas comment investiguer de façon efficace. J'ai écrit la règle suivante dans /etc/udev/rules.d/99-axiome.rules : ACTION=="add", SUBSYSTEM=="usb", ATTR{idProduct}=="EFE0", ATTR{idVendor}=="0403", RUN+="/sbin sh /home/du2/Applications/utils/Usb_axiome.sh" Si quelqu'un voit mon erreur ou a une autre idée pour arriver au résultat, je lui en serai infiniment reconnaissant. D'avance merci à ceux qui me lirons. Danilo