Microsoft fabrica buen hardware pero en ocasiones es complicado configurarlo bajo Linux, en este caso se trata del gamepad XboxOne, según algunas webs de internet el kernel de Linux tiene soporte para xbox one a partir de la versión 4.5, a día de hoy Gentoo tiene como kernel estable 4.4.39, por lo tanto compilaremos el módulo Xpad de forma independiente para de este modo seguir con el kernel estable y poder disfrutar de nuestro gamepad.
Según algunas webs de internet el kernel de Linux tiene soporte para xbox one a partir de la versión 4.5, a día de hoy Gentoo tiene como kernel estable 4.4.39, para poder conservar el kernel estable y disfrutar de nuestro gamepad compilaremos el módulo de forma independiente y lo cargaremos.
Nos bajamos la última versión del código del driver de Xpad y compilamos el módulo.
Hacemos una copia del módulo anterior, descargamos el módulo y lo recargamos.
rmmod xpad
modprobe xpad
Las librerías SDL disponene de unas herramientas muy útiles, nos bajamos el código fuente y las compilamos.
wget --no-check-certificate https://libsdl.org/release/SDL2-2.0.5.tar.gz
tar xvzf SDL2-2.0.5.tar.gz
cd SDL2-2.0.5/test
./configure
gcc -o testjoystick testjoystick.c -g -O2 -D_REENTRANT -I/usr/include/SDL2 -DHAVE_OPENGL -g -lSDL2_test -lSDL2
gcc -o controllermap controllermap.c -g -O2 -D_REENTRANT -I/usr/include/SDL2 -DHAVE_OPENGL -g -lSDL2_test -lSDL2
Consultamos el ID del gamepad y la versión de firmware.
INFO: There are 1 joysticks attached
INFO: Joystick 0: Microsoft X-Box One pad (Firmware 2015)
INFO: axes: 6
INFO: balls: 0
INFO: hats: 1
INFO: buttons: 11
INFO: instance id: 0
INFO: guid: 030000005e040000dd02000003020000
Lanzamos un asistente que nos permitirá obtener el mapping de botones de nuestro gamepad.
INFO: There are 1 joysticks attached
INFO: Joystick 0: Microsoft X-Box One pad (Firmware 2015)
INFO: axes: 6
INFO: balls: 0
INFO: hats: 1
INFO: buttons: 11
INFO: instance id: 0
INFO: guid: 030000005e040000dd02000003020000
INFO: Watching joystick 0: (Microsoft X-Box One pad (Firmware 2015))
INFO: Joystick has 6 axes, 1 hats, 0 balls, and 11 buttons
INFO:
====================================================================================
Press the buttons on your controller when indicated
(Your controller may look different than the picture)
If you want to correct a mistake, press backspace or the back button on your device
To skip a button, press SPACE or click/touch the screen
To exit, press ESC
====================================================================================
INFO: Mapping:
030000005e040000dd02000003020000,Microsoft X-Box One pad (Firmware 2015),platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
Ahora tan solo debemos exportar la variable de entorno SDL_GAMECONTROLLERCONFIG con el mapeo y lanzar la aplicación que deseemos, en mi caso Steam, para que sea mas cómodo exportaremos la variable mediante el perfil de bash.
export SDL_GAMECONTROLLERCONFIG="030000005e040000dd02000003020000,Microsoft X-Box One pad (Firmware 2015),platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,"
Salimos de la shell y volvemos a entrar, ya podemos disfrutar de nuestro gamepad en Linux :)
En cuanto al modo inalámbrico hay muchas esperanzas en que funcione en un futuro próximo.