démarrer un script avec udev

Bonjour, :smiley:

Voilà j’ai une manette usb qui a besoin d’un petit programme pour démarrer.
Trouvant celà plus élégant je l’ai d’abord empaqueté dans un service que je démarrais au boot.
Cela dit il m’est venu à l’esprit qu’il serait encore plus élégant de ne lancer le service que quand la manette est insérée et de le stopper quand elle est retirée.
d’où udev… :unamused:

j’ai donc fait un joli fichier /etc/udev/rules.d/50-xbox_adapter.rules avec dedans:

ACTION=="add",ATTR{serial}=="FE7DFB60",ATTR{idVendor}=="045e",ATTR{idProduct}=="O719",RUN+="/usr/local/bin/xboxd start" ACTION=="remove",ATTR{serial}=="FE7DFB60",ATTR{idVendor}=="045e",ATTR{idProduct}=="O719",RUN+="/usr/local/bin/xboxd stop"

sachant que :

[code]root@debian:/home/jean-louis# udevadm info -a -p /devices/pci0000:00/0000:00:1d.0/usb3/3-1/3-1.2

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

looking at device ‘/devices/pci0000:00/0000:00:1d.0/usb3/3-1/3-1.2’:
KERNEL=="3-1.2"
SUBSYSTEM=="usb"
DRIVER==“usb"
ATTR{configuration}==”“
ATTR{bNumInterfaces}==” 8"
ATTR{bConfigurationValue}=="1"
ATTR{bmAttributes}=="a0"
ATTR{bMaxPower}=="260mA"
ATTR{urbnum}=="215"
ATTR{idVendor}=="045e"
ATTR{idProduct}=="0719"
ATTR{bcdDevice}=="0100"
ATTR{bDeviceClass}=="ff"
ATTR{bDeviceSubClass}=="ff"
ATTR{bDeviceProtocol}=="ff"
ATTR{bNumConfigurations}=="1"
ATTR{bMaxPacketSize0}=="8"
ATTR{speed}=="12"
ATTR{busnum}=="3"
ATTR{devnum}=="28"
ATTR{devpath}==“1.2"
ATTR{version}==” 2.00"
ATTR{maxchild}=="0"
ATTR{quirks}=="0x0"
ATTR{avoid_reset_quirk}=="0"
ATTR{authorized}=="1"
ATTR{product}=="Xbox 360 Wireless Receiver for Windows"
ATTR{serial}==“FE7DFB60”[/code]

Le service marche mais rien à faire pour que udev me le lance quand je branche la manette j’ai essayé de changer plein de truc rien à faire !!

vous auriez pas une idée ?

Bon j’ai réussi à m’en sortir mais je crois qu’il doit y avoir un bug…
udevadm test [mon périph] me disais bien que les règles collaient et qu’il devait lancer mon script…
Finalement en changeant les clés de seléction et en ciblant un périphérique moins général et plus précis (je ciblais un peu tout avec ATTR{serial}==“FE7DFB60”,ATTR{idVendor}==“045e”,ATTR{idProduct}==“O719” car le périphérique usb comme le périphérique input créé ensuite par udev… d’autant que la manette est constitué d’un récepteur sans fil et d’une manette proprement dite que se fait détecter en plus part la suite. Bref le gros foutoir avec plein d’appelation qui se ressemblent ! :005
Pour ne rien arranger, une des fonction principale du programme que je lance est précisement de réorganiser la structure des périphériques udev pour qu"'ils soient mieux reconnus/gérés donc encore des création et du bordel !

Mais enfin bref, avec :

ACTION=="add",SUBSYSTEMS=="input",ATTRS{name}=="Xbox 360 Wireless Receiver",RUN+="/usr/local/bin/xboxd start" ACTION=="remove",SUBSYSTEMS=="input",ATTRS{name}=="Xbox Gamepad (userspace driver)",RUN+="/usr/local/bin/xboxd stop"

ça marche ! :041

N’oublie pas la coche verte.
Il faut parfois tatonner pour trouver le bon creitère qui cible le périphérique dans udev; Je ne sais pas si c’est un bug, mais j’ai déja eu le cas avec une télécommande.

Sans avoir testé je remarque que “O719” contient un “O” à la place d’un “0”…