Configurazione Gamepad Xbox360 Compatibile

Salve a tutti.

Qualche settimana fa ho acquistato un gamepad e avrei voluto poterlo utilizzare anche su fedora ma, nonostante compaia sull’output di lsusb tra i vari dispositivi connessi, il driver di default utilizzato dal kernel non lo vede proprio… quindi ho fatto diversi tentativi utilizzando sia il driver xboxdrv, sia la versione patchata di xpad sviluppata per SteamOS.
Con entrambe i driver utilizzati, il gamepad viene rilevato correttamente ma non risponde a nessun input. Ho fatto diversi tentativi con evtest, jstest, qjoypad, ma qualsiasi pulsante o asse tocchi sul gamepad non mi viene restituito nessun output.

Provando a configurarlo tramite le impostazioni di Steam (anche in modalità Big Picture), ho notato che in qualche modo risponde all’identificazione vibrando, ma non ho alcun riscontro con nessun’altra azione impartita dal gamepad.

Ho fatto qualche prova anche con kernel precedenti al 4.14, perché su internet avevo letto che c’erano dei bug riguardanti proprio il modulo xpad, ma anche con il 4.13 il discorso non cambia.
Il dispositivo ovviamente funziona perfettamente su altri sistemi (testato su windows e sul mio smartphone android), non capisco perché non ne voglia sapere di funzionare su fedora.

Hai provato col modulo dai repo di https://negativo17.org?
Pare che xpad sia già aggiornato con le ultime patch:

https://negativo17.org/steam/
https://negativo17.org/repos/steam/fedora-27/x86_64/

Sì, per versione patchata di xpad intendevo proprio la versione disponibile sul repository di negativo17.

Ho fatto diversi tentativi sia con la versione dkms che con quella akmod… ma entrambe le versioni, come anche i driver xboxdrv, riescono solo a far rilevare il controller al sistema. Purtroppo però non sono stato in grado di ottenere qualche output dai tasti, così è quasi impossibile provare a mappare il gamepad.

Vogliate perdonatemi se rispolvero un mio vecchio topic, non è mia intenzione fare necroposting, però considerando che non ho mai trovato una soluzione a questo problema e ancora sto provando a capire da cosa possa dipendere, ho preferito evitare di aprire un post clone.

Ultimamente ho iniziato a provare Stadia e a giocara a Destiny 2, purtroppo però giocare con mouse e tastiera è massacrante (altro che tunnel carpale) quindi, per l’ennesima volta, volevo fare un tentativo di mappare il gamepad con AntiMicroX (avevo trovato un profilo di mappatura per testarlo su Portal2), ma il problema non è il fatto che sia mappato male (non ricevo un feedback diverso azionando un tasto o una leva), quanto la mancanza assoluta di risposta da parte del gamepad… ovviamente quindi, non c’è proprio verso di mapparlo in alcun modo.

A differenza di qualche anno fa sto utilizzando un kernel molto più aggiornato, ma il problema rimane sempre lo stesso (da escludere quindi bug a livello del kernel)… tra l’altro neanche si trova più il modulo xpad per il kernel (almeno non sul repo di negativo17), ma non credo sia una questione di moduli del kernel.

Il gamepad viene comunque rilevato correttamente, solo che assi e pulsanti non restituiscono alcun tipo di feedback quando vengono azionati… provo ad allegare qualche informazione aggiuntiva, sperando possa aiutare a farmi risolvere questo problema.

Giusto per la cronaca, ma credo sia irrilevante, a differenza di quando ho scritto il post ho cambiato ambiente desktop (prima usavo Mate-Compiz, ora uso Cinnamon).

Allora… per quanto riguarda il gamepad in questione, si tratta di un gamepad di marca GameSir, il modello è G3w ed è un gamepad XBOX compatibile.
Sì, lo so… purtroppo il gamepad non è nativamente compatibile con sistemi GNU\Linux, anche se su android funziona senza problemi.
Inizio a dare qualche output di alcuni comandi… tanto per cominciare, con il comando:
lsusb
viene visualizzato, tra i vari dispositivi collegati, anche il gamepad
Bus 002 Device 019: ID 045e:028e Microsoft Corp. Xbox360 Controller

