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.
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 
Ciao @oStile10001 hai installato i :
kernel-modules-extra
?

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
se può esserti utile ho trovato anche questo sito https://it.tipsandtrics.com/how-get-game-controllers-running-linux-763320 
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
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 ? 
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.
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
prima o poi mi deciderò a sostituire sto pezzotto che ho con qualcosa di decentemente più compatibile con linux.
@edmondo credi davvero che abbia lasciato qualcosa di intentato? 
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
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). 
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. 