Non, en fait, je vais parler du dernier accessoire que j'ai en main pour mon PC : un maGnifIIIIIIque joystick de marque Saitek, modèle Cyborg Rumble Pad.

Ce à quoi plein de gens bien intentionnés vont m'objecter « Mais à quoi peut te servir une manette de jeu sous Linux ? ». Aha. D'abord y'a plein de jeux natifs sous Linux (outre Doom qui a été développé sous Linux puis porté sous Windows, et la PlayStation3 qui a pour base Linux, je parlerais prochainement de plein de jeux rigolos), mais il se trouve qu'à l'heure actuelle où je rédige ces lignes, il y a moins de jeux compatibles avec Vista qu'avec Linux ! Ce qui m'étonne à peine de la part d'une techno créée pour faire ch*er ses utilisateurs. Bon ok, c'est avec l'émulateur Wine, mais c'est justement l'occasion de changer d'OS, non ?

Et aussi de tester les jeux Linux, car après tout, les vrais geeks ont eux aussi le droit de s'amuser, et pas uniquement en lisant les logs apache en temps réel ou en recompilant leur kernel.

De haute lutte...

D'abord, un petit mot concernant les circonstances de cette acquisition. Il se trouve que depuis un certain temps, je bassine mes pauvres amis avec la nouvelle chaîne qui est dans mes tops favorites. Après TV6 (houla !), Arte, et plus récemment MTV2, CNBC, Ciné Polar/Ciné Fx, la cible de ma zapette est NoLife, la chaîne où y'a une vie après la vraie vie. Que même Enflammée scotche sur “Mange mon geek” et les clips de J-Pop (dont hier, l'intégrale Capsule).
Ces rigolos passionnés décrochent parfois des partenariats et organisent des concours idiots. Genre : « Si tu veux gagner ce joystick, envoie-nous un mail motivé ».

De : Moi
Je veux avoir ce magnifique produit, et non seulement je veux pas verser un seul rond dedans, mais que si jamais je ne l'ai pas, vous aurez toute la rage de Mister Furious qui se déchaînera sur vous.
gnnnniiiiiiiiiiiii
GNNNNNNNNNNNNIIIIIIIIIIIIII
GNIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
De : Cyborg
Bonjour Xavier,
Suite à de telles menaces l'équipe Saitek a opté pour la manière douce en t'offrant un Cyborg Rumble Pad
Voilà de quoi commencer l'année en beauté et te calmer pour un moment!
Il ne nous manque plus que tes coordonnées pour te l'envoyer...
Bonne Année,

Cyborgment vôtre,
L'équipe Saitek

Comme quoi, les petits enfants, il suffit de demander gentiment et calmement. Ça marche : Je l'ai reçu trois semaines plus tard, la veille de mon départ pour le festival d'Angoulême. Outre des goodies promotionnels Saitek (cartes postales, badges et porte-clés) j'ai eu le bonheur de déballer l'engin à mon retour.

Autopsie du paquet

Doc minimaliste, CD-Rom ne comprenant que les drivers MS-Windows, on le laissera dans sa boîte pour admirer... une belle manette dans le format des pads de console de jeux. Costaud, avec une prise en main bien solide, un câble qui manque un peu de souplesse, sa particularité : un module pivotable permettant d'avoir soit la configuration Playstation (les deux sticks analogiques en bas) ou XBox (en opposé). Le module en question (éjectable par un bouton dessous) doit même pouvoir se bricoler pour en faire un joy de poche...
Personnellement, j'ai opté pour la position Playstation... question d'éducation peut-être.

Bon allez, j'avoue, j'ai eu un doute : Cet engin marche-t-il bien sous Linux ? Rappelons que nombre de fabriquants bloquent systématiquement l'ouverture de leurs engins à des systèmes d'exploitations ouverts.
Et au bout de 20 minutes, j'ai commencé à sérieusement avoir des frayeurs de ne pouvoir m'en servir... jusqu'à ce que j'ai enfin ENFONCÉ la fiche USB. \o/ le bouton FPS s'est immédiatement illuminé.

Support système

Point important, si comme moi vous avez la distribution Mandriva (2008), le service matériel “HardDrake” donnera le bon nom à l'engin, mais le classera en “matériel inconnu/autres”. Passez outre et sautez directement à la case “j'installe un rpm”, en l'occurrence x11-driver-input-joystick. Immédiatement, un périphérique /dev/js (liant vers /dev/js0) s'intègre, ce qui veut dire que non seulement X, mais tout le système Linux aussi voit l'engin de mort. Bonheur.

Parmi les logiciels (forcément des jeux) reconnaissant d'entrée le joystick, et présents sur toutes les distributions mais surtout sur ma machine, je vous recommande Neverball/Neverputt, l'hilarant Egoboo, le classique BZFlag, et je passerais un silence pudique sur MAME.

Néanmoins, c'est un joystick analogique. Et ça se calibre ! Heureusement plus avec les ergos de la manette pour Apple //e, mais avec des outils “professionnels”. Bon. Pour commencer...

jscalibrator
Un outil rustique, mais robuste. Deux modes de configuratons sont possible, soit dans le mode “representative” avec un visualiseur d'action qui n'est pas très adapté pour le Cyborg Rumble, soit le mode “logical” avec des tranches de paramétrage digne d'une régie son de concert ! À part pour son graphique de trafic usb (dans le coin haut droite), pas franchement sexy et un peu austère. Les vrais, les purs et les durs règleront ça en dumpant le flux USB[3]
le centre de contrôle de KDE
Car oui ! cette interface gère aussi les périphériques. Et c'est dans l'infobulle qu'on a une information importante : Les joysticks Saitek sont parfaitement reconnus par le kernel Linux ! \o/
Hélas, mon KDE 3.5 a un panneau qui a un joli bug : Chaque étape de calibrage se valide en appuyant sur un bouton du joystick... sauf que les boutons LT et RT sont analogiques ! Respectivement boutons 7 et 8 et axe 3 pour le système.

De toutes façons, on s'en fout, le pad fonctionne très bien tel quel...

Manipuler le système au joystick

Ami blasteur, l'outil logiciel qui te sera le plus utile, c'est QJoyPad.
L'idée de ce machin, c'est de faire passer les actions sur le joystick comme venant de la souris (principale) ou du clavier. En clair, on peut décréter que le joy analogique droit contrôle la souris, le gauche la molette, la croix directionnelle[1] les touches fléchées, et les boutons d'autres touches comme [Entrée], [Échap], [Tab] et [Espace]. De quoi passer des heures à s'amuser sur votre bureau, à entrer des commandes shell, voire pour les plus vicieux (comme moi), utiliser vi !!!![2]
Oui je sais, je suis immonde.

Immédiatement, plein d'autres jeux deviennent “accessibles” : frozen bubble, trackballs, lbreakout, mures, le démineur, mc, gimp, sweep (scratcher du son live au joystick devient carrément démentiel) sans compter mon favori du moment mtp-target ! (mais j'en reparlerais dans un autre billet).

