Ma quindi che controller devo usare su Linux?

PC gaming! Sì, quello che fate con il mouse e tastiera, giocando shooter tutto il santo giorno perché è il solo genere che conta.

Ma voi, cari gamer, ce li avete dei giochi che sono controller-friendly nella libreria di giochi a vostra disposizione? Perché sì, perché no? E ditemi… che controller usate? E soprattutto, ma quindi che controller si deve usare su Linux? Questa, la domanda che si fanno i pochi stolti che osano giocare rilassati… (che cazzo ti rilassi a fare! Devi bere 5 Monster Energy al giorno! Devi migliorare il tuo aim!)

E al solito anche questo rant vi è servito dalle domande esistenziali che il carissimo LucaCS, compatrono di Fedora Linux e dei disillusi, chiede alle 3 e mezzo di notte su gruppi a random. E beh, oggi gli rispondiamo.

TL;DR: Controller Xbox, da Xbox 360 in poi. Se avete controller One o X|S usatelo collegato col cavo.

Ma adesso scendiamo sul nitty gritty perché qualcuno di voi avrà sicuramente più di qualche domanda a riguardo, e soprattutto più di una assunzione sbagliata a riguardo.

Linux e i driver HID per i gamepad

Sebbene il primo passo per ogni controller sia quello di essere benedetto dal kernel mainline, prima o poi, con qualche driver (ad es. xpad per i controller Xbox usati via USB, hid-sony per il DualShock 3 e hid-playstation per il DualShock 4 e Dualsense), in realtà ciò non è strettamente necessario che accada, in quanto il controller, qualunque esso sia, verrà sicuramente riconosciuto da Linux come una periferica HID compliant, e verrà comunque reso accessibile al resto delle applicazioni del sistema “in modo generico”. Questo spiega, ad esempio, come mai Steam riesce a comunicare bene con un controller Xbox X|S connesso via Bluetooth senza usare moduli del kernel out-of-tree (come xpadneo).

Driver o non driver, Linux comunque esporrà un nodo “grezzo” HID /dev/hidrawX che, tramite delle regole di udev, potrà essere usato dalle applicazioni che volete (o driver userspace, come alcuni che potete trovare su GitHub per vari controller non supportati in-tree). Steam sembrerebbe usare hidraw per comunicare con i controller, ed è questo il motivo per cui Valve riesce a supportare controller nuovissimi sia su Deck che su PC Linux con un semplice aggiornamento del suo client (che spesso e volentieri arriva mesi prima del supporto Linux mainline.)

Menzione speciale: SDL

SDL è una libreria multimediale usata tantissimo nello sviluppo dei videogiochi. Il comparto input di SDL è di enorme importanza non solo perché è letteralmente usato da quasi ogni gioco indie in circolazione e dalla quasi totalità di giochi nativi a Linux in circolazione, ma anche perché riesce sempre a riconoscere bene il tipo di controller, anche se questo non ha un driver in kernel. Dal source ho capito che usa evdev in congiunzione al suo database interno di controller (il famigerato gamecontrollerdb.txt) e onestamente la cosa funziona straordinariamente bene. Complimentoni a loro, oh!

(E anche perché SDL è la backbone di molte cose)

Linux e i giochi nativi

I giochi nativi Linux usano, ovviamente, delle librerie (ad esempio, per l’appunto, SDL) per comunicare con i controller. Diciamo che avere un driver mainline che supporta bene il controller in questione è molto utile in questo stage, in quanto il button mapping e le funzioni esposte saranno già corrette in-driver e quindi i giochi nativi potranno essere fruiti senza l’ausilio di remapping di pulsanti e leve varie (tranne se il gioco è recente e usa SDL perché in quel caso sarà sempre corretto, a quanto ho notato).

Ricordiamo però, che il gioco che giocate comunque dovrà supportare il controller che avete! Non aspettatevi mai di giocare bene a un gioco del 2018 con un DualSense se esso ha un supporto per il DualShock 4.

Il Wine loophole

