Re: Détection automatique d'une connection USB

2018-04-13 Par sujet Danilo Uccelli
Le 13 avril 2018 à 09:15, Pascal Hambourg  a é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

2018-04-13 Par sujet Pascal Hambourg

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

2018-04-12 Par sujet Danilo Uccelli
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

2018-04-12 Par sujet Pascal Hambourg

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

2018-04-12 Par sujet FF \__/ FF
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-Marc  a é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

2018-04-12 Par sujet Jean-Marc
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

2018-04-12 Par sujet Danilo Uccelli
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