Spil og dimseri på Linux – MOMO Racing Wheel

Jeg købte i tidernes morgen et Logitech MOMO rat til diverse bilspil. Det kostede en mindre herregård og er maksimalt blevet benyttet en håndfuld gange.
Det plejer at være sådan at jo større softwarepakke der følger med en ny hardwareenhed, jo mere besværligt er det at få den til at fungere ordenligt – især når der står Logitech på æsken. MOMO-rattet var ej heller nogen undtagelse. Det tog det meste af en dag før jeg kunne snuppe de første omgange på Silverstone og jeg fik aldrig gearstangen til at fungere i noget spil.

MOMO rattet havnede så i en lang årrække på en halvstøvet hylde. Da jeg for nogle år siden besluttede mig til at gå openSUSE solo og de andre styresystemer, overvejede jeg endda at smide det hele ud – men glemte alt om det.
Her under julen fandt jeg ved et tilfælde dog en guide til at sætte rattet op under Ubuntu – hvilket absolut lige skulle prøves og det har vist sig at det er særdeles velfungerende.Der mangler dog indtil videre understøttelse for force feedback, men det er sandt at sige ikke en funktionalitet jeg savner. Rent faktisk slog jeg det i tidernes morgen fra, efter at have kørt bare et par enkelte baner. Det er indtil videre også kun enkelte spil som for eksempel VDrift der har eksperimental understøttelse af basal forcefeedback.

En kort beskrivelse af MOMO rat-sættet

MOMO-sættet består af en gulvenhed, med en speeder og en bremsepedal og en bordenhed med et rat med et gearskift som på en formel 1-bil og en koblingsfri gearstang. De to enheder forbindes af et serielkabel og fra bordenheden forbindes MOMO til P.C’en med et USB-kabel.

Installation

Følgende procedure er specifikt rettet imod openSUSE 11.3, men kan med meget få ændringer bruges til de fleste distributioner.
Først skal vi have installeret en værktøjspakke, der skal håndtere opsætningen. Denne hedder i openSUSE-land “input-utils”, varierer dog næppe det store i andre grevskaber og installeres hurtigst således :

flywheel@starbug:~>sudo zypper in input-utils

Når MOMO er tilsluttet til P.Cen, kan man hurtigt lige se om det er gået glat med værktøjet “lsusb”, der lister de tilsluttede USB-enheder. På min egen maskine ser det således ud :


flywheel@starbug:~> lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0409:0058 NEC Corp. HighSpeed Hub
Bus 001 Device 007: ID 07cc:0200 Carry Computer Eng., Co., Ltd 6-in-1 Card Reader
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 04f3:0103 Elan Microelectronics Corp.
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 002: ID 056a:0069 Wacom Co., Ltd
Bus 006 Device 003: ID 046d:ca03 Logitech, Inc. MOMO Racing
flywheel@starbug:~>

Når vi nu kan se at MOMO-rattet er fundet, kan vi se nærmere på hvilken funktionalitet der er fundet og hvordan det hele virker. Det gøres med værktøjet »jstest«, der hos mig giver følgende output :


flywheel@starbug:~> jstest /dev/input/js0
Driver version is 2.1.0.
Joystick (Logitech Logitech MOMO Racing ) has 2 axes (X, Y)
and 10 buttons (Trigger, ThumbBtn, ThumbBtn2, TopBtn, TopBtn2, PinkieBtn, BaseBtn, BaseBtn2, BaseBtn3, BaseBtn4).
Testing … (interrupt to exit)
Axes: 0: 1845 1: 511 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off 9:off
flywheel@starbug:~>

Så er det tid til at kalibrere rattet – hvilket er nødvendigt da både axis 0 (rattet) og axis 1 (speeder, bremse) har et lille problem når det er midterstillet, det vil sige der hvor de to individuelle kontroller bliver føjet sammen til en axis. Dette gøres med værktøjet “jscal” :

flywheel@starbug:~> jscal -c /dev/input/js0


