Multi-Pointer X

Multi-Pointer X, ou MPX, est une modification de X.Org le serveur du X Window System. MPX permet l'utilisation simultanée de plusieurs pointeurs indépendants dans le même système de fenêtrage. MPX permet le fonctionnement de certaines applications sans aucune modification. La plupart du temps les applications graphiques sont conçues en supposant l'existence d'un seul pointeur.

MPX permet, par exemple, à un formateur de montrer à son élève ce qu'il doit faire en utilisant une deuxième souris au lieu de promener son doigt sur l'écran.

Voilà le code pour créer un deuxième pointeur : J'ai plusieurs souris physiques et je vais utiliser la 'nano mouse' pour contrôler le nouveau curseur :

D'abord, détecter le matériel. Dans la suite, j'utiliserai les "id" de l'exemple en question : adaptez les nombres dans les lignes de commandes à votre cas !

  [moviuro@kamino:~]$ xinput list
  ⎡ Virtual core pointer                          id=2    [master pointer  (3)]
  ⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
  ⎜   ↳ Souris de Moviuro                         id=6    [slave  pointer  (2)]
  ⎜   ↳ MLK 2.4G wireless nano mouse              id=15   [slave  pointer  (2)]
  ⎜   ↳ SynPS/2 Synaptics TouchPad                id=16   [slave  pointer  (2)]
  ⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
      ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
      ↳ AT Translated Set 2 keyboard              id=7    [slave  keyboard (3)]
      ↳ Apple, Inc Apple Keyboard                 id=8    [slave  keyboard (3)]
      ↳ Apple, Inc Apple Keyboard                 id=9    [slave  keyboard (3)]
      ↳ Sleep Button                              id=10   [slave  keyboard (3)]
      ↳ Power Button                              id=11   [slave  keyboard (3)]
      ↳ HD Video WebCam                           id=12   [slave  keyboard (3)]
      ↳ Video Bus                                 id=13   [slave  keyboard (3)]
      ↳ Power Button                              id=14   [slave  keyboard (3)]

Ensuite, créer un nouveau curseur (que je nomme New) et réafficher la disposition du matériel.

  [moviuro@kamino:~]$ xinput create-master New
  [moviuro@kamino:~]$ xinput list
  ⎡ Virtual core pointer                          id=2    [master pointer  (3)]
  ⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
  ⎜   ↳ Souris de Moviuro                         id=6    [slave  pointer  (2)]
  ⎜   ↳ MLK 2.4G wireless nano mouse              id=15   [slave  pointer  (2)]
  ⎜   ↳ SynPS/2 Synaptics TouchPad                id=16   [slave  pointer  (2)]
  ⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
      ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
      ↳ AT Translated Set 2 keyboard              id=7    [slave  keyboard (3)]
      ↳ Apple, Inc Apple Keyboard                 id=8    [slave  keyboard (3)]
      ↳ Apple, Inc Apple Keyboard                 id=9    [slave  keyboard (3)]
      ↳ Sleep Button                              id=10   [slave  keyboard (3)]
      ↳ Power Button                              id=11   [slave  keyboard (3)]
      ↳ HD Video WebCam                           id=12   [slave  keyboard (3)]
      ↳ Video Bus                                 id=13   [slave  keyboard (3)]
      ↳ Power Button                              id=14   [slave  keyboard (3)]
  ⎡ New pointer                                   id=17   [master pointer  (18)]
  ⎜   ↳ New XTEST pointer                         id=19   [slave  pointer  (17)]
  ⎣ New keyboard                                  id=18   [master keyboard (17)]
      ↳ New XTEST keyboard                        id=20   [slave  keyboard (18)]