J'ai remarqué un point désagréable, c'est que si vous mettez votre pc en hibernation (style suspendre en RAM), le joystick va changer d'adresse, passant de “Joystick 1” à “2”, voire parfois “3”. Je recommande de dupliquer en conséquence vos configs QJoyPad, en attendant que le problème soit réglé...

Et pour les bricolos

X.org (le système graphique entres autres de Linux) peut avoir autant de claviers et de souris distinctes que vous voulez... sans limite. Certaines applis comme Gimp les différencient sans problème. J'allais commencer à m'amuser à faire reconnaître le joystick comme souris secondaire, mais je me suis dit que les manipulations du xorg.conf allaient larguer tout le monde. C'est peut-être ce qu'il manque : Une manière simplifiée pour intégrer un joystick plus bas dans l'interface X...

Ce que j'ai pas testé

Le mode vibreur. Mais à mon avis, en envoyant des trames direct dans /dev/js , ça doit marcher...

Ce qui a lamentable échoué

Enhardi par mon test concluant sur mon pc de salon travail, j'ai immédiatement testé le pad sur une autre machine tournant sous Linux. J'ai branché le Cyborg pad sur la Freebox, le bouton FPS s'est allumé.
Devant une réponse aussi positive, j'ai vite zappé sur NT1 puisque c'était l'heure du catch.

