Forum Linux.debian/ubuntu udev, rule pour point de montage d'un device

Posté par  (site web personnel) .
Étiquettes : aucune
0
21
jan.
2006
Bonjour,

J'ai un problème avec udev, j'ai un device qui change de "point de montage" à chaque reboot, alors qu'il me faut un point fixe (ici: /input/event5)
Voilà les info du device en question:

#cat /proc/bus/input/devices
I: Bus=0003 Vendor=0eef Product=0001 Version=0100
N: Name="eGalax Inc."
P: Phys=/input0
S: Sysfs=/class/input/input3
H: Handlers=mouse1 event3 ts1
B: EV=b
B: KEY=400 0 0 0 0 0 0 0 0 0 0
B: ABS=3

Cette fois il est sur event3, la fois d'après sur event2, ...

J'ai ajouté un fichier dans /etc/udev/rules.d/ que j'ai appelée "10-my.rule" et j'ai ai mis:

KERNEL=="mouse1", NAME="input/event5"

Rebooté et toujours sur un autre event que le 5.

J'ai fais attention de mettre le N°10 pour que ma rule soit loadée avant les autres...

H E L P

Merci, bon week-end
  • # Début de réponse ....

    Posté par  . Évalué à 3.

    C'est plutôt dans le répertoire /sys qu'il faut chercher des infos pour créer des règles pour udev,
    Mais il existe udevinfo qui vient avec le package udev.
    Essaies : udevinfo -ap /sys/class/input/input3/device/
    Tu devrais obtenir une liste de paramètres utilisable pour créer une règle.

    Et tu pourras tester la règle que tu auras créée avec :
    udevtest /sys/class/input/input3/

    Pour des infos plus détaillées voir http://www.reactivated.net/writing_udev_rules.html (en anglais)
    • [^] # Re: Début de réponse ....

      Posté par  (site web personnel) . Évalué à 1.

      Merci our les infos !

      looking at device '/devices/pci0000:00/0000:00:10.0/usb2/2-2':
      ID=="2-2"
      BUS=="usb"
      DRIVER=="usb"
      SYSFS{configuration}=="USB TouchScreen"
      SYSFS{manufacturer}=="eGalax Inc."
      SYSFS{maxchild}=="0"
      SYSFS{version}==" 1.10"
      SYSFS{devnum}=="7"
      SYSFS{speed}=="1.5"
      SYSFS{bMaxPacketSize0}=="8"
      SYSFS{bNumConfigurations}=="1"
      SYSFS{bDeviceProtocol}=="00"
      SYSFS{bDeviceSubClass}=="00"
      SYSFS{bDeviceClass}=="00"
      SYSFS{bcdDevice}=="0100"
      SYSFS{idProduct}=="0001"
      SYSFS{idVendor}=="0eef"
      SYSFS{bMaxPower}=="100mA"
      SYSFS{bmAttributes}=="a0"
      SYSFS{bConfigurationValue}=="1"
      SYSFS{bNumInterfaces}==" 1"


      J'ai donc crée une rule:

      SYSFS{configuration}=="USB TouchScreen", NAME="event5"

      Qui se load avant les autres mais pareil ! il se monte pas sur event5.

      Une idée ?
      • [^] # Re: Début de réponse ....

        Posté par  . Évalué à 1.

        Essaies :
        BUS=="usb", SYSFS{manufacturer}=="eGalax Inc.", SYSFS{configuration}=="USB TouchScreen", NAME="%k", SYMLINK="touchscreen"

        Cette règle devrait créer un lien symbolique appelé "touchscreen" dans /dev pointant vers ton device quelque soit le nom que le kernel lui attribue au départ.
        • [^] # Re: Début de réponse ....

          Posté par  (site web personnel) . Évalué à 1.

          Merci pour tes précieuses info c'est de mieux en mieux !
          Le device est bien crée dans /dev/touchscreen, j'ai donc modifié la ligne dans mon /etc/X11/xorg.conf pour qu'elle pointe sur ce device

          C'est le driver evdev qui se charge de translater les donées pour le serveur X dans mon cas, et c'est là le problème:

          Quand l'écran est détecté automatiquement, par exemple, sur /dev/input/event3 (et que mon xorg est bien sur cette entrée), tout est ok le curseur suit mon mouvement sur l'écran

          Par contre si l'écran est monté sur /dev/touchscreen grâce à la règle sus-écrite (et le xorg.conf adapté) le curseur ne suit pas mon doight mais va se caler dans le coin droite de l'écran.

          As-tu une idée ?

          Encore merci
          • [^] # Re: Début de réponse ....

            Posté par  . Évalué à 1.

            /dev/touchscreen pointe bien vers /dev/input/event3 ??

            Si oui , il faudrait comparer le fichier /var/log/Xorg.0.log avec /dev/input/event3
            et avec /dev/touchscreen pour voir si xorg paramètre ton device de la même façon dans les 2 cas.
            • [^] # Re: Début de réponse ....

              Posté par  (site web personnel) . Évalué à 1.

              Salut !

              Alors j'ai un peu looké, avec la règle ci-dessus mon /dev/touchscreen/ pointe sur /dev/ts1, si je fais un cat de ce device et que je touche mon écran je vois bien la sortie RAW data de mon screen, quand je lances X, il n'arrive pas à interpreter ça et le curseur part n'importe ou.

              Par contre avec la règle ci-dessus j'ai un autre device qui s'est crée dans /dev/event2 (surement à cause du NAME"%k"???) et si je fais un cat de ce dossier j'ai la sortie pour X qui apparait et non plus les raw data, donc cela joue si j utilises ce device pour x (le curseur est alors ok).

              Bien entendu le %k fait que si le device change de place au boot ben mon écran part sur un autre device ce qui re-pose le problème du départ...

              Donc au lieu de name="%k" j'ai tenté un name"touchscreen" je reboot et il me sort toujours des raw data in-interprétables...

              Je comprends plus rien.

              Merci =)
              • [^] # Re: Début de réponse ....

                Posté par  . Évalué à 1.

                La règle que je t'ai donné n'est pas bonne, elle créée un lien vers le mauvais device, /dev/ts1 est utilisé par le driver de ton écran tactile et se trouve dans /dev/input/ normalement (le NAME="%k" dans ma règle l'a déplacé dans /dev, pour qu'il apparaisse dans /dev/input il faudrait mettre NAME="input/%k")

                M'enfin ça n'est pas ce device qui nous intéresse ...

                Essaies : udevinfo -q path -n /dev/input/event??
                Tu devrais obtenir un chemin dans le répertoire /sys , du genre
                /class/input/.....

                Aprés : udevinfo -ap /sys/class/le chemin obtenu précedemment
                et tu devrais avoir d'autres infos pour écrire une règle pour udev, la bonne cette fois ....

                Bonne chance.
                • [^] # Re: Début de réponse ....

                  Posté par  (site web personnel) . Évalué à 1.

                  re !

                  Voilà j'ai une rule qui work impec ! (j'avais un prob avec hotplug c'est pour cela que cela réagissait bizarement....) voilà ce que ça me donne au final:

                  BUS=="usb", SYSFS{configuration}=="USB TouchScreen", SYSFS{manufacturer}=="eGalax Inc.", NAME="input/event5", SYMLINK="input/touchscreen"

                  Dernière question après je te laisses tranquille promis !

                  Dans mon ca l'écran va devoir être mis sous/hors tension alors que le pc est allumé, ce qui implique que le device doit rester le même pour que la partie tactile fonctionne malgré un débranchage/branchage.

                  Actuellement quand je débranche (physiquement) mon écran et que je le rebranche, la partie tactile répond mais est faussée (axes Y + géométrie/calibration).

                  Si je fais un #cat /proc/bus/input/devices, avant de débrancher l'écran et de le rebrancher j'ai cela.

                  ********************************
                  S: Sysfs=/class/input/input4
                  H: Handlers=mouse1 event4
                  ********************************
                  et après avoir rebranché (donc contrôles faussé) j'ai

                  ********************************
                  S: Sysfs=/class/input/input5
                  H: Handlers=mouse1 event5
                  ********************************
                  Voilà, tu as peut-être remarqué qu'il y avait quelque chose d'étrange, c'est que dans ma rule je spécifie l'event5 et que c'est le 4 qui est affiché lors du #cat /proc/bus/input/devices, alors que si je controles l'entrée utilisée par X c'est bien l'event5 !

                  Il y a un flou pour moi de ce côté là, ça serait sympa si tu pouvais encore m'aider la dessus.

                  Merci bon week-end.

                  Romain
                  • [^] # Re: Début de réponse ....

                    Posté par  . Évalué à 1.

                    Je pense qu'il faut modifier ta règle en remplacant NAME="input/event5" par NAME="input/%k", comme ça tu ne modifies pas le nom du device créé par le kernel.
                    Et il faut que tu utilise le lien symbolique "input/touchscreen" dans ton fichier xorg.conf. Le lien symbolique sera le seul élément qui n'aura pas changé entre 2 branchements, quelque soit le nom donné au device par le kernel, le lien doit pointé vers lui.

                    (En même temps, je ne crois pas que le serveur X supporte le branchement à chaud de nouveaux périphériques)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.