Wine, che tutti amiamo perché ci rende la vita facile e ci aumenta esponenzialmente la quantità di titoli giocabili su Linux, in realtà ci mette dinanzi al vecchissimo dilemma DirectInput vs XInput che speravamo di esserci lasciati alle spalle; oltre a quello, però, ci aggiunge altri bug non proprio predicibili, dati dal fatto che comunque il nostro controller è collegato a Linux e “tradotto” nel suo equivalente per i giochi nativi a Windows. Ad esempio, la rilevazione di Wine per i controller DirectInput è ancora acerba e molti controller supportati da molti giochi semplicemente vengono visti come “controller generici” da essi. Un esempio è il DualSense su Tekken 8 - provare per credere.

Anche Wine può usare hidraw quindi questi bug dovrebbero, in teoria, essere risolti con il passare del tempo, e idealmente dovremmo avere solo il dilemma “alla Windows” alla mano.

E se parliamo di Wine dobbiamo parlare per forza di… Proton. Esso, va detto, è una suite eccellente di strumenti, ma aggiunge qualche altra incertezza al supporto controller, dovuta alle patch che Valve fa alla sua versione downstream di Wine.

Steam e Steam Input

Steam… salvezza di molti e bestemmia di tutti. La metto così, dobbiamo il gaming su Linux a Steam, e in un certo senso siamo schiavi di Steam per il supporto al controller, e lo siamo sempre stati.

Steam ha l’unico strumento serio su Linux per rimappare i controller e rendere i giochi effettivamente giocabili con tutti i controller che vogliamo: Steam Input. Esso, lo ricordo, sembrerebbe usare hidraw per leggere e capire i controller, e usa un modulo del kernel che dovrete caricare voi, chiamato uinput, per emulare un controller Xbox 360 (e solo un controller Xbox 360).

Il vostro controller “nuovo e potenzialmente non supportato” potrebbe funzionare perfettamente sui giochi che avete sulla libreria di Steam, a patto che voi spendiate due secondi a configurare Steam Input. Quindi provateci! Non buttate tempo a pensare che “quel controller è troppo bello ma possibilmente non funziona su Linux” perché basta che c’è un modo di collegarlo via USB, Steam Input lo troverà e ve lo farà usare.

Questo bel tool ovviamente funziona solo dentro Steam, e forse è qui il problema più grosso: per giochi su Epic o GOG come si fa?

L’assenza di mappatori “easy”

Tecnicamente xboxdrv può rimappare in userspace (tramite uinput) ogni altro controller, conosciuto o sconosciuto che sia; il problema è che questo strumento è solo per CLI ed enormemente tedioso da usare. E qui credo che ci sia il problema principale di Linux: mentre su Windows ci sono mappatori e remappatori che servono l’utente medio, su Linux c’è “o va, o Steam Input, o comprati un pad supportato dal gioco in modo nativo” senza mezze misure.

Ciò significa che usare Lutris, Heroic, o altri “game launchers”, vi farà desiderare Steam Input se non avete un controller Xbox “tuttofare”.

La compatibilità effettiva

Sebbene poteva non essere così, se solo qualcuno ci avesse creduto di più, beh, siamo nello stesso ballpark dei PC gamer su Windows: munitevi di un controller Xbox, o comunque che supporti XInput su Windows poiché verrà tradotto alla stessa API su Wine.

La menzione speciale ai Dualshock 4 e ai Dualsense va fatta perché in generale sono buonissimi controller da avere per quei giochi col supporto esplicito ad essi e perché su Linux USB e bluetooth vengono visti allo stesso modo e il touchpad controlla il mouse per impostazione di default, rendendo molto più semplice l’interazione con un PC adibito a Steam Machine (Big Picture nessuno?)

I controller per Nintendo Switch sono da evitare se non si sta esplicitamente cercando un controller da usare per la maggior parte su emulatori, potenzialmente di console Nintendo.

I controller di terze parti sono un’incognita bella e buona, in quanto se va male sono visti come generici, se va bene sono già supportati sul kernel mainline sotto il driver dei vari controller per cui sono simili o compatibili.

PS: Avevo del tempo per rispondere alla seconda gran domanda “ma quindi i controller 8BitDo?” e ho visto che veramente pochi sono supportati:

  • SN30 Pro via Bluetooth (via hid-microsoft)
  • Pro 2 Wired (via xpad)