Her følger du bare værktøjets anvisninger :

  • Rør ikke rattet, vent
  • Drej helt til højre og tryk på en knap
  • Lad rattet være i midterstilling og tryk på en knap
  • Drej helt til venstre og tryk på en knap
  • Træd bremsepedalen i bund og tryk på en knap
  • Rør ikke rattet, tryk på en knap
  • <liTræd gaspedalen i bund og tryk på en knap

Dette giver hos mig udskriften :


flywheel@starbug:~> jscal -c /dev/input/js0
Joystick has 2 axes and 10 buttons.
Correction for axis 0 is broken line, precision is 0.
Coeficients are: 506, 506, 1060977, 1042436
Correction for axis 1 is broken line, precision is 0.
Coeficients are: 127, 127, -4194176, -4227201

Calibrating precision: wait and don’t touch the joystick.
Done. Precision is:
Axis: 0: 0
Axis: 1: 0

Move axis 0 to minimum position and push any button.
Hold … OK.
Move axis 0 to center position and push any button.
Hold … OK.
Move axis 0 to maximum position and push any button.
Hold … OK.
Move axis 1 to minimum position and push any button.
Hold … OK.
Move axis 1 to center position and push any button.
Hold … OK.
Move axis 1 to maximum position and push any button.
Hold … OK.

Setting correction to:
Correction for axis 0: broken line, precision: 0.
Coeficients: 508, 508, 1056800, 1046500
Correction for axis 1: broken line, precision: 0.
Coeficients: 127, 127, -4194176, -4227201

flywheel@starbug:~>

Da det er lidt bøvlet at skulle gøre efter hver genstart, kan vi også få jscal til at udskrive alt til en enkeltlinies kommando. Det ser hos mig således ud :


flywheel@starbug:~>jscal -p /dev/input/js0
jscal -s 2,1,0,506,506,1060977,1042436,1,0,127,127,-4194176,-4227201

Nu kan jeg så enten kopiere dette ind i et lille script eller indtaste denne hver gang jeg tilslutter MOMO-rattet, men hvorfor dette når det kan automatiseres fuldstændigt.
Siden kerne 2.6, har Linux benyttet udev-systemet til at håndtere sådan noget som USB-enheder. Hvad systemet automatisk skal gøre når en specifik USB-enhed bliver tilsluttet, kan defineres med en såkaldt udev regl.
Dette gøres ved at oprette filen /etc/udev/rules.d/80-logitech-momo-wheel.rules. Det kan for eksempel gøres således :


flywheel@starbug:~>sudo kwrite /etc/udev/rules.d/80-logitech-momo-wheel.rules

I denne fil kopieres nedenstående :


ACTION!=”add”, GOTO=”momo_end”
SUBSYSTEM!=”input”, GOTO=”momo_end”
KERNEL!=”js[0-9]*”, GOTO=”momo_end”

SYSFS{idProduct}==”ca03″, SYSFS{idVendor}==”046d”, RUN+=”[din jscal justering] $tempnode”

LABEL=”momo_end”

Læg mærke til det det fremhævede tekst. Her indsætter du den jscal kommando, der blev fundet lige før. Hos mig ser filen således ud :


ACTION!=”add”, GOTO=”momo_end”
SUBSYSTEM!=”input”, GOTO=”momo_end”
KERNEL!=”js[0-9]*”, GOTO=”momo_end”

SYSFS{idProduct}==”ca03″, SYSFS{idVendor}==”046d”, RUN+=”/usr/bin/jscal -s 2,1,0,506,506,1060977,1042436,1,0,127,127,-4194176,-4227201 $tempnode”

LABEL=”momo_end”

Så er den basale MOMO funktionalitet sat op og du er klar til at sætte spillene op.
Opsætning i spillene udføres ofte under kontrol-menuen, hvor hver bilkontrol skal associeres med den korresponderende joystick kontrol. Det betyder at man stort set skal igennem den samme process som ovenfor. Både Torcs og Vdrift er ganske lette at sætte op på den måde.

Henvisninger:

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

one × two =

Time limit is exhausted. Please reload the CAPTCHA.

This site uses Akismet to reduce spam. Learn how your comment data is processed.