anche con il comando
cat /proc/bus/input/devices
il gamepad viene rilevato correttamente.

I: Bus=0003 Vendor=045e Product=028e Version=0110
N: Name="Microsoft X-Box 360 pad"
P: Phys=usb-0000:00:1d.0-1.8/input0
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.8/2-1.8:1.0/input/input38
U: Uniq=
H: Handlers=event26 js0 
B: PROP=0
B: EV=20000b
B: KEY=7cdb000000000000 0 0 0 0
B: ABS=3003f
B: FF=107030000 0

tenendo in considerazione gli Handlers, provando a testare il gamepad con evtest, con il comando
sudo evtest /dev/input/event26
ottengo questo output

Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x45e product 0x28e version 0x110
Input device name: "Microsoft X-Box 360 pad"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 304 (BTN_SOUTH)
    Event code 305 (BTN_EAST)
    Event code 307 (BTN_NORTH)
    Event code 308 (BTN_WEST)
    Event code 310 (BTN_TL)
    Event code 311 (BTN_TR)
    Event code 314 (BTN_SELECT)
    Event code 315 (BTN_START)
    Event code 316 (BTN_MODE)
    Event code 317 (BTN_THUMBL)
    Event code 318 (BTN_THUMBR)
  Event type 3 (EV_ABS)
    Event code 0 (ABS_X)
      Value      0
      Min   -32768
      Max    32767
      Fuzz      16
      Flat     128
    Event code 1 (ABS_Y)
      Value      0
      Min   -32768
      Max    32767
      Fuzz      16
      Flat     128
    Event code 2 (ABS_Z)
      Value      0
      Min        0
      Max      255
    Event code 3 (ABS_RX)
      Value      0
      Min   -32768
      Max    32767
      Fuzz      16
      Flat     128
    Event code 4 (ABS_RY)
      Value      0
      Min   -32768
      Max    32767
      Fuzz      16
      Flat     128
    Event code 5 (ABS_RZ)
      Value      0
      Min        0
      Max      255
    Event code 16 (ABS_HAT0X)
      Value      0
      Min       -1
      Max        1
    Event code 17 (ABS_HAT0Y)
      Value      0
      Min       -1
      Max        1
  Event type 21 (EV_FF)
    Event code 80 (FF_RUMBLE)
    Event code 81 (FF_PERIODIC)
    Event code 88 (FF_SQUARE)
    Event code 89 (FF_TRIANGLE)
    Event code 90 (FF_SINE)
    Event code 96 (FF_GAIN)
Properties:
Testing ... (interrupt to exit)

Comunque, apparentemente, anche provando a premere qualche pulsante o muovere gli assi, non viene registrato nulla

Il problema salta fuori andando ad analizzare il file
/var/log/Xorg.0.log

è possibile leggere tra le righe del log questi errori che riguardano proprio il gamepad

(II) config/udev: Adding input device Xiaoji Gamesir-G3w (/dev/input/js0)
(II) No input driver specified, ignoring this device.
(II) This device may have been added with another device file.
(II) config/udev: Adding input device Xiaoji Gamesir-G3w (/dev/input/event26)
(II) No input driver specified, ignoring this device.
(II) This device may have been added with another device file.
(II) config/udev: Adding input device Microsoft X-Box 360 pad (/dev/input/js0)
(II) No input driver specified, ignoring this device.
(II) This device may have been added with another device file.
(II) config/udev: Adding input device Microsoft X-Box 360 pad (/dev/input/event26)
(II) No input driver specified, ignoring this device.
(II) This device may have been added with another device file.

ora, per quel che posso capirne, Xorg cerca un driver specifico per configurare il dispositivo… e qui mi fermo, anche perché non essendo un dispositivo che supporta ufficialmente GNU\Linux, non saprei neanche quali driver potrei provare… avete qualche idea?

Grazie.

Sto continuando a fare qualche tentativo, ma dubito di riuscire a venirne a capo…

ho provato a testare ancora il gamepad dando il comando jstest /dev/input/js0 e come output ottengo

