# [evdev] Plus de souris après la mise en veille (semi-résolu)

## BaNaNe

Bonjour,

Hier, j'ai configuré ma souris USB (Microsoft Microsoft Wireless Optical Mouse® 1.0A) en suivant le tuto HOWTO Advanced Mouse afin d'avoir ma molette et les boutons sur le coté fonctionnels. Tout fonctionnait jusqu'à ce matin lorsque j'ai réveillé le pc (je l'avais mit en veille pour la nuit) : ma souris usb ne fonctionne plus, il ne me reste que le touchpad (je suis sur un portable donc).

J'essaie de relancer X et là, plus de touchpad non plus :s

J'ai recompilé le noyau pour avoir les driver uhci-hcd, ehci-hcd, usbhid et evdev en modules mais j'ai toujours le même problème, c'est à dire que lorsque que je réveille le pc, je n'ai plus de souris usb et si je relance X, je n'ai plus de touchpad ou même, j'ai un écran noir.

Je crois avoir plus ou moins localisé le problème : ma souris usb apparait parfois dans /dev/input/event2 (c'était le cas hier soir), dans /dev/input/event3 (ce matin après reboot) et dans /dev/input/event4 (après le reveille du portable).

Mais je ne vois pas comment je pourrais résoudre ce problème... Si quelqu'un pouvait m'aider ...  :Wink: 

Merci et à bientôt!

----------

## netfab

Salut,

Voici l'idée : tu crées une règle udev de façon à reconnaître ta souris, ce qui te permet de créer un lien symbolique /dev/input/ma_souris_a_moi vers /dev/input/eventX. Udev se chargera de mettre à jour le lien symbolique lorsque nécessaire.

Ensuite dans le fichier de conf de xorg, tu utilises le lien symbolique.

Les commandes qui te seront peut-être utiles :

```

# grep mouse /proc/bus/input/devices

# udevinfo -a -p `udevinfo -q path -n /dev/input/eventX`

```

A tester.

----------

## ghoti

l faut distinguer les versions de evdev :

- jusqu'à la version 1.0.0.5, tu peux en effet utiliser la méthode de NetFab

- pour les versions supérieures, il y a une nouvelle page de man qui explique comment faire car la méthode ci-dessus n'est plus valable. 

L'option "Device" n'admet plus rien d'autre que les /dev/input/eventxx mais en revanche on peut utiliser des options comme "Name", "Dev Phys", "product" etc ...

Mais perso, je n'ai jamais réussi à faire fonctionner ma Logitech MX1000 avec cette syntaxe-là  :Sad: 

----------

## BaNaNe

J'ai la version 1.0.0.5 de evdev, je peux donc utiliser la manière du lien symbolique (mais ca va etre embetant quand evdev se mettra à jours...)

J'ai essayé en mettant Name au lieu de Device dans le xorg.conf mai ça n'a pas fonctionné.

Je vais donc voir comment on configure udev parce que je n'ai jamais fais ce genre de chose...

Merci pour votre aide!

EDIT

Je viens d'essayer d'ajouter cette règle au fichier /etc/udev/rules.d/05-udev-early.rules

```
KERNEL=="event*", SYSFS{serial}=="0000:00:1d.7"       NAME="input/%k", MODE="0600", SYMLINK="sourisjf"

```

J'ai enfait copié-collé la règle qui crée les /dev/input/eventxx, si j'ai bien compris.

Avec cela, si je fait un cat de /dev/sourisjf, j'ai bien des caractères qui défilent, avant et après la mise en veille.

Par contre, ma souris ne fonctionne toujours pas après la mise en veille (après le réveille). Mais si je relance X, elle refonctionne (ce qu'elle ne faisait pas avant...)

Ma règle est-elle correcte?

Merci

----------

## ghoti

 *BaNaNe wrote:*   

> Ma règle est-elle correcte?

 

Moi je rajouterais MODE="664", GROUP="plugdev" mais je ne sais pas du tout si ça va résoudre ton prob.

----------

## BaNaNe

Je viens d'essayer mais il faut toujours que je relance X pour que ma souris refonctionne...

Je continue de chercher   :Arrow: 

----------

## truc

j'avais un problème similaire avant ( moi c'était si je débranchais et rebranchais) et c'est seulement avec la version recente d'evdev que ça a fonctionné, par contre, je n'ai pas réussi non plus à faire fonctionner les règle dans xorg avec Name et Vendor etc..

Donc j'ai joué la carte udev 

```
SUBSYSTEMS=="input", ATTRS{name}=="Razer Razer Diamondback Optical Mouse", NAME="input/event20"
```

et le truc déconseillé par la man page d'evdev;

```
        Option      "Device"            "/dev/input/event20"
```

 :Wink: 

et là je peux  la débrancher rebrancher etc.. (et je suppose que tu pourras te mettre en veuille etc..

----------

## BaNaNe

Je crois avoir résolu le problème à moitié : j'ai remis la configuration de la souris que j'avais avant (qui passe par /dev/psaux) et ... les modification que je fais avec xmodmap fonctionnent toujours...

Je ne sais pas d'où vient le problème avec evdev mais comme cela fonctionne comme je veux sans, je m'en passerai. J'essayais d'utiliser evdev car c'est cela qui est expliqué dans les tuto du wiki.

Donc, on peut dire que c'est "semi-résolu"...

EDIT : Merci truc, j'essaerai ton... truc demain  :Wink: 

----------

## Temet

Pour ma part, j'ai carrément viré la ligne "device" dans mon xorg, je crois que ça me prenait la tête et ça marche tout seul sans o_O'

----------

## ghoti

 *truc wrote:*   

> et le truc déconseillé par la man page d'evdev;
> 
> ```
>         Option      "Device"            "/dev/input/event20"
> ```
> ...

 

En effet, j'avais aussi pensé à cette solution pour ma mx1000 mais je n'ai pas essayé vu que, justement, c'était déconseillé ...

Mais comme je suis bloqué pour l'upgrade de xorg, je vais peut-être finir par m'y résoudre.

----------

## ghoti

 *Temet wrote:*   

> Pour ma part, j'ai carrément viré la ligne "device" dans mon xorg, je crois que ça me prenait la tête et ça marche tout seul sans o_O'

 

Et tu as une autre option que que le "device" ? Le driver ne détecte tout de même pas le matos tout seul ? Si ?

----------

## Temet

Bah, moi c'est une bête souris usb avec 3 boutons et molette aussi ... c'est pas une space-souris ... mais si, il fait tout tout seul.

[my life]En fait, ca m'avait étonné quand j'avais branché sur mon desktop la souris usb, avec l'autre encore branchée sur PS2 ... j'avais fait ça pour voir comment je pouvais switcher de souris ... et à ma grande surprise, les deux souris fonctionnaient en même temps sans rien faire o_O'.[/my life]

----------

## ghoti

Plutôt que de créer un un nouveau topic, il m'a semblé plus indiqué de faire remonter celui-ci afin que les infos soient groupées.

Je suis enfin arrivé à faire fonctionner ma MX1000 avec xorg-7.1 !   :Smile:   :Smile:   :Smile: 

Le truc, c'est que même si man evdev déconseille fortement d'utiliser l'option "Device", les périphériques "/dev/input/event<N>" DOIVENT EXISTER COMME TELS!!!

Il faut donc impérativement supprimer les éventuelles anciennes règles udev personnelles car elles empêchent justement la création des "event<N>" !

Après coup, ça semble évident mais qu'est-ce que j'ai pu me prendre le chou !   :Rolling Eyes: 

----------

## truc

Ne supprimer les règles udev que si vous ne vous en servez pas dans xorg.conf (et que vous utilisez Phys, Vendor & Cie ), l'inconvénient si vous utilisez explicitement /dev/input/eventN dans xorg.conf, c'est que le N pourrait très bien changer entre 2 reboot par exemple (si vous supprimez les règles udev) et X ne voudra probablement plus démarrer.

----------

## ghoti

 *truc wrote:*   

> Ne supprimer les règles udev que si vous ne vous en servez pas dans xorg.conf 

 

Aurais-je laissé planer un doute ?  :Embarassed: 

Bien entendu, je parlais uniquement du nouveau driver evdev depuis xorg-7.1!

Mais pour les autres drivers ainsi que pour les versions antérieures de evdev (jusqu'à la 1.0.0.5), on peut évidemment continuer à utiliser les règles udev comme avant !

----------

## truc

et le doute persiste... en fait, ma regle udev, fait en sorte que :

```
SUBSYSTEMS=="input", ATTRS{name}=="Razer Razer Diamondback Optical Mouse", NAME="input/event20"

DRIVERS=="usbhid", ATTRS{modalias}=="usb:v045Ep00DBd0173dc00dsc00dp00ic03isc00ip00", NAME="input/event10"

DRIVERS=="usbhid", ATTRS{modalias}=="usb:v045Ep00DBd0173dc00dsc00dp00ic03isc01ip01", NAME="input/event11"
```

les device input/eventN apparaissent correctement! sinon, les numéros sont un peu aléatoire... Donc, j'ai bien les derniers pilotes evdev, mais j'utilise les noms eventN dans xorg.conf, et pour éviter que les numéros ne s'inverse j'utilise les règles udev..

Voila, on se comprennait mal je pense...

----------

## ghoti

Ben oui mais justement, avec le nouvel evdev, on se tape éperdument des numéros de périphériques ! On n'a plus besoin de les connaître puisque le man evdev déconseille fortement l'option "Device" dans xorg.conf !

Tu peux malgré tout continuer comme tu le fais à utiliser cette option par le biais d'une règle qui te génère un eventN fixe et connu (c'est ce que j'avais fait aussi jusqu'ici!) mais ça ne va pas dans le sens du man (et moi, je suis discipliné  :Wink:   :Laughing: ) ....

Si tu suis les recommandations du man ( Name, Phys, Vendor & Cie ), tu n'as plus besoin de règle udev puisque evdev se débrouille très bien avec les eventN attribués automatiquement, et cela quelle que soit la variation de leur numéros, sans que tu aies besoin de les mentionner explicitement dans xorg.conf !

Mais cela va plus loin : si tu veux créer des règles envers et contre tout, tu ne peux pas générer d'autres noms que des eventN sinon evdev ne reconnait plus les périphériques (alors que c'était bien le cas avant)!

C'est ce qui m'avait perturbé au début ...

Donc la question à te poser : pourquoi veux-tu absolument event10, event11, event20 puisque tu n'es plus amené à les manipuler toi-même ?

Par curiosité, fais voir les sections de ton xorg.conf qui concernent les 3 périphériques que tu cites ?

----------

## truc

 *Quote:*   

> Donc la question à te poser : pourquoi veux-tu absolument event10, event11, event20 puisque tu n'es plus amené à les manipuler toi-même ?

 

parce-que Phys , Vendro et Companie ne marchaient pas la dernière fois que je les aie essayé, mais je viens effectivement de voir que 

```
x11-drivers/xf86-input-evdev

    gentoo:                1.0.0.5 1.1.2-r1 1.1.2-r2 1.1.3 

    installed:             1.1.3* 

    Homepage:              http://xorg.freedesktop.org/

    Description:           Generic Linux input driver

    License:               ( xf86-input-evdev ) 

    Use flags:              (-debug)
```

j'étais en 1.1.2-r2 jusque là, j'essaierai ce soir pour voir si ça marche avec Phys & Cie

Voici quand même pour le moment les section de xorg.conf, ce soir je réessaie en faisant le gars bien qui respecte man evdev  :Wink: 

(ceci dit je ne pourrai le faire que pour la souris il me semble car je ne vois aps de différences entre les deux 'devices' créées par mon clavier :/

```
Section "ServerLayout"

        Identifier     "X.org Configured"

        Screen      0  "Screen0" 0 0

        InputDevice    "Mouse"           "CorePointer"

        InputDevice    "Keyboard0"       "CoreKeyboard"

        InputDevice    "Keyboard1"       "SendCoreEvents"

EndSection

...

Section "InputDevice"

        Identifier  "Keyboard0"

        Driver      "keyboard"

        #Driver     "evdev"

        #Option     "Device"            "/dev/input/event11"

        #Option      "XkbModel"                 "evdev"

        Option      "CoreKeyboard"

        Option      "XkbModel"          "pc105"

        Option      "XkbRules"          "xorg"

        Option      "XkbLayout"         "fr"

EndSection

Section "InputDevice"

        Identifier  "Keyboard1"

        #Driver      "keyboard"

        Driver      "evdev"

        Option      "Device"            "/dev/input/event10"

        #Option             "Name"              "Microsoft Natural� Ergonomic Keyboard 4000"

        #Option      "XkbModel"          "evdev"

        #Option      "XkbRules"          "xorg"

        #Option      "XkbLayout"         "fr"

EndSection

Section "InputDevice"

        Identifier  "Mouse"

        Driver      "evdev"

        Option      "Device"            "/dev/input/event20"

        Option      "Buttons"           "7"                                                                                                                                                    

        Option      "ZAxisMapping"      "4 5"                                                                                                                                                  

        Option      "Emulate3buttons"   "no" 

EndSection

```

( et oui j'utilise keyboard et evdev pour une 'partie' du clavier parce que sinoin, j'avais un problème de 2 touches différentes qui produisait le même keycode, (le support des touches mutlimédia n'est pas encore parfait, je dois patcher le noyau pour y arriver..))

```
 cat /proc/bus/input/devices 

I: Bus=0003 Vendor=1532 Product=0002 Version=0100

N: Name="Razer Razer Diamondback Optical Mouse"

P: Phys=usb-0000:00:02.0-2/input0

S: Sysfs=/class/input/input0

H: Handlers=mouse0 event0 

B: EV=7

B: KEY=7f0000 0 0 0 0 0 0 0 0

B: REL=103

I: Bus=0003 Vendor=045e Product=00db Version=0173

N: Name="Microsoft Natural� Ergonomic Keyboard 4000"

P: Phys=usb-0000:00:02.0-4/input0

S: Sysfs=/class/input/input1

H: Handlers=kbd event1 

B: EV=120003

B: KEY=10000 7 ff800000 7ff febeffdf f3cfffff ffffffff fffffffe

B: LED=7

I: Bus=0003 Vendor=045e Product=00db Version=0173

N: Name="Microsoft Natural� Ergonomic Keyboard 4000"

P: Phys=usb-0000:00:02.0-4/input1

S: Sysfs=/class/input/input2

H: Handlers=kbd event2 

B: EV=10000f

B: KEY=7c0000 0 c0002 1400 0 0 1 10f80 287c407 ffff39fa d97157ff febeffdf ffefffff ffffffff fffffffe

B: REL=40

B: ABS=1 0

```

je pourrai probablement jouer avec Phys en mettant des numéros, mais je trouve ça crade.. mais je n'ai pas le choix.. bvref on verra.. 

merci  :Smile: 

----------

## ghoti

 *truc wrote:*   

> N: Name="Microsoft Natural� Ergonomic Keyboard 4000"

 

Arf, évidemment si tu nous balances un clavier à deux têtes ....  :Wink:   :Laughing: 

A la lecture du howto sur le wiki, je comprends mieux ton désarroi ! 

J'ai lu également tes interventions dans ce topic et en effet, cette histoire de keycodes identiques  pour plusieurs touches semble plutôt galère  :Sad: 

Par contre, il y a deux choses que je n'ai pas bien saisies:

1) Pourquoi l'option "Phys" de evdev ne fonctionne-t-elle pas ?

Logiquement, tu devrais pouvoir différencier les 2 parties du clavier avec un truc du genre :

```
Section "InputDevice"

   Identifier  "MainKeyboard"

   Driver      "evdev"

   Option      "Name" "*Ergonomic Keyboard 4000"

   Option       "Phys"   "usb-*/input0"

   ...

EndSection

Section "InputDevice"

   Identifier  "MultimediaKeyboard"

   Driver      "evdev"

   Option      "Name" "*Ergonomic Keyboard 4000"

   Option       "Phys"   "usb-*/input1"

   ...

EndSection
```

Note que cette config n'a pas besoin de règles udev et qu'elle est valable quelle que soit la prise usb utilisée (grâce au joker "*" dans l'option "Phys")

2) Pourquoi utilises tu  2 drivers différents ? J'ai bien compris que c'était pour résoudre un problème avec la touche "Favorites" mais puisque tu as patché le kernel avec des codes inférieurs à 256, j'avoue que je n'ai pas trop saisi le fin fond de l'histoire ...

Pour la reconnaissance et la configuration des boutons, je dois malheureusement déclarer forfait : vu que je ne dispose pas de ce type de clavier, il m'est difficile de faire des tests ...  :Sad: 

Par contre, pour la souris, les choses sont beaucoup plus simple : l'option "Name" devrait suffire à condition que tu n'envisages pas d'installer deux souris identiques ...

----------

## truc

 *ghoti wrote:*   

>  *truc wrote:*   N: Name="Microsoft Natural� Ergonomic Keyboard 4000" 
> 
> Arf, évidemment si tu nous balances un clavier à deux têtes ....  

  mé euh.. d'abord il est bien quand même... :Smile: 

 *Quote:*   

> A la lecture du howto sur le wiki, je comprends mieux ton désarroi !

 En fait, mon désarroi , comme tu dis, à commencé bien avant l'article dand le wiki:), mais c'est vrai que ça explique pas mal de chose..

 *Quote:*   

> Par contre, il y a deux choses que je n'ai pas bien saisies:
> 
> 1) Pourquoi l'option "Phys" de evdev ne fonctionne-t-elle pas ?
> 
> Logiquement, tu devrais pouvoir différencier les 2 parties du clavier avec un truc du genre :
> ...

 

C'et très bien que tu mettes ça, en fait je n'avais pas très bien compris dans le usb-*/input0, ce qui était dépendant du port USB utilisé et ce qui était propre au matériel, c'et en gros pour ça que je ne savais pas trop quoi mettre, Grace à ton '*' bien placée, désormais je sais  :Very Happy:  merci.

 *Quote:*   

> 2) Pourquoi utilises tu  2 drivers différents ? J'ai bien compris que c'était pour résoudre un problème avec la touche "Favorites" mais puisque tu as patché le kernel avec des codes inférieurs à 256, j'avoue que je n'ai pas trop saisi le fin fond de l'histoire ...

 

Tout ça est compliqué et m'échappe encore pas mal, mais en fait les keycodes que tu as en console(en utilisant getkeycode par exemple) ne sont pas les mêmes que ceux que tu as quand tu te sers de xev par exemple, le patch va se charger de donner des keycodes sympa aux touches étant jusqu'alors ignorées par le noyau, sauf que, le passage des keycodes console au keycodes X (ils ont des noms, mais je ne sais jamais lequel est lequel.. dsl  :Embarassed:  ) se fait par une simple operation.... utilisant l'opérateur modulo, et c'est bien la le problème, c'est que comme tu t'en doutes, un modulo, ici, est plutôt mal venu, car deux touches au keycodes différents en console, peuvent donner le même keycode 'sous' X. Et puis , avouons-le, à l'ère ou nous sommes, coder ces keycodes sur 8 bits pour X, ça puduque, sérieu, ça fait 256 touches, si je ne m'abuse, et avec les les télécommandes, tablettes graphiques et autres, je pense qu'on peut vite être embêté.. (m'enfin, on devrait aussi pouvoir se débrouiller ainsi(avec 256 touches, ce qui fait déjà pas mal, je vous l'accorde..)

 *Quote:*   

> Pour la reconnaissance et la configuration des boutons, je dois malheureusement déclarer forfait : vu que je ne dispose pas de ce type de clavier, il m'est difficile de faire des tests ... 

 

en fait, ce fameux calcul dont jeparlais pour avoir le keycode sous X, n'est pas le même lorsqu'il s'agit du driver keyboard ou evdev, et donc les touches allant produire le même évenements ne sont pas les mêmes, et en utilisant keyboard pour les touches principales du clavier, j'ai une touche multimédia qui devrait être 'print' (sur la touche F12, pas la 'printkey' des magic syskey) mais qui est produit en fait l'évenement down_arrow (flèche du bas)..mais contrairement à la touche favorits, ça ne me gène pas du tout:

En effet, sur ce clavier, on peut activer ou non les touches fonction ( F1 - F12) et si elle sont désactivés alors on a une ribambelle de nouvelles touches mutlimédia qui s'offre à nous, mais comme je le disais dans le thread que tu as mentionné, j'utilise trop souvent les touches fonctions pour me permettre de les désactiver (ok, c'est juste en appuyant sur une autre touche du clavier pour les désactiver, mais bon.. )

 *Quote:*   

> Par contre, pour la souris, les choses sont beaucoup plus simple : l'option "Name" devrait suffire à condition que tu n'envisages pas d'installer deux souris identiques ...

 

je n'envisage pas d'avoir deux souris.. (tout comme je n'envisage pas d'avoir deux claviers.. mais bon...  :Wink: 

En fait, l'option Name fonctionne désormais avec la nouvelle version d'evdev, j'avais déjà suivi à la lettre son utilisation avecla version précedente, mais X ne démarrait pas car pas de souris détectée, mais maintenant, c'est ok:)

kewl, c'est tellement plus la classe dans xorg.conf..  :Smile: 

Par contre, étant donné que je compte utiliser encore keyboard, jusqu'à ce que le support du clavier soit amélioré, je ne vais pas me risquer à changer mes règles pour lui, je garde ça pour l'instant inchangé..( car, evdev, c'est bien sympa, mais si ça marche pas sur la clavier, y'a plus rien car uand t'es en console, et que le clavier ne marche pas, tu te sens pas super quoi  :Laughing: 

En tout cas merci  de m'avoir éclairci sur ces quelques points.

----------

