Comment inverser /dev/input/js0 et /dev/input/js1 ?

Bonjour,

Je possède deux joysticks : l’un est branché en permanence (usb), l’autre est “branché” ponctuellement (bluetooth). Je me retrouve donc avec /dev/input/js0 assigné au périphérique usb et éventuellement /dev/input/js1 en pour le bluetooth.

Ca ne m’arrange pas ; j’aimerais que mon périphérique usb soit assigné par défaut à /dev/input/js1 pour que le bluetooth puisse être assigné à /dev/input/js0.

Après quelques recherches, j’ai tenté de créer la règle udev suivante :

cat /etc/udev/rules.d/10-local.rules SUBSYSTEM=="input", KERNEL=="js[0-9]*", ATTRS{idVendor}=="0925", ATTRS{idProduct}=="8888", NAME:="input/js1"
Qui ne fonctionne pas. En revanche :

Crée bien un lien symbolique lorsque mon périphérique usb est détecté, ce qui me laisse penser qu’udev détecte correctement ma règle. Alors pourquoi je n’arrive pas à renommer js0 en js1 ?

Merci !

Hello
j’ai eu le même probléme que toi…
au final, les régles ne changeait rien, pourquoi, comment, je ne sais pas.
J’ai donc créé de liens symobilques et j’utilise ceuxci à la place.

J’ai pas accés au PC où j’ai fait le travail, je posterai ca ce soir

Essaie de leur attribuer un nom différent via ta règle udev, par ex"joystick1"

hello

alors, dans mon cas c’était un peu plus complexe, car sur le noyau de l’époque, on ne pouvait pas accéder à l’ensemble des paramétres USB et j’avais deux cartes joysticks strictement identiques (seul changement un numéro de série qui n’était pas directement accessible avec udev)

Il fallait patcher le noyau (c’était un 2.6)

[code]Pour cela, on edité le fichier /drivers/hid/usbhid/hid-core.c.

$ gedit /drivers/hid/usbhid/hid-core.c
et l’on recherche la ligne suivante (proche des lignes 1160):

if (!strlen(hid->name))
et on ajouté avant cette ligne:

if (dev->serial)
{
if (hid->name[0])
strlcat(hid->name, " ", sizeof(hid->name));
strlcat(hid->name, dev->serial, sizeof(hid->name));
}
[/code]
Suivit d’une compilation

Ensuite, pour régle UDEV, j’avais

KERNEL=="js[0-9]*", DRIVERS=="usb", ATTRS{serial}=="B04146", SYMLINK+="input/js2", OPTIONS+="last_rule" KERNEL=="js[0-9]*", DRIVERS=="usb", ATTRS{serial}=="B03428", SYMLINK+="input/js3", OPTIONS+="last_rule"

De là, au lieu d’inquer js0 ou js1, j’indiqué js2 ou 3 qui eux étaient toujours affecté au même joystick.

Accesoirement, si quelqu’un peut me confirmer qu’il n’y a plus besoin de patcher le noyau poru pouvoir faire ca…

Bonsoir,

Merci pour vos réponses.

NAME:="input/joystick1" ?
Non ça ne fonctionne pas, aucun NAME:= ou NAME= en fait…

[quote=“chuck_73”]…

KERNEL=="js[0-9]*", DRIVERS=="usb", ATTRS{serial}=="B04146", SYMLINK+="input/js2", OPTIONS+="last_rule" KERNEL=="js[0-9]*", DRIVERS=="usb", ATTRS{serial}=="B03428", SYMLINK+="input/js3", OPTIONS+="last_rule"
…[/quote]
Certes, avec les SYMLINK+= c’est possible. Néanmoins je souhaiterais purement inverser les deux périphériques dans /dev/input/.

Contexte : Simplement parce que j’ai l’impression -mais je peux me tromper- que dans steam, c’est le joystick d’ordre inférieur qui est utilisé par défaut (après c’est peut être son équivalent /dev/input/event[0-9]* mais ça ne change pas le problème). Je pourrais débrancher le périphérique usb qui me gêne pour ne le brancher que ponctuellement, et c’est comme ça que ça se terminera si je ne trouve pas de solution au problème, mais s’il est possible de ne pas me tordre le dos pour accéder à l’arrière du pc lorsque j’ai besoin de deux manettes…

j’ai eu le même soucis, comme tu peux le voir…
et mis à part changer la facon dont est géré les interfaces USB, je n’ai pas connaissance d’autres facon de faire…
L’allocation des interfaces USB, se fait de maniére indépendate de Udev (si je me souviens bien)

[quote=“chuck_73”]j’ai eu le même soucis, comme tu peux le voir…
et mis à part changer la facon dont est géré les interfaces USB, je n’ai pas connaissance d’autres facon de faire…
L’allocation des interfaces USB, se fait de maniére indépendate de Udev (si je me souviens bien)[/quote]

:~# udevadm test --action=add `udevadm info -q path -n /dev/input/js0` ... NAME="input/js1" ignored, kernel device nodes can not be renamed; please fix it in /etc/udev/rules.d/10-local.rules:5

:~# man udev ... NAME The name to use for a network interface. The name of a device node cannot be changed by udev, only additional symlinks can be created.

Exact.

si tu es arrivé au bout du problème, tu peux mettre la coche verte …