Driver version is 2.1.0.
Joystick (Microsoft X-Box 360 pad) has 8 axes (X, Y, Z, Rx, Ry, Rz, Hat0X, Hat0Y)
and 11 buttons (BtnA, BtnB, BtnX, BtnY, BtnTL, BtnTR, BtnSelect, BtnStart, BtnMode, BtnThumbL, BtnThumbR).
Testing ... (interrupt to exit)

ed una serie di valori di Axes e Buttons quasi tutti risultanti con 0 opure Off, eccezion fatta per alcuni valori Axes risultanti con -32767

di seguito riporto anche un estratto dell’output di dmesg

usb 2-1.8: new full-speed USB device number 8 using ehci-pci
usb 2-1.8: New USB device found, idVendor=05ac, idProduct=055b, bcdDevice= 2.00
usb 2-1.8: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 2-1.8: Product: Gamesir-G3w
usb 2-1.8: Manufacturer: Xiaoji
input: Xiaoji Gamesir-G3w as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.8/2-1.8:1.0/0003:05AC:055B.0007/input/input31
hid-generic 0003:05AC:055B.0007: input,hidraw5: USB HID v1.10 Gamepad [Xiaoji Gamesir-G3w] on usb-0000:00:1d.0-1.8/input0
usb 2-1.8: USB disconnect, device number 8
usb 2-1.8: new full-speed USB device number 9 using ehci-pci
usb 2-1.8: New USB device found, idVendor=045e, idProduct=028e, bcdDevice= 1.10
usb 2-1.8: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 2-1.8: Product: XBOX 360 For Windows
usb 2-1.8: Manufacturer: Xiaoji
input: Microsoft X-Box 360 pad as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.8/2-1.8:1.0/input/input32

Cercando di capire se fossero presenti i driver richiesti da Xorg (vedi commento 6), ho provato a sincerarmi della presenza di alcuni pacchetti che risultano, tra l’altro, già installati… sono presenti infatti i pacchetti xorg-x11-drv-evdev e xorg-x11-drv-libinput

Controllando sul percorso /usr/share/X11/xorg.conf.d trovo i file di configurazione sia per evdev (10-evdev.conf) che per libinput (40-libinput.conf)… da quanto sono riuscito a capire fino ad adesso (almeno credo), quello che invece manca è uno snippet sul percorso /etc/X11/xorg.conf.d/

https://www.x.org/releases/current/doc/man/man4/joystick.4.xhtml

Qualcuno sa se sia possibile generare qualcosa del genere con qualche comando o tool specifico?
Altrimenti l’unica possibilità che ho di far funzionare il gamepad sarebbe quella di crearmi manualmente uno snippet adatto :unamused:

Ciao @oStile10001 hai installato i :

kernel-modules-extra 

?
:slightly_smiling_face:

sì, il pacchetto kernel-modules-extra è già installato, come anche il pacchetto joystick-support

@oStile10001 anche :

SDL2

premetto che stò leggendo un pò in giro :slightly_smiling_face: se può esserti utile ho trovato anche questo sito https://it.tipsandtrics.com/how-get-game-controllers-running-linux-763320 :slightly_smiling_face:

presente anche SDL2

$ dnf list --installed 'SDL2*'
SDL2.i686                               2.0.14-1.fc33                   @updates
SDL2.x86_64                             2.0.14-1.fc33                   @updates
SDL2-devel.x86_64                       2.0.14-1.fc33                   @updates
SDL2_image.x86_64                       2.0.5-5.fc33                    @fedora 
SDL2_mixer.x86_64                       2.0.4-7.fc33                    @fedora 
SDL2_ttf.x86_64                         2.0.15-6.fc33                   @fedora 
SDL2_ttf-devel.x86_64                   2.0.15-6.fc33                   @fedora

Sull’articolo che hai linkato viene citato xboxdrv che su fedora si chiama xpad (non so se siano la stessa cosa in realtà) fornito proprio dal pacchetto kernel-modules-extra.
Quando ho aperto questo topic, avevo provato ad installare anche una versione patchata del modulo xpad che avevo trovato sui repo di negativo17.
Al momento il modulo comunque è già caricato sul kernel…

