101 Libros de Informática Gratis

viernes, 7 de enero de 2011

Instalar y calibrar un joystick/gamepad en linux.

1.- Ver si están cargados los módulos:

Primero vamos a ver si tenemos los módulos necesarios cargados ya:

# lsmod | grep joydev && lsmod | grep analog

Si ya están cargados los módulos nos saldrá lo siguiente:

user@user-pc{~}#lsmod | grep joydev && lsmod | grep analog
joydev                 11395  0 
analog                 10037  0 
gameport               11224  2 analog,snd_via82xx

1.1.- Cargando los módulos manualmente:

Si no nos aparece nada entonces haremos lo siguiente para cargar el módulo:



# sudo modprobe joydev analog

Si has tenido que cargar manualmente los módulos joydev y analog entonces debes editar el fichero /etc/modules para hacer que estos módulos se carguen al inicio del sistema:

# sudo nano /etc/modules

Y añadimos la línea joydev, el mío queda así:

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.


lp
rtc
joydev
analog

2.- Comprobar que nos detecta el joystick/gamepad:

Vamos a comprobar que nos detecta el joystick/gamepad, todavía no conectamos el joystick/gamepad y ejecutamos:

# lsusb

Nos saldrán unas líneas con las conexiones usb que tenemos enchufadas, ya sean teclados, hubs, etc.... Esto el lo que me sale a mí:

user@user-pc{~}#lsusb

Bus 005 Device 002: ID 03f0:6204 Hewlett-Packard DeskJet 5150c
Bus 005 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 003 Device 004: ID 03f0:020c Hewlett-Packard Multimedia Keyboard
Bus 003 Device 003: ID 046d:c03e Logitech, Inc. Premium Optical Wheel Mouse (M-BT58)
Bus 003 Device 002: ID 03f0:010c Hewlett-Packard Multimedia Keyboard Hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Podemos ver el teclado (Hewlett-Packard Multimedia Keyboard), el ratón (Logitech, Inc. Premium Optical Wheel Mouse (M-BT58)), etc...

Ahora conectamos el joystick/gamepad y ejecutamos:

# lsusb

Ahora me sale esta línea:


Bus 005 Device 002: ID 03f0:6204 Hewlett-Packard DeskJet 5150c
Bus 005 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 003 Device 004: ID 03f0:020c Hewlett-Packard Multimedia Keyboard
Bus 003 Device 003: ID 046d:c03e Logitech, Inc. Premium Optical Wheel Mouse (M-BT58)
Bus 003 Device 002: ID 03f0:010c Hewlett-Packard Multimedia Keyboard Hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 003: ID 0e8f:0003 GreenAsia Inc. MaxFire Blaze2
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Decir que mi gamepad el un mando de la PS2 con un adaptador para pc.

También podemos ver más rápidamente si nos lo ha detectado de esta otra forma:

# dmesg | grep -i joy

3.- Instalar joystick para calibrar el joystick/gamepad y más:

Instalamos joystick para calibrar nuestro joystick/gamepad:

# sudo apt-get install joystick

Y ahora lo calibramos:

# jscal -c /dev/input/js0

Decir que js0 es el primer dispositivo que enchufemos, si ponemos más de uno el '0' cambiará de número siendo js1, js2, etc... según el número de josticks/gamepads que enchufes.

!NOTA¡
Cuando hayamos ejecutado jscal -c /dev/input/jsX (X (es un número) según el joystick/gamepad que vayamos a calibrar) nos saldrán unas líneas, está detectando cuantos ejes tenemos y está poniendo el valor de la posición en reposo como valor por defecto, no mováis ni toquéis ningún botón.

Esto es lo que me sale a mí, depende de los ejes que os detecte:



user@user-pc{~}#jscal -c /dev/input/js0
Joystick has 7 axes and 12 buttons.
Correction for axis 0 is none (raw), precision is 0.
Correction for axis 1 is none (raw), precision is 0.
Correction for axis 2 is none (raw), precision is 0.
Correction for axis 3 is none (raw), precision is 0.
Correction for axis 4 is none (raw), precision is 0.
Correction for axis 5 is none (raw), precision is 0.
Correction for axis 6 is none (raw), precision is 0.

Calibrating precision: wait and don't touch the joystick.
Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Axis 0:  127,  127 Axis 1:  127,  127 Axis 2:  127,  127 Axis 3:  127,  127 Axis Done. Precision is:                                             
Axis: 0:     0
Axis: 1:     0
Axis: 2:     0
Axis: 3:     0
Axis: 4:     0
Axis: 5:     0
Axis: 6:     0


Move axis 0 to minimum position and push any button.
Axis 0:      127

Cuando os salga esto tenéis que mover el eje x del analógico o direccional  hasta que donde pone 127 ponga 0, no os podéis equivocar si no sabéis cual es el 0 por que los valores solo van a cambiar cuando mováis el correcto. La siguiente línea os pedirá que lo dejéis en medio (127) y la última os dirá que lo llevéis a la máxima posición (255).

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.                                                                  
Move axis 2 to minimum position and push any button.
Hold ... OK.                                                                  
Move axis 2 to center position and push any button.
Hold ... OK.                                                                  
Move axis 2 to maximum position and push any button.
Hold ... OK.                                                                  
Move axis 3 to minimum position and push any button.
Hold ... OK.                                                                  
Move axis 3 to center position and push any button.
Hold ... OK.                                                                  
Move axis 3 to maximum position and push any button.
Hold ... OK.                                                                  
Move axis 4 to minimum position and push any button.
Hold ... OK.                                                                  
Move axis 4 to center position and push any button.
Hold ... OK.                                                                  
Move axis 4 to maximum position and push any button.
Hold ... OK.                                                                  
Move axis 5 to minimum position and push any button.
Hold ... OK.                                                                  
Move axis 5 to center position and push any button.
Hold ... OK.                                                                  
Move axis 5 to maximum position and push any button.
Hold ... OK.                                                                  
Move axis 6 to minimum position and push any button.
Hold ... OK.                                                                  
Move axis 6 to center position and push any button.
Hold ... OK.                                                                  
Move axis 6 to maximum position and push any button.
Hold ... OK.  

Esto os lo va a repetir por cada analógico o direccional que os haya detectado, justo encima de este comentario podéis ver como a mi me lo ha hecho para los 6 analógicos o direccionales que me ha detectado.

!NOTA¡
A mí también me a calibrado el direccional del mando de PS2, en este caso los valores serán -1,0 y 1 respectivamente para: mínimo, meido, máximo.

Pues ya está listo, podemos probarlo con el juego SuperTux2 v0.3.3 (http://supertux.lethargik.org/download.html), que es un supermario pero con tux y está muy bien.

En Ubuntu:

# sudo apt-get install supertux

Solo queda decir que la herramienta joystick que hemos instalado tiene más utilidades que jscal, son: evtest, inputattach, jstest. Solo tenéis que hacer comando --help o en el caso de evtest solo comando.

No hay comentarios:

Publicar un comentario