Enfin, attacher la souris en question au pointeur inactif qui vient de s'afficher à l'écran.

  [moviuro@kamino:~]$ xinput reattach 15 17
  [moviuro@kamino:~]$ xinput list
  ⎡ Virtual core pointer                          id=2    [master pointer  (3)]
  ⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
  ⎜   ↳ Souris de Moviuro                          id=6    [slave  pointer  (2)]
  ⎜   ↳ SynPS/2 Synaptics TouchPad                id=16   [slave  pointer  (2)]
  ⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
      ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
      ↳ AT Translated Set 2 keyboard              id=7    [slave  keyboard (3)]
      ↳ Apple, Inc Apple Keyboard                 id=8    [slave  keyboard (3)]
      ↳ Apple, Inc Apple Keyboard                 id=9    [slave  keyboard (3)]
      ↳ Sleep Button                              id=10   [slave  keyboard (3)]
      ↳ Power Button                              id=11   [slave  keyboard (3)]
      ↳ HD Video WebCam                           id=12   [slave  keyboard (3)]
      ↳ Video Bus                                 id=13   [slave  keyboard (3)]
      ↳ Power Button                              id=14   [slave  keyboard (3)]
  ⎡ New pointer                                   id=17   [master pointer  (18)]
  ⎜   ↳ MLK 2.4G wireless nano mouse              id=15   [slave  pointer  (17)]
  ⎜   ↳ New XTEST pointer                         id=19   [slave  pointer  (17)]
  ⎣ New keyboard                                  id=18   [master keyboard (17)]
      ↳ New XTEST keyboard                        id=20   [slave  keyboard (18)]

Voilà ! La nano mouse contrôle le nouveau curseur ! Pour se débarrasser du curseur :

  [moviuro@kamino:~]$ xinput remove-master 17
  [moviuro@kamino:~]$ xinput list
  ⎡ Virtual core pointer                          id=2    [master pointer  (3)]
  ⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
  ⎜   ↳ Souris de Moviuro                          id=6    [slave  pointer  (2)]
  ⎜   ↳ SynPS/2 Synaptics TouchPad                id=16   [slave  pointer  (2)]
  ⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
      ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
      ↳ AT Translated Set 2 keyboard              id=7    [slave  keyboard (3)]
      ↳ Apple, Inc Apple Keyboard                 id=8    [slave  keyboard (3)]
      ↳ Apple, Inc Apple Keyboard                 id=9    [slave  keyboard (3)]
      ↳ Sleep Button                              id=10   [slave  keyboard (3)]
      ↳ Power Button                              id=11   [slave  keyboard (3)]
      ↳ HD Video WebCam                           id=12   [slave  keyboard (3)]
      ↳ Video Bus                                 id=13   [slave  keyboard (3)]
      ↳ Power Button                              id=14   [slave  keyboard (3)]
  ∼ MLK 2.4G wireless nano mouse                  id=15   [floating slave]
  [moviuro@kamino:~]$ xinput reattach 15 2
  [moviuro@kamino:~]$ xinput list
  ⎡ Virtual core pointer                          id=2    [master pointer  (3)]
  ⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
  ⎜   ↳ Souris de Moviuro                         id=6    [slave  pointer  (2)]
  ⎜   ↳ MLK 2.4G wireless nano mouse              id=15   [slave  pointer  (2)]
  ⎜   ↳ SynPS/2 Synaptics TouchPad                id=16   [slave  pointer  (2)]
  ⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
      ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
      ↳ AT Translated Set 2 keyboard              id=7    [slave  keyboard (3)]
      ↳ Apple, Inc Apple Keyboard                 id=8    [slave  keyboard (3)]
      ↳ Apple, Inc Apple Keyboard                 id=9    [slave  keyboard (3)]
      ↳ Sleep Button                              id=10   [slave  keyboard (3)]
      ↳ Power Button                              id=11   [slave  keyboard (3)]
      ↳ HD Video WebCam                           id=12   [slave  keyboard (3)]
      ↳ Video Bus                                 id=13   [slave  keyboard (3)]
      ↳ Power Button                              id=14   [slave  keyboard (3)]

Test effectués sur Mandriva 2010.2 (après un # urpmi xinput) Plus d'infos dans man xinput Test effectués avec succès sur OpenSUSE 11.4 et 12.1 (x86_64).