$ modinfo xpad
filename:       /lib/modules/5.10.19-200.fc33.x86_64/extra/drivers/input/joystick/xpad.ko.xz
license:        GPL
description:    X-Box pad driver
[...]

Xorg comunque non lo considera proprio…

$ xinput list
⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
⎜   ↳ Logitech G203 Prodigy Gaming Mouse      	id=9	[slave  pointer  (2)]
⎜   ↳ Logitech G203 Prodigy Gaming Mouse Consumer Control	id=11	[slave  pointer  (2)]
⎜   ↳ SEMICO GXT 860 Keyboard Consumer Control	id=17	[slave  pointer  (2)]
⎣ Virtual core keyboard                   	id=3	[master keyboard (2)]
    ↳ Virtual core XTEST keyboard             	id=5	[slave  keyboard (3)]
    ↳ Power Button                            	id=6	[slave  keyboard (3)]
    ↳ Video Bus                               	id=7	[slave  keyboard (3)]
    ↳ Power Button                            	id=8	[slave  keyboard (3)]
    ↳ Logitech G203 Prodigy Gaming Mouse Keyboard	id=10	[slave  keyboard (3)]
    ↳ Logitech G203 Prodigy Gaming Mouse System Control	id=12	[slave  keyboard (3)]
    ↳ Trust Webcam: Trust Webcam              	id=13	[slave  keyboard (3)]
    ↳ SEMICO GXT 860 Keyboard                 	id=14	[slave  keyboard (3)]
    ↳ SEMICO GXT 860 Keyboard System Control  	id=15	[slave  keyboard (3)]
    ↳ SEMICO GXT 860 Keyboard                 	id=16	[slave  keyboard (3)]
    ↳ Razer Razer Kraken X USB Consumer Control	id=18	[slave  keyboard (3)]
    ↳ Logitech G203 Prodigy Gaming Mouse Consumer Control	id=19	[slave  keyboard (3)]
    ↳ SEMICO GXT 860 Keyboard Consumer Control	id=20	[slave  keyboard (3)]

Dovrei mettermici con calma e provare ad adattare uno snippet su misura.

@oStile10001 Ho trovato anche questo copr :
https://copr.fedorainfracloud.org/coprs/petrb/xboxdrv/ che in teoria dovrebbe riprendere questo https://src.fedoraproject.org/rpms/xboxdrv :slightly_smiling_face: che poi finirebbe qua https://xboxdrv.gitlab.io/ però sui remirepo dopo fedora 29 se ne perdono le tracce https://rpms.remirepo.net/rpmphp/zoom.php?rpm=xboxdrv alchè ci riporta alla prima ipotesi sia mai che quel copr faccia a caso tuo ? :slightly_smiling_face:

xboxdrv è stato soppiantato da xpad… probabilmente non saranno la stessa cosa, ma sicuramente xpad è l’evoluzione di xboxdrv, ed è comunque un modulo molto più recente e più supportato (ci sarà anche un motivo se, da almeno 5 anni a questa parte, non ci sono stati nuovi rilasci di xboxdrv).

Comunque un tentativo ho voluto farlo, quindi ho provato ad installare il pacchetto xboxdrv presente sul repo copr che mi hai segnalato.

Eh, niente… purtroppo non mi è tornato molto utile.
Con il comando
$ sudo xboxdrv
ottengo questo output

xboxdrv 0.8.8 - http://pingus.seul.org/~grumbel/xboxdrv/ 
Copyright © 2008-2011 Ingo Ruhnke <[email protected]> 
Licensed under GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 
This program comes with ABSOLUTELY NO WARRANTY. 
This is free software, and you are welcome to redistribute it under certain 
conditions; see the file COPYING for details. 

Controller:        Microsoft X-Box 360 pad
Vendor/Product:    045e:028e
USB Path:          002:007
Controller Type:   Xbox360

Your Xbox/Xbox360 controller should now be available as:
  /dev/input/js0
  /dev/input/event26