Ben... rien. Totalement incontrôlable comme jeu...
J'aurais dû m'en douter que c'est truqué, le catch Américain...


Hall of fame :

  1. croix directionnelle : Quoique comme l'a dit le professeur Lacav', en dehors de l'église Nintendo, point de croix directionnelles. Le seul à avoir tenté, c'est Sega pour sa Saturn, et ça leur a porté malheur...
  2. ↑ (je savais pas où ancrer ma note, alors j'ai mis là):Bon, entre nus, c'est moins pratique qu'un clavier ou qu'une souris, mais ça dépend des usages (relire mon billet à ce sujet). D'ailleurs, faudrait que je finalise ma grande saga du clavier.
    En attendant, voici mon layout QJoyPad (joy1.lyt) :
    Joystick 1 {
    # Le stick analogique gauche, pour déplacer rapidement la souris
            Axis 1: gradient, maxSpeed 8, mouse+h
            Axis 2: gradient, maxSpeed 8, mouse+v
    # Pas de définition analogique pour RT et LT
    # Le stick droit pour placer précisément le curseur
            Axis 4: gradient, maxSpeed 1, mouse+h
            Axis 5: gradient, maxSpeed 1, mouse+v
    # La croix directionnelle pour les touches curseurs du clavier
            Axis 6: dZone 2821, +key 102, -key 100
            Axis 7: +key 104, -key 98
    # les boutons. 1 = X , touche Control pour mtp-target !
            Button 1: key 37
    # 2 = A , bouton souris du milieu
            Button 2: mouse 2
    # 3 = B, bouton souris de gauche
            Button 3: mouse 1
    # 4 = Y, bouton souris de droite
            Button 4: mouse 3
    # doublon gauche droite pour LB et RT
            Button 5: mouse 1
            Button 6: mouse 3
    # molette verticale de la souris pour RT et LT
            Button 7: rapidfire, mouse 4
            Button 8: rapidfire, mouse 5
    # 9 = Back , touche [Backspace]
            Button 9: key 22
    # 10 = Start , touche [Entrée]
            Button 10: key 36
    # 13 = FPS , touche [Espace]
            Button 13: key 9
    }
    
  3. en envoyant des trames direct : Amis bricoleurs qui se souviennent de l'époque héroïque où l'on écrivait nos propres interfaces en assembleur, les caractéristiques techniques relevées dans /proc/bus/usb/devices :
    T:  Bus=06 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#=  3 Spd=1.5 MxCh= 0
    D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
    P:  Vendor=06a3 ProdID=f51a Rev= 1.00
    S:  Manufacturer=Saitek PLC
    S:  Product=Cyborg Rumble Pad
    C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA
    I:* If#= 0 Alt= 0 #EPs= 2 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid
    E:  Ad=81(I) Atr=03(Int.) MxPS=   8 Ivl=12ms
    E:  Ad=02(O) Atr=03(Int.) MxPS=   8 Ivl=20ms
    
    pour /proc/bus/input/device :
    I: Bus=0003 Vendor=06a3 Product=f51a Version=0110
    N: Name="Saitek PLC Cyborg Rumble Pad"
    P: Phys=usb-0000:00:1d.1-2/input0
    S: Sysfs=/class/input/input6
    U: Uniq=
    H: Handlers=event3 js0
    B: EV=10000b
    B: KEY=1fff00000000 0 0 0 0
    B: ABS=3001f
    
    et /proc/bus/input/handlers : N: Number=4 Name=joydev Minor=0