Press Ctrl-C to quit, use '--silent' to suppress the event output

E poi, boh… cioé, il controller viene rilevato dal sistema (su questo non c’è dubbio) ma assi e pulsanti non rispondono ad alcun comando e Xorg continua a sostenere che non ci siano driver per farlo funzionare.

Eppure i moduli per il kernel ci sono, non credo ci sia la necessità di aggiungerne altri molto più datati di quelli supportati attualmente.
Sono presenti anche i driver per Xorg, anche se Xorg sostiene il contrario… è proprio per questo che sono sempre più convinto che sia necessario aggiungere qualche snippet alla configurazione di Xorg.

Altro sito :slightly_smiling_face: https://blog.desdelinux.net/it/como-utilizar-mando-de-xbox-one-en-fedora-31-y-no-morir-en-el-intento/ però è di fedora 31. quello che trovo ti posto , perchè non ho modo di fare prove cè anche questo : https://awesomeopensource.com/project/paroj/xpad :slightly_smiling_face:

ho voluto fare una prova, già sapendo che comunque non sarebbe stata risolutiva… tra l’altro è stato il mio primo tentativo quello di installare la versione patchata da Steam di xpad, all’epoca del post si poteva scaricare dai repo Steam di negativo17.
Provai ad installare sia il pacchetto dkms-xpad, sia akmod-xpad… ma, allora come oggi, questo modulo patchato non è servito a risolvere il problema.

Tra l’altro Steam riesce anche a rilevarlo come controller, se provo ad identificarlo (tramite la modalità Big Picture), il gamepad vibra anche… però non c’è verso di far funzionare neanche un solo pulsante.
È come avere una tastiera che viene riconosciuta dal sistema ma, quando si va a digitare i tasti, questi non danno risposta… ora non so se possa dipende da un segnale di input che il sistema non riesce ad interpretare/riconoscere, magari dovuto sicuramente alla completa incompatibilità del dispositivo… alla fine si tratta di un comune gamepad generico Xbox compatibile, neanche originale.
Fatto sta che, oltre ad essere correttamente rilevato, non vuole proprio saperne di funzionare con alcun modulo del kernel o driver che sia.

Mi ci sto scervellando ma, oltre che a fare qualche tentativo con qualcosa che trovo in giro su internet, non ho proprio idea di dove andare a parare… mah :unamused: prima o poi mi deciderò a sostituire sto pezzotto che ho con qualcosa di decentemente più compatibile con linux.

@oStile10001 hai guarda anche qua ? :
https://wiki.archlinux.org/index.php/Gamepad :slightly_smiling_face:

1 Mi Piace

@edmondo credi davvero che abbia lasciato qualcosa di intentato? :sweat_smile:
Sì, ovviamente ho consultato anche quella wiki… sinceramente però, tra i paragrafi della wiki non ho trovato nulla di inerente al mio problema.
Non so proprio come risolvere (ammesso e non concesso che sia possibile)… quello che mi fa più rabbia è che il gamepad viene rilevato dal sistema e da Steam, ma nonostante ciò non funziona.

No, vabbe’ @edmondo :sweat: mi sa che invecchiando non riesco più a gestire i problem solving con lucidità… poi inizio a spazientirmi più facilmente e perdo di vista anche le cose più ovvie Using generic/clone controllers (tratto sempre da quella wiki). :poop:
Eh niente… alla fine mi è bastato creare semplicemente uno script in Python contenente quanto indicato sulla wiki

#!/usr/bin/env python3

import usb.core

dev = usb.core.find(idVendor=0x045e, idProduct=0x028e)

if dev is None:
    raise ValueError('Device not found')
else:
    dev.ctrl_transfer(0xc1, 0x01, 0x0100, 0x00, 0x14) 

ed eseguirlo con i privilegi di amministratore.

La prima volta che ho eseguito lo script mi restituiva l’errore ModuleNotFoundError: No module named 'usb', è stato necessario che installassi il pacchetto python3-pyusb.
Eseguendo nuovamente lo script, tutto è filato liscio… adesso il gamepad sembra funzionare senza problemi. :